Hallo liebe Java - Geaks.
Bin grad am Programmieren einer 4-gewinnt Oberfläche. sieht auch schon nicht so schlecht aus.
Die Oberfläche ist ein Raster(Gridlayout) mit 7*6 kreisen.
Das Problem ist nur, wenn ich auf einen der Kreise klicke sollte sich die Farbe des Kreises ändern (simuliert einen Spielzug eines Spielers in die angeklickte Spalte). Das macht es aber erst nachdem ich das Fenster vergrößere, verkleinere, setVisible(true) bzw. irgendwas mache, das der EDT wahrnimmt. Ich möchte aber, dass unmittelbar, nachdem ich auf den Kreis im Spielfeld klicke, er seine Farbe ändert ohne irgendwelche zusätzliche Actions.
So, nun die Frage: Wie kann ich das Frame im MouseListener neu zeichnen? startGui.run funktioniert dort nicht, da der MouseListener in der Run Methode steht. ???
Vielen Dank,
Rif
public class ProgrammStart{
public static void main(String[] args) {
Spielfeld yeah = new Spielfeld(460, 400);
yeah.fillRdm();
Runnable startGui = new Runnable() {
public void run() {
final JFrame frame = new JFrame("4 gewinnt");
frame.setMinimumSize(new Dimension(650, 600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.BLUE);
frame.setLayout(new GridLayout(7, 6));
for (int i = 0; i < Spielfeld.anzX; i++) {
for (int j = 0; j < Spielfeld.anzY; j++) {
final ZeichenPanel p = new ZeichenPanel(
Spielfeld.felder[j]);
p.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
//HIIIIIIIIIIIEEEEEEEEEER
p.getFeld().setStat(
STAT.getStat((p.getFeld().getStat()
.ordinal() + 1) % 3));
System.out.println("clicked");
//Möchte hier das Frame neu zeichnen!!!
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
frame.add(p);
}
}
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
};
EventQueue.invokeLater(startGui);
System.out.println("ende!");
}
}
Bin grad am Programmieren einer 4-gewinnt Oberfläche. sieht auch schon nicht so schlecht aus.
Die Oberfläche ist ein Raster(Gridlayout) mit 7*6 kreisen.
Das Problem ist nur, wenn ich auf einen der Kreise klicke sollte sich die Farbe des Kreises ändern (simuliert einen Spielzug eines Spielers in die angeklickte Spalte). Das macht es aber erst nachdem ich das Fenster vergrößere, verkleinere, setVisible(true) bzw. irgendwas mache, das der EDT wahrnimmt. Ich möchte aber, dass unmittelbar, nachdem ich auf den Kreis im Spielfeld klicke, er seine Farbe ändert ohne irgendwelche zusätzliche Actions.
So, nun die Frage: Wie kann ich das Frame im MouseListener neu zeichnen? startGui.run funktioniert dort nicht, da der MouseListener in der Run Methode steht. ???
Vielen Dank,
Rif
public class ProgrammStart{
public static void main(String[] args) {
Spielfeld yeah = new Spielfeld(460, 400);
yeah.fillRdm();
Runnable startGui = new Runnable() {
public void run() {
final JFrame frame = new JFrame("4 gewinnt");
frame.setMinimumSize(new Dimension(650, 600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.BLUE);
frame.setLayout(new GridLayout(7, 6));
for (int i = 0; i < Spielfeld.anzX; i++) {
for (int j = 0; j < Spielfeld.anzY; j++) {
final ZeichenPanel p = new ZeichenPanel(
Spielfeld.felder[j]);
p.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
//HIIIIIIIIIIIEEEEEEEEEER
p.getFeld().setStat(
STAT.getStat((p.getFeld().getStat()
.ordinal() + 1) % 3));
System.out.println("clicked");
//Möchte hier das Frame neu zeichnen!!!
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
frame.add(p);
}
}
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
};
EventQueue.invokeLater(startGui);
System.out.println("ende!");
}
}