我有關於JButton的問題。我有一個20x20 JButton的GridLayout。當我點擊它時,我想獲得一個按鈕的價值。 (x.getText())。JButton不會返回正確的文本值
sout只打印右下角值,不管我點擊哪個按鈕。
如果我點擊左上方按鈕,它打印19.我想回去在這種情況下,該值爲0
下面我的代碼。
public class MainFrame extends Frame implements MouseListener{
JButton button;
public MainFrame() {
setSize(new Dimension(1000, 1000));
addComponents();
}
private void addComponents(){
JPanel mainPanel = new JPanel(new BorderLayout());
JPanel top = new JPanel(new GridLayout(1,1));
JPanel center = new JPanel(new GridLayout(20, 20));
JLabel label = new JLabel("test");
top.add(label);
for (int i = 0; i < 20; i ++){
for (int j = 0; j < 20; j ++){
button = new JButton(String.valueOf(i));
button.addMouseListener(this);
center.add(button);
}
}
mainPanel.add(top, BorderLayout.NORTH);
mainPanel.add(center, BorderLayout.CENTER);
add(mainPanel);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(button.getText());
}
// Also implements multiple other methods from the interface, but irrelevant for my question.
新代碼(工作代碼):
public class MainFrame extends Frame {
public MainFrame() {
setSize(new Dimension(1000, 1000));
addComponents();
}
private void addComponents(){
JPanel mainPanel = new JPanel(new BorderLayout());
JPanel top = new JPanel(new GridLayout(1,1));
JPanel center = new JPanel(new GridLayout(20, 20));
JLabel label = new JLabel("test");
top.add(label);
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = e.getActionCommand();
System.out.println(text);
}
};
for (int i = 0; i < 20; i ++){
for (int j = 0; j < 20; j ++){
JButton button = new JButton(String.valueOf(i));
button.addActionListener(listener);
center.add(button);
}
}
mainPanel.add(top, BorderLayout.NORTH);
mainPanel.add(center, BorderLayout.CENTER);
add(mainPanel);
1 +對於使用單個偵聽器,但是操作命令稍後可能與顯示的文本不同,所以您應該如@ dic19在他的評論中所說的那樣做? – Dici