J
Java22122012
Gast
Moin,
folgendes Problem:
Ich habe 2 Choice Auswahlmenüs.
->wenn ich im ersten Menü etwas ändere, so soll sich das zweite Menü anpassen.
(also nur die Einträge beinhalten, die nach der Auswahl aus dem ersten Menü dorthin gehören).
Bsp (Pseudocode):
Choice1 : {A,B,C}
Choice2 : falls Choice1==A dann {A1,A2,A3}
==B dann {B1,B2,B3}
==C dann {C1,C2,C3}
Ich hoffe, man versteht was ich meine
Das alles ist auch kein Problem, einfach nen itemstatechanged Handler und entsprechend reagieren.
Jedoch gibt es folgendes Problem, wenn die Auswahl aus Choice2 sehr groß ist, sodass gescrollt werden muss:
->es wird nicht die korrekte Auswahl aus choice2 erkannt!
Hier ein einfacher Quellcode, der zum Verstehen gut geeignet ist:
Das Problem:
->Bereich 1 ausgewählt lassen + in der zweiten Choice mit dem Mausrad bis zu den letzten Eintrag ("Taste Z1") scrollen, und mit linker Maustaste auswählen.
=> Im textfeld steht nun (korrekterweise) "Bereich1Taste: Z1"
->nun in der ersten Choice "Bereich 2" auswählen, und erneut mit dem Mausrad in der zweiten Choice bis zum letzten Eintrag (nun "Taste Z2") scrollen, und mit der linken Maustaste auswählen.
=> Im textfeld steht nun (nicht korrekt!) "Bereich2Taste: A2"
==>Warum?
Wenn ich mit den Pfeiltasten durch die Auswahl navigiere klappt es korrekt.
Jedoch nicht, wenn ich scrollen muss...
Wie kann ich dieses Problem umgehen?
Danke schonmal
folgendes Problem:
Ich habe 2 Choice Auswahlmenüs.
->wenn ich im ersten Menü etwas ändere, so soll sich das zweite Menü anpassen.
(also nur die Einträge beinhalten, die nach der Auswahl aus dem ersten Menü dorthin gehören).
Bsp (Pseudocode):
Choice1 : {A,B,C}
Choice2 : falls Choice1==A dann {A1,A2,A3}
==B dann {B1,B2,B3}
==C dann {C1,C2,C3}
Ich hoffe, man versteht was ich meine
Das alles ist auch kein Problem, einfach nen itemstatechanged Handler und entsprechend reagieren.
Jedoch gibt es folgendes Problem, wenn die Auswahl aus Choice2 sehr groß ist, sodass gescrollt werden muss:
->es wird nicht die korrekte Auswahl aus choice2 erkannt!
Hier ein einfacher Quellcode, der zum Verstehen gut geeignet ist:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Choice;
import javax.swing.JTextField;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
public class choicetest extends JFrame {
private JPanel contentPane;
private JTextField textField;
private Choice choice;
private Choice choice_1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
choicetest frame = new choicetest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public choicetest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
choice = new Choice();
choice.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
repaint(true);
}
});
choice.setBounds(37, 53, 146, 20);
contentPane.add(choice);
choice_1 = new Choice();
choice_1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
repaint(false);
}
});
choice_1.setBounds(37, 87, 146, 20);
contentPane.add(choice_1);
textField = new JTextField();
textField.setBounds(35, 135, 164, 37);
contentPane.add(textField);
textField.setColumns(10);
choice.add("Bereich1");
choice.add("Bereich2");
choice.add("Bereich3");
choice.add("Bereich4");
repaint(true);
}
public void repaint(boolean r) {
String alphabetString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] alphabetArray = alphabetString.toCharArray();
String text ="";
if(r)
{
choice_1.removeAll();
switch(choice.getSelectedIndex())
{
case 0:
for (int i = 0; i < alphabetArray.length; i++) {
choice_1.add("Taste: " + alphabetArray[i]+"1");}
break;
case 1:
for (int i = 0; i < alphabetArray.length; i++) {
choice_1.add("Taste: " + alphabetArray[i]+"2");}
break;
case 2:
for (int i = 0; i < alphabetArray.length; i++) {
choice_1.add("Taste: " + alphabetArray[i]+"3");}
break;
case 3:
for (int i = 0; i < alphabetArray.length; i++) {
choice_1.add("Taste: " + alphabetArray[i]+"4");}
break;
}
}
textField.setText(choice.getItem(choice.getSelectedIndex())+choice_1.getItem(choice_1.getSelectedIndex()));
}
}
Das Problem:
->Bereich 1 ausgewählt lassen + in der zweiten Choice mit dem Mausrad bis zu den letzten Eintrag ("Taste Z1") scrollen, und mit linker Maustaste auswählen.
=> Im textfeld steht nun (korrekterweise) "Bereich1Taste: Z1"
->nun in der ersten Choice "Bereich 2" auswählen, und erneut mit dem Mausrad in der zweiten Choice bis zum letzten Eintrag (nun "Taste Z2") scrollen, und mit der linken Maustaste auswählen.
=> Im textfeld steht nun (nicht korrekt!) "Bereich2Taste: A2"
==>Warum?
Wenn ich mit den Pfeiltasten durch die Auswahl navigiere klappt es korrekt.
Jedoch nicht, wenn ich scrollen muss...
Wie kann ich dieses Problem umgehen?
Danke schonmal