2010-11-21 12 views
0

Ich arbeite auf GUI mit Swing. Ich habe eine Hauptklasse, von wo ich zunächst zwei separate Panels laden. Mein erstes Panel hat ein textField und eine Taste & zweites Panel, das ein Grid Layout ist, das in ein Panel eingebettet ist, wie 9 Knöpfe, nummeriert als A1, A2, A3, ... A9. Also wie ich schon sagte beide sind von meiner Hauptklasse zunächst geladen.GridLayout Panel Button Text Update zur Laufzeit

Jetzt nach der Ausführung, wie ich sehe meine beiden separaten Panels.Now von Panel 1 (die Textfeld und Schaltfläche hat) ich einige Text dort z. B. Nummer A1. Was ich will, ist die Farbe der Schaltfläche auf dem zweiten Panel sollte sich ändern.

Was ich getan habe ich einen ActionListiner zu meiner Schaltfläche auf FirstPanel hinzugefügt und neue Instanz des zweiten Panel erstellt. Aber auf diese Weise dupliziert Panel 2. So, wie ich weiter Nummer in TextField hinzufügen, sehe ich neues Panel. Wie kann ich die vorhandene Farbe des zweiten Bedienfelds zur Laufzeit aktualisieren?

Antwort

1

Ich nehme an, Sie haben so etwas wie

JPanel panel2 = new JPanel(new GridLayout(3,3)); 
JButton[] buttons = new JButton[9]; 

// instantiate buttons and add them to grid panel 
for (int i = 0; i < 9; ++i) { 
    buttons[i] = new JButton("A"+(i+1)); 
    panel2.add(buttons[i]); 
} 

.... 

void actionPerformed(ActionEvent e) { 
    String text = ((JTextField)e.getSource()).getText(); 

    //simplified, I assume input is always correct and in the form of "An" where n is the digit 
    // convert the string to an index to reference the correct button in array 
    int which = Integer.parseInt(text.substring(1,2)); 

    buttons[which].setBackground(Color.RED); 
}