2016-04-21 3 views
0

В рамках упражнения я хотел бы создать программу, отображающую сетку 9x9 из JButtons. Когда я нажимаю на кнопку, я бы хотел, чтобы эта кнопка изменилась каким-то образом, например, изначально она отображает «o», но когда вы нажимаете на нее, она отображает «x», или, может быть, меняет цвета и т. Д. , а остальные кнопки остаются неизменными.Java - Создание сетки кнопок с использованием массива 2d

Однако я не уверен, как это сделать. Я создал 2D-массив JButtons и поместил их в панель 9 GridLayout 9x9. Я также устанавливаю ActionListener для каждого из них. Проблема в том, что я не знаю, как изменить цвет или текст только одной кнопки. Вот короткая версия моей программы, в которой отображаются только соответствующие части.

private JButton[][] t = new JButton[9][9]; //Declared much earlier in the program, right after the class declaration. 

public void buildTile() 
{ 
    panelc.setLayout(new GridLayout(9, 9)); 
    for(int r = 0; r < 9; r++) 
    { 
     for(int c = 0; c < 9; c++) 
     { 
      t[r][c] = new JButton("O"); 
      t[r][c].setBackground(Color.BLACK); 
      t[r][c].setForeground(Color.WHITE); 
      t[r][c].addActionListener(new TileListener()); 
      panelc.add(t[r][c]); 
     } 
    } 
} 

private class TileListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     //Some code to change a specific button 
    } 
} 

Как я могу указать, какую кнопку выполнить какое-то эстетическое изменение?

+0

ActionEvent # getSource? – MadProgrammer

ответ

-2

В файле actionenerener e.getSource() вернет кнопку, нажатую кнопку

+0

Да, но печать на консоль возвращает только что-то вроде: javax.swing.JButton [, 2,2,66x49, alignmentX = 0.0, alignmentY = 0.5, border = javax.swing.plaf.BorderUIResource $ CompoundBorderUIResource @ 1b3c169, flags = 296, MaximumSize =, = MinimumSize, PreferredSize =, = DefaultIcon, disabledIcon =, = disabledSelectedIcon, рентабельность = javax.swing.plaf.InsetsUIResource [вершина = 2, слева = 14, снизу = 2, справа = 14], paintBorder = true, paintFocus = true, pressIcon =, rolloverEnabled = true, rolloverIcon =, rolloverSelectedIcon =, selectedIcon =, text = O, defaultCapable = true] Нет ничего другого, что я мог бы сделать с e.getSource(), что было бы полезно. –

+0

Хорошо, чтобы было ясно: Вы получаете объект, вызывая e.getSource(). Вы должны направить его в JButton: ((JButton) e.getSource()) Затем вы можете делать с ним все, что хотите, fe: ((JButton) e.getSource()). SetText ("...") –

+0

Это работает отлично. Я извиняюсь, но я довольно новичок в Java и не видел эту технику раньше. Не могли бы вы объяснить, что именно делает это утверждение? –

Смежные вопросы