NSView( java ) and awt how to pas trouvé dans NSGraphics

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

plumber

Invité
voila comment remplace t'on c'est method awt(voir code ci dessous)
de plus comment faire pour que les elements de la NSView ne soit pas
transparents quand la window l'est ?

import com.apple.cocoa.foundation.*;
import com.apple.cocoa.application.*;
import java.util.*;
import java.awt.*;

public class GraficArrayRunner extends NSView implements Runnable{

private GrafArr graficarr;
private Thread thread;
Random rand;

public GraficArrayRunner(NSRect frame) {
super(frame);
graficarr = new GrafArr() ;
thread = new Thread(this);
thread.start();

}

public void drawRect(NSRect rect) {


}

public void paint (Graphics g) {
super.paint(g);
g.fillRect(10,50,10,rand.nextInt(200)) ;
g.drawString("hello world",50,rand.nextInt(200)) ;
}

public void run(){
while (true) {
try{thread.sleep(1000);
rand = new Random();
repaint();
}catch(InterruptedException e){
System.out.println(e);
}
}
}

}



zen.gif
zen.gif
zen.gif
 
Bon j'y connais rien en java mais qu'appelle tu méthode awt ?
Pour une fenetre transparente, il faut appliquer une image avec un canal alpha pour rendre visible ce que tu veux. (Voir l'exemple Round Transparent Window sur le site Apple).

D'autre part en objective-c quand tu as une méthode drawRect, elle est normalement accompagnée d'un setNeedsDisplay en fin d'initialisation (ou a d'autres moments du code aussi tout depend ce que tu fais) pour exécuter le drawRect (qui est vide dans ton code). Quand tu implementes drawRect, tu prend le controle total des opérations de dessin avec Quartz. Je vois que tu as une méthode paint mais je comprend pas pourquoi ton drawRect est vide ??? Tu n'as rien dans ta fenetre avec ca ???
 
Pour dessiner dans une NSView 'en obj-c ou en Java) il faut mettre sont code de dession dans drawRect(NSRect rect) sachant que le rect est la zone qui doit etre redéssiné.

Donc ton code de dessin met le directement dans cette methode drawRect.

remplace les methodes de graphics par celles qui conviennent au NSView

//g.fillRect(10,50,10,rand.nextInt(200)) ;

NSRect monRect = new NSRect(10,50,10,rand.nextInt(200));
NSBezierPath.fillRect(monRect);

//g.drawString("hello world",50,rand.nextInt(200)) ;

NSMutableAttributedString attrStr = new NSMutableAttributedString("hello world");
NSRange range = new NSRange(0, attrStr.length());
NSFont font = NSFont.fontWithNameAndSize("Arial Narrow", 10f);
attrStr.addAttributeInRange(NSAttributedString.FontAttributeName, font, range);

NSGraphics.drawAttributedString(attrStr, new NSPoint(50, rand.nextInt(200));

voila si je n'ai pas fais d'erreur de memoire comment tu peux mettre des éléments dans ta NSView.

A+
 
merci mais j'ai bien avancer j'ai crée des instance de nsgrafic

pour avoir des objets drawstring exetera comme en awt