1
A
回答
1
添加監聽到每個複選框。保持複選框的運行列表已選中。
如果選中複選框,則將其添加到列表的末尾。
如果未選中,請將其從列表中刪除。
如果列表大小大於三,則取消選中列表開頭的複選框,然後將其從列表中刪除。
0
不需要手動操作。例如,如果3盒被標記,你可以設置其他框
box[i].setEditable (false);
所以用戶必須先切換明顯的盒子了。
0
我不相信這裏有任何內置的東西。但是,當大小爲3應該是很簡單保持簡單
Set<JComponent>
已選中的項目
,並禁止所有非檢查。
0
不幸的是沒有這樣的免費。從技術上講,即使實施它也不會那麼容易。認爲這個想法聽起來很酷,我明天可能會創建這個組件。
無論如何,讓我們想想你會需要什麼。我認爲一個構造函數應該看起來像這樣。
MaxToggleController(列表< JToggleButton中>的ToggleButtons,INT maxToSelect)
使用JToggleButton中,以便用戶可以使用的其他組件則僅複選框。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
/**
* Controller of toggle button selection. User can specify a maximum
* allowed number of toggle buttons that can be selected at a particular time.
* The controller will make sure that up to the defined maximum number
* of buttons can be selected.
* @author Konrad Borowiecki
*/
public class MaxToggleController
{
/** List of toggle buttons to control. */
private List<JToggleButton> toggleButtons;
/** The maximum number of toggle buttons that can be selected at once. */
private int maxToSelect;
/** The number of toggle buttons that is currently selected. */
private int currentlySelected = 0;
public MaxToggleController(List<JToggleButton> toggleButtons, int maxToSelect)
{
this.toggleButtons = toggleButtons;
this.maxToSelect = maxToSelect;
//install the action listener on each toggle button
for(JToggleButton tB : toggleButtons)
tB.addActionListener(toggleButtonAL);
}
private ActionListener toggleButtonAL = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
JToggleButton tB = (JToggleButton) e.getSource();
System.out.println("actionPerformed toggleButtonAL; tB.getText()=" + tB.getText()
+ "; tB.isSelected()=" + tB.isSelected());
//if user deselects it then allow for it
if(!tB.isSelected())
{
currentlySelected--;
tB.setSelected(false);//can be removed
}
else//user tries to select it
{
//if max reached do not allow for the tB selection
if(currentlySelected == maxToSelect)
{
//must be deselected as it is already selected
tB.setSelected(false);
}
else
{
currentlySelected++;
tB.setSelected(true);//can be removed
}
}
String textsSeparator = ", ";
String toggleButtonTexts = "{";
for(JToggleButton toggleB : getSelectedToggleButtons())
toggleButtonTexts += toggleB.getText() + textsSeparator;
int idx = toggleButtonTexts.lastIndexOf(textsSeparator);
if(idx != -1)
toggleButtonTexts = toggleButtonTexts.substring(0, idx)
+ toggleButtonTexts.substring(idx + textsSeparator.length(), toggleButtonTexts.length());
toggleButtonTexts += "}";
System.out.println("actionPerformed toggleButtonAL; currentlySelected="
+ currentlySelected + "; getSelectedToggleButtons().size()=" + getSelectedToggleButtons().size()
+ "\n ; toggleButtonTexts=" + toggleButtonTexts);
}
};
public List<JToggleButton> getSelectedToggleButtons()
{
List<JToggleButton> selectedToggleButtons = new ArrayList();
for(JToggleButton tB : toggleButtons)
if(tB.isSelected())
selectedToggleButtons.add(tB);
return selectedToggleButtons;
}
public static void main(String[] args)
{
List<JToggleButton> tBs = new ArrayList<JToggleButton>();
int noOfTBs = 10;
JPanel contentPane = new JPanel();
for(int i = 0; i < noOfTBs; i++)
{
JToggleButton tB = new JToggleButton("Toggle " + i);
tBs.add(tB);
contentPane.add(tB);
}
int maxToSelect = 3;
MaxToggleController tC = new MaxToggleController(tBs, maxToSelect);
JFrame f = new JFrame();
f.setContentPane(contentPane);
f.setSize(400, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
我碰巧有一些閒暇時間,所以我實現了我自己的控制器。 還有很多調試代碼,可以讓您觀察運行時發生的情況。不要忘記這並不完美。這是一個快速的草案,這裏有一些明顯的問題,例如setSelected by user用於切換按鈕的編程式調用。
下面是我的控制器的更新版本,它處理JToggleButton選擇設置,即使它是在代碼中完成的。
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
/**
* Controller of toggle button selection. User can specify a maximum
* allowed number of toggle buttons that can be selected at a particular time.
* The controller will make sure that up to the defined maximum number
* of buttons can be selected.
* @author Konrad Borowiecki
*/
public class MaxToggleController
{
/** List of toggle buttons to control. */
private List<JToggleButton> toggleButtons;
/** The maximum number of toggle buttons that can be selected at once. */
private int maxToSelect;
/** The list with the buttons which are currently selected. */
private List<JToggleButton> selectedToggleButtons;
public MaxToggleController(List<JToggleButton> toggleButtons, int maxToSelect)
{
this.toggleButtons = toggleButtons;
this.maxToSelect = maxToSelect;
this.selectedToggleButtons = new ArrayList<JToggleButton>();
//install the action listener on each toggle button
for(JToggleButton tB : toggleButtons)
tB.addItemListener(itemListener);
}
private ItemListener itemListener = new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
JToggleButton tB = (JToggleButton) e.getSource();
System.out.println("itemStateChanged; tB.getText()=" + tB.getText()
+ "; tB.isSelected()=" + tB.isSelected());
//if the tB is inside the selected toggle button list then remove it from there
if(isInSelected(tB))
{
selectedToggleButtons.remove(tB);
//set false only if it is already true
if(tB.isSelected())
tB.setSelected(false);
}
else//otherwise add it if the size is not max
{
if(selectedToggleButtons.size() == maxToSelect)
{
//set false only if it is already true
if(tB.isSelected())
tB.setSelected(false);//deselect the tB if the list has maximum size
}
else
{
selectedToggleButtons.add(tB);
}
}
String textsSeparator = ", ";
String toggleButtonTexts = "{";
for(JToggleButton toggleB : getSelectedToggleButtons())
toggleButtonTexts += toggleB.getText() + textsSeparator;
int idx = toggleButtonTexts.lastIndexOf(textsSeparator);
if(idx != -1)
toggleButtonTexts = toggleButtonTexts.substring(0, idx)
+ toggleButtonTexts.substring(idx + textsSeparator.length(), toggleButtonTexts.length());
toggleButtonTexts += "}";
System.out.println("; selectedToggleButtons.size()=" + selectedToggleButtons.size()
+ "; toggleButtonTexts=" + toggleButtonTexts);
}
};
private boolean isInSelected(JToggleButton tB)
{
return selectedToggleButtons.contains(tB);
}
public List<JToggleButton> getSelectedToggleButtons()
{
return selectedToggleButtons;
}
public static void main(String[] args)
{
List<JToggleButton> tBs = new ArrayList<JToggleButton>();
int noOfTBs = 10;
JPanel contentPane = new JPanel();
for(int i = 0; i < noOfTBs; i++)
{
JToggleButton tB = new //JCheckBox("Check "+i);
JToggleButton("Toggle " + i);
tBs.add(tB);
contentPane.add(tB);
}
int maxToSelect = 3;
MaxToggleController tC = new MaxToggleController(tBs, maxToSelect);
tBs.get(0).setSelected(true);
tBs.get(5).setSelected(true);
tBs.get(6).setSelected(true);
//the Toggle 7 will not be selected
tBs.get(7).setSelected(true);
JFrame f = new JFrame();
f.setContentPane(contentPane);
f.setSize(400, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
享受,博羅。
相關問題
- 1. java swing複選框java swing
- 2. Java swing GUI選中複選框
- 3. 的Java Swing remove從複選框
- 4. 使用java swing刪除選中的複選框
- 5. Java swing窗框
- 6. 顯示構造對話框時沒有選擇Java swing複選框
- 7. 從java swing中的JTable中移除複選框
- 8. 調整java swing中複選框之間的空間
- 9. 的Java Swing:需要開發JTree的複選框
- 10. 的Java Swing複選框是不可見的JCheckBoxMenuItem
- 11. 在Java Swing中的複選框的動態Arraylist
- 12. 在java swing應用程序中創建複選框
- 13. 與複選框和JFileChooser Swing JTree
- 14. 浮動複選框在Swing中展開
- 15. java swing組合框
- 16. 複選框無法被選中 - 它們是可編輯的! Java Swing
- 17. Java Swing,試圖用圖像圖標複選框替換JTable中的布爾值複選框
- 18. 訪問複選框在Java
- 19. Java複選框問題
- 20. 複選框Html Java腳本
- 21. Java spring form複選框
- 22. Java - JComboBox中的複選框
- 23. Java複選框定位
- 24. Java複選框操作
- 25. Java Swing - 三點組合框
- 26. Java Swing可滾動框架
- 27. 高級Java swing gui框架
- 28. Java Swing的BDD框架?
- 29. Java swing邊框錯誤
- 30. Java Swing - Finder文本框