Ich versuche hierbei ein JLabel mit dem Namen Rechteck zu erzeugen, welches einen grünen Hintergrund hat. Danach will ich in einem bestimmten Zeitabstand immer 10 JLabels mit dem namen Zelle darüber legen, was aber nicht funktioniert. Wenn man den Befehl "Rechteck.setOpaque(true);" auskommentiert, kommt mein gewünschtes Ergebnis raus, nur das das Feld eben noch grün sein sollte.
Hier ist mein vereinfachter Code: (die Klassen Zellen,Zelle und Test habe ich hier einfach mal weggelassen)
package Main;
import java.awt.Color;
public class GUI extends JFrame{
private static final long serialVersionUID = 1L;
LinkedList<Zelle> GUIZellen = new LinkedList<Zelle>();
JLabel Rechteck= new JLabel();
JPanel Panel = new JPanel();
public GUI(){
super();
main();
}
public void main(){
this.setTitle("Zellen");
this.setSize(500,900);
this.setLayout(null);
this.setLocation(1600,10);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel.setSize(500,900);
Panel.setLayout(null);
Rechteck.setBounds(22,180,441,661);
Rechteck.setBackground(Color.green);
Rechteck.setOpaque(true);
Rechteck.setBorder(BorderFactory.createLineBorder(Color.black));
Panel.add(Rechteck);
this.add(Panel);
this.setVisible(true);
}
public void GUIZelle(){
int x=0;
while(x<28||x>440){
x=(int)((Math.random()) * 440 + 1);
}
int y=0;
while(y<190||y>830){
y=(int)((Math.random()) * 830 + 1);
}
GUIZellen.add(new Zelle(x,y));
neueZelle();
}
public void neueZelle(){
JLabel Zelle = new JLabel();
Zelle.setBounds(GUIZellen.getLast().getX(), GUIZellen.getLast().getY(), 10, 10);
Zelle.setBorder(BorderFactory.createLineBorder(Color.black));
Zelle.setOpaque(true);
Panel.add(Zelle);
}
}
package Main;
import java.awt.Graphics;
import java.util.Timer;
import java.util.TimerTask;
public class Ticker {
public Ticker(){
final Timer timer = new Timer();
timer.schedule(
new TimerTask() {
public void run() {
BeiTick();
}
}, 0L, 1000L
);
}
public void BeiTick(){
Test.z.setZellenAnz(Test.z.getZellenAnz()+1);
if(Test.z.getZellenAnz() % 1==0){
for(int i=0;i<10;i++){
Test.g.GUIZelle();
}
}
}
}