Ich verwende die javax.swing
Bibliothek, und ich versuche, dieses Problem zu lösen:Java - Wählen Sie alle Artikel im Menü
Ich habe ein MenuBar
, in dem ich JMenu
erstellt, wird dieses Menü hat JCheckBoxMenuItem
Artikel. Wie folgt aus:
//creating objects:
jMenuBar = new javax.swing.JMenuBar();
jMenuAlgorithms = new javax.swing.JMenu();
jCheckBoxSPEA = new javax.swing.JCheckBoxMenuItem();
jCheckBoxNSGAII = new javax.swing.JCheckBoxMenuItem();
jSeparator1 = new javax.swing.JPopupMenu.Separator();
jCheckBoxMenuEnableAll = new javax.swing.JCheckBoxMenuItem();
jCheckBoxMenuDisableAll = new javax.swing.JCheckBoxMenuItem();
//settings and putting them together:
jCheckBoxSPEA.setSelected(true);
jCheckBoxSPEA.setText("SPEA");
jMenuAlgorithms.add(jCheckBoxSPEA);
jCheckBoxNSGAII.setSelected(true);
jCheckBoxNSGAII.setText("NSGAII");
jMenuAlgorithms.add(jCheckBoxNSGAII);
jMenuAlgorithms.add(jSeparator1);
jCheckBoxMenuEnableAll.setSelected(true);
jCheckBoxMenuEnableAll.setText("Enable all");
jCheckBoxMenuEnableAll.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jCheckBoxMenuEnableAllMouseClicked(evt);
}
});
jMenuAlgorithms.add(jCheckBoxMenuEnableAll);
jCheckBoxMenuDisableAll.setText("Disable all");
jMenuAlgorithms.add(jCheckBoxMenuDisableAll);
jMenuBar.add(jMenuAlgorithms);
Wenn der Benutzer jCheckBoxMenuEnableAll
Element auswählt, würde Ich mag alle Elemente über dem Separator wählen. Wenn er jCheckBoxMenuDisableAll
auswählt, möchte ich alle Elemente über dem Trennzeichen abwählen.
Wie Sie sehen können, habe ich mouseClicked
Aktion auf den jCheckBoxMenuEnableAll
Artikel hinzugefügt. Nun, ich möchte so etwas tun:
private void jCheckBoxMenuEnableAllMouseClicked(java.awt.event.MouseEvent evt) {
for(JCheckBoxMenuItem item : jMenuAlgorithms){
item.setSelected(true);
}
//deselect then jCheckBoxMenuDisableAll, it's not essential for instance
}
Aber anscheinend kann ich nicht, wie dies für Schleife tun, wie der Menüpunkt nicht ein array
oder Iterable
ist.
Nun, nur zum Testen, ich hatte etwas sehr dumm (Code unten) - ich gebe alle Elemente im Menü, und wenn das Element ein Kontrollkästchen ist, mache ich seine Kopie, setzen Sie Wert auf "wahr "(ausgewählt) und ersetzen Sie das Originalelement durch seine Kopie. Sehr dumm, ich weiß und ich möchte das absolut nicht tun, aber ich habe keinen anderen Weg gefunden, es zu tun. Ich wollte nur sehen, ob das funktioniert. Ich vermutete es sollte, aber es stoll funktioniert nicht. Was mache ich falsch? Vielen Dank für Ihre Zeit.
private void jCheckBoxMenuEnableAllMouseClicked(java.awt.event.MouseEvent evt) {
if(jCheckBoxMenuEnableAll.isSelected()){
for(int i =0; i< jMenuAlgorithms.getItemCount(); i++){ //for all items in the menu, separators included
if(jMenuAlgorithms.getItem(i) instanceof JCheckBoxMenuItem){
JCheckBoxMenuItem item = ((JCheckBoxMenuItem)jMenuAlgorithms.getItem(i));
item.setSelected(true);
jMenuAlgorithms.insert(item, i);
}
}
}
}
Für eine bessere Hilfe früher, Posten [MCVE] oder [Kurz, Self Contained, Korrekt Beispiel] (http://www.sscce.org/). –