Hallo zusammen
Ich besitze in meinem Projekt eine JFrame Klasse, welche ein JPanel anzeigt.
Diesem JPanel wird ein zweites JPanel hinzugefügt welches beispielsweise ein Rechteck anzeigt.
Das funktioniert soweit ohne Probleme.
Nun würde ich aber beispielsweise das Rechteck im zweiten JPanel gerne animieren und füge deshalb
einen Thread zum zweiten JPanel hinzu.
Starte ich aber nun diesen Thread im zweiten JPanel (Bsp. im Konstruktor) und führe das Programm aus,
wird nichts angezeigt.
Wie kann ich dieses Problem vermeiden?
LG Samuel
Edit: Ich hielt den Quellcode in diesem Falle für nebensächlich. Dabei habe ich mich offenbar geirrt.
Ich besitze in meinem Projekt eine JFrame Klasse, welche ein JPanel anzeigt.
Diesem JPanel wird ein zweites JPanel hinzugefügt welches beispielsweise ein Rechteck anzeigt.
Das funktioniert soweit ohne Probleme.
Nun würde ich aber beispielsweise das Rechteck im zweiten JPanel gerne animieren und füge deshalb
einen Thread zum zweiten JPanel hinzu.
Starte ich aber nun diesen Thread im zweiten JPanel (Bsp. im Konstruktor) und führe das Programm aus,
wird nichts angezeigt.
Wie kann ich dieses Problem vermeiden?
LG Samuel
Edit: Ich hielt den Quellcode in diesem Falle für nebensächlich. Dabei habe ich mich offenbar geirrt.
Java:
//===============================================
/**
* Das zweite JPanel mit dem Thread
*/
public class MyBean extends JPanel implements Runnable {
//------------------------------------------------------------
public MyBean() {
setBorder(BorderFactory.createEtchedBorder());
// Starte Thread
run();
}
//------------------------------------------------------------
/**
* Zeichne ein Reckteck auf das Panel
*/
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
g.setColor(Color.RED);
g.drawRect(20, 20, 10, 10);
}
//------------------------------------------------------------
/**
* Der Thread
*/
@Override
public void run() {
while(true){
try {
repaint();
Thread.sleep(30);
} catch (InterruptedException ex) {
Logger.getLogger(MyBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
//===============================================
/**
* Das Hauptpanel, welchem das zweite Panel übergeben wird.
*/
public class pnlMyWindow extends javax.swing.JPanel {
//------------------------------------------------------------
public pnlMyWindow() {
initComponents();
}
//------------------------------------------------------------
private void initComponents() {
myBean = new Bean.MyBean();
javax.swing.GroupLayout myBeanLayout = new javax.swing.GroupLayout(myBean);
myBean.setLayout(myBeanLayout);
myBeanLayout.setHorizontalGroup(
myBeanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 96, Short.MAX_VALUE)
);
myBeanLayout.setVerticalGroup(
myBeanLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 96, Short.MAX_VALUE)
);
// ... (auto generated methode)
}
}
//===============================================
public class Window extends JFrame{
private JFrame frame = null;
//------------------------------------------------------------
public Window(){
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//------------------------------------------------------------
/**
/*Dieser Methode wird beim Programmstart eine Instanz der Klasse pnlMyWindow übergeben
*/
public void setPanel(JPanel panel, String title){
frame.setTitle(title);
frame.getContentPane().removeAll(); // clear
frame.getContentPane().add(panel); // set
frame.pack(); // fit to panel (adjust size)
frame.setVisible(true); // show
}
}
Zuletzt bearbeitet: