0

我是swing java的新手,我制作了一组jtoggle按钮,我的问题是我想限制4个切换按钮的选定(切换)按钮的数量。是否有任何财产可以让我这样做?这是我的代码示例。

package adad;

import java.awt.*; import java.awt.event.*; 
import javax.swing.*;
public class essayer extends JFrame
{
 private JToggleButton jb_essai[] = new JToggleButton[6];

 JButton pressme = new JButton("Press Me");
 essayer()        // the frame constructor
 {
super("Toggle boutons");
setBounds(100,100,300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container con = this.getContentPane();
JPanel pane = getContainer();
con.add(pane);    
setVisible(true);
 }

 class ToggleAction implements ActionListener
{
private JToggleButton jb_essai[];
public ToggleAction(JToggleButton a_jb_essai[])
{
  jb_essai = a_jb_essai;
}

public void actionPerformed(ActionEvent e)
{
  String etatBoutons = "";
  int size = jb_essai.length;

  for(int i=0;i<size;i++)

  {
    String tmp = "Bouton "+(i+1)+" : ";
    if(jb_essai[i].isSelected()==true  )
    {
      tmp+="enfonce";
    }
    else
    {
      tmp+="relache";
    }
    tmp+="\n";
    etatBoutons +=tmp; 
  }
  System.out.println(etatBoutons+"\n---------");
     }

   }
private JPanel getContainer() 
 {

GridLayout thisLayout = new GridLayout(6,2);
JPanel container = new JPanel();
ToggleAction tga = new ToggleAction(jb_essai);
container.setLayout(thisLayout);
int j=6;
for (int i=0;i<j;i++)
{
  String s = String.valueOf(i+1);

  container.add(jb_essai[i]= new JToggleButton(s)); // actuellement tt s'affiche sur un   même colone.
  jb_essai[i].addActionListener(tga);

}
return container;
}

 public static void main(String[] args) {new essayer();}
  }
4

2 回答 2

1

是否有任何财产可以让我这样做?

不,有一个允许“众多中的一个” ButtonGroup但那是1,而不是许多中的N。除此之外,您需要自己编写代码。

于 2013-10-28T15:15:52.310 回答
1

是否有任何财产可以让我这样做?

不,您需要编写自己的代码。

为每个切换按钮添加一个通用 ItemListener。Then when a button is selected you loop though your toggle button array to count the number of selected toggle buttons.

如果计数大于 4,则显示带有错误消息的 JOptionPane,并将最后选择的按钮重置为未选中。您可以使用 ItemListener 的 getSource() 方法来获取切换按钮。

或者,也许您可​​以扩展ButtonGroup该类以实现类似的行为。

于 2013-10-28T15:17:43.170 回答