java-cocoa need helps

  • Créateur du sujet Créateur du sujet plumber
  • Date de début Date de début
P

plumber

Invité
je commence tout juste

voila le but de la manoeuvre

faire un main nib clearcolor
puis apres customNSView (pour plutard )

alors j' ai commencer par un trus du genre

faire une sub class de NSWindow

le nom de ma class CustomWindow
j'ai choisi java

import com.apple.cocoa.foundation.*;
import com.apple.cocoa.application.*;


public class CustomWindow extends NSWindow {

private NSColor ClearColor;
//NSWindow itsWindow;
public CustomWindow(){

ClearColor=NSColor.clearColor();
setBackgroundColor(ClearColor);
}
}

donc ca fait rien hehe parce que je sais que je ne communique pas
avec mon main nib

je prescent que ma class devrais prendre un argument du style

NSWindow mon main window

alors voila question comment faire communiquer ca

on verra plutard pour le reste

merci d'avance

c'est bon en objective-c ca marche les api sont plus claire

mais la je voudrais du pure java-cocoa



 
Tes explications ne sont pas très claires, mais dans Interface Builder, il faut faire en sorte que ta fenêtre soit de ton type CustomWindow. Pour ça, clique sur ta fenêtre, fais apparaître les informations (commande + 5) et définit ta fenêtre comme étant un objet du type CustomWindow.

A part ça, il me semble que dans ton bout de code, il manque un appel au super constructeur. ( super() )
 
Plutôt que des grands discours, j'ai préféré te faire un exemple d'utilisation d'une classe comme tu la désire en Java. J'espère que c'était bien la ta question.

http://homepage.mac.com/grabataire/devExemple/windowClassinJava.sit

en fait j'ai fait une customWindow qui est transparente puis tu peux changer la couleur de fond ainsi que la transparence....

ce n'est qu'un petit exemple que tout le monde peut ré utiliser.

 
Sachez tout de même que sous cocoa pour peu qu'on utilise le concept MVC préconisé par Interface Builder, toute main Windows est associée à un controller.
En outre sachez également que le runtime cocoa avant d'afficher une fenêtre, exécute la méthode awakeFromNib de son Controller.
En général c'est dans cette méthode que l'on procède à des initialisations.
Le controller du main window est un objet instance de NSObjet et une de ses variables (on dit outlet) est justement le main Window.
A cet outlet on peu lui changer quelques attributs dont sa transparence en appelant la méthode setAlphaValue entre autres.

Salut.
 
Je voudrais juste répondre a Manu pour lui dire qu'ici on parlais de Cocoa / Java et que le AwakeFromNib n'existe pas en Java.
En Java pour implémenter un constructeur ca se fait directement dans le constructeur Java.

Sinon en ce qui concerne l'Objective-C je suis entièrement d'accord avec toi.

 
j'ai bien avancé maintenant vitesse autoroute

tu peux faire ca

public void awake() {
super.awake();
System.out.println(this.getClass().getName() + "'s awake method called");
}
 
import com.apple.cocoa.foundation.*;
import com.apple.cocoa.application.*;

public class CustomWindow extends NSWindow {

protected NSPoint CWinitPosition;
protected NSPoint CWcurrentPosition;
protected NSPoint CWnewPosition;

public CustomWindow( NSRect contentRect, int styleMask, int backingType, boolean defer) {
super(contentRect,BorderlessWindowMask,backingType,false);

setBackgroundColor(NSColor.blackColor());
setAlphaValue((float)0.766666);
setHasShadow(false);
setOpaque(false);
}

public void mouseDragged(NSEvent CWMouseEvent) {
CWcurrentPosition =convertBaseToScreen(mouseLocationOutsideOfEventStream());
CWnewPosition=new NSPoint((CWcurrentPosition.x() - CWinitPosition.x()),(CWcurrentPosition.y() - CWinitPosition.y()));

if((CWnewPosition.y()+frame().size().height()) > (NSScreen.mainScreen().frame().origin().y()+NSScreen.mainScreen().frame().size().height()) ){
CWnewPosition=new NSPoint(CWnewPosition.x(),NSScreen.mainScreen().frame().origin().y() + (NSScreen.mainScreen().frame().size().height()-frame().size().height()));
}

setFrameOrigin(CWnewPosition);
}

public void mouseDown(NSEvent CWMouseEvent) {
CWinitPosition=convertBaseToScreen(CWMouseEvent.locationInWindow());
CWinitPosition =new NSPoint(CWinitPosition.x()-frame().origin().x(),CWinitPosition.y()-frame().origin().y());
}

}