H
hoi_polloi
Gast
Hallo liebe Forumsnutzer,
ich habe einen JFrame und darin befindet sich ein aus JPanel abgeleitetes myPanel.
Um es gleichzeitig mit dem GUI-Frame der Applikation laufen zu lassen, habe ich das Panel in einem Thread laufen. Ich möchte warten bis alles berechnet ist (deshalb t.join() ). Alles funkioniert auch, aber nicht die repaint() Methode in des Panel-Threads, ich habe nur ein graues Fenster.
Rufe ich den Thread ohne join() auf, läuft alles, aber leider gleichzeitig, dass will ich ja eben nicht. Hier der Code:
Wahrscheinlich ist irgendwo ein Denkfehler. Also WriteTablet wird in der main instanziiert. so weit so gut, nur das graue Fenster stört mich. Danke für Eure Hilfe
hoi_polloi[/code]
ich habe einen JFrame und darin befindet sich ein aus JPanel abgeleitetes myPanel.
Um es gleichzeitig mit dem GUI-Frame der Applikation laufen zu lassen, habe ich das Panel in einem Thread laufen. Ich möchte warten bis alles berechnet ist (deshalb t.join() ). Alles funkioniert auch, aber nicht die repaint() Methode in des Panel-Threads, ich habe nur ein graues Fenster.
Rufe ich den Thread ohne join() auf, läuft alles, aber leider gleichzeitig, dass will ich ja eben nicht. Hier der Code:
Code:
public class WriteTablet extends JFrame{
public SignPanel p;
public void GetData(){
Thread t = new Thread(p);
t.setPriority(Thread.NORM_PRIORITY);
t.start();
try{
t.join();
} catch(InterruptedException e){
// nothing to do
}
}
public WriteTablet(int x, int y, String name){
Random rnd = new Random();
setTitle("Tablet Writing Field");
p = new SignPanel(x, y, name);
getContentPane().add(p);
setLocation(300, 70);
setResizable(false);
pack();
setVisible(true);
}
}
public class SignPanel extends JPanel implements Runnable{
private boolean FINISH = false;
// and many other data types (X_DIM, ...)
public void run(){
while(!FINISH){
TabletDevice();
}
}
public SignPanel(int X, int Y, String id){
X_DIM = X;
Y_DIM = Y;
setPreferredSize(new Dimension( X_DIM+BORDER, Y_DIM+BORDER));
scale_fact = (double) X_DIM / X_TABLET;
setBackground(Color.white);
setForeground(Color.black);
Border etchedBdr = BorderFactory.createEtchedBorder();
Border titledBdr = BorderFactory.createTitledBorder(etchedBdr, id);
Border emptyBdr = BorderFactory.createEmptyBorder(BORDER, BORDER, BORDER, BORDER);
Border compoundBdr=BorderFactory.createCompoundBorder(titledBdr, emptyBdr);
setBorder(compoundBdr);
pen_vec = new Vector();
}
private void TabletDevice(){
// Do a thing here...
FINISH = false;
//some code
repaint();
// DoSomething else...
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setColor(Color.GREEN);
g2.fillRect(0,0,X_DIM+BORDER, Y_DIM+BORDER);
g2.setColor(Color.WHITE);
g2.fillRect(BORDER, BORDER, X_DIM-BORDER, Y_DIM-BORDER);
}
hoi_polloi[/code]