2011-11-18 44 views
6

这将是一个真正的理论问题,只是稍微忍受一下。我需要用JButton来做点什么,我不知道从哪里开始。如何实际选择一个JButton

所以我需要的是能够点击一个JButton,并有一个可视证明它被选中,例如红色边框或白色背景或其他东西。我希望它保持那样,直到以相同的方式选择另一个JButton。现在,当我点击一个Jbutton时,有一个简单的视觉显示,它被点击了,但我不能让它持续更长的时间。

我试图用ChangeListeners玩一下,但没有结果。

所以我的问题基本上是:你会建议我尝试一种什么样的方法?

1 - 回去的ChangeListener,它是唯一的选择 2 - JButton的还有另外一个选项,它正是这么做的

很抱歉,如果它太模糊,但一切,我发现是超级特殊,并没有回答我的问题。

回答

10

我想知道你是否想要使用一个JToggleButton,也许是一个添加到ButtonGroup,以便一次只能选择一个按钮。

编辑
例如:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class ToggleArray extends JPanel { 
    private static final int SIDE = 5; 

    public ToggleArray() { 
     ActionListener listener = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Button selected: " + e.getActionCommand()); 
     } 
     }; 

     setLayout(new GridLayout(SIDE, SIDE)); 
     ButtonGroup btnGroup = new ButtonGroup(); 
     for (int i = 0; i < SIDE * SIDE; i++) { 
     String text = String.format("[%d, %d]", i % SIDE, i/SIDE); 
     JToggleButton btn = new JToggleButton(text); 
     btn.addActionListener(listener); 
     btnGroup.add(btn); 
     add(btn); 
     } 
    } 

    private static void createAndShowGui() { 
     ToggleArray mainPanel = new ToggleArray(); 

     JFrame frame = new JFrame("ToggleArray"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

这将是这样的:
enter image description here

+0

+1,好建议。 – mre

+0

+1不是关于JToggleButton,而是关于ButtonGroup http://tips4java.wordpress.com/2008/11/09/select-button-group/ – mKorbel

+0

oooh,是的,可能正是我所需要的,谢谢:) –

0

你可以尝试改变背景颜色:

boolean jButton1clicked = false; 

jButton1.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     jButton1selected = !jButton1selected; 
    } 
); 

jButton1.setBackgroundColor(jButton1clicked ? Color.green : Color.red); 
+1

这对一些外观和感觉实现没有可见的影响。 – trashgod