需要Java中的ComboBoxes帮助。通过类似的问题看,发现一个有点相关,但不是我正在处理的问题。
我需要将某些数组加载到组合框中,具体取决于在宝贵的组合框中选择的项目:
考虑在医疗中心完成一些手术:选择一个程序 - >获取医生列表,选择医生 - >获取可用时间列表等。
单一选择工作正常(无论是"程序 - >医生名单"或"医生名单 - >他们的工作时间"),但是,做这些变化的不止一个并不起作用。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
public class GUIbandymas extends JFrame {
String[] start={"Choose","Choice1", "Choice2"};
String[] Option1={"Choose","A1"};
String[] Option2={"Choose","A2","A3"};
String[] Option3={"Choose","a","b","c","d"};
String[] Option4={"Choose","1","2","3","4"};
String[] Option5={"Choose","I","II","III","IV"};
String[] pradinis={"Pasirinkite Laika"};
String[] p1={"Pasirinkite Gydytoja"};
static double kainaR;
static double kainaK;
JComboBox<String> G=new JComboBox<String>(p1);
JComboBox<String> proc;
JComboBox<String> laikas=new JComboBox<String>(pradinis);
JComboBox<String> minutes;
JButton button = new JButton ("Registuotis");
JLabel label = new JLabel("Moketi uz vizita");
JLabel suma = new JLabel();
public GUIbandymas() throws Exception {
setValueProc(start);
frame();
}
public void frame()
{
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setSize(500,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.add(proc);
panel.add(G);
panel.add(laikas);
panel.add(button);
button.setEnabled(false);
//panel.add(minutes);
frame.add(panel);
panel.add(label);
panel.add(suma);
proc.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
if(proc.getSelectedItem().toString().equals("Choice1"))
{
setGyd(Option1);
}
if(proc.getSelectedItem().toString().equals("Choice2"))
{
setGyd(Option2);
}
}
});
G.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent a) {
if(G.getSelectedItem().toString().equals("A1"))
{
setLaikas(Option3);
}
if(G.getSelectedItem().toString().equals("A2"))
{
setLaikas(Option4);
}
if(G.getSelectedItem().toString().equals("A3"))
{
setLaikas(Option5);
}
}
});//JComboBox
}
public void setGyd(String[] s)
{
G.removeAllItems();
for(int i=0; i<s.length; i++)
{
G.addItem(s[i]);
}
}
public void setValueProc(String[] sarasas)
{
proc=new JComboBox<String>(sarasas);
}
public void setLaikas(String[] sarasas)
{
laikas.removeAllItems();
for(int i=0; i<sarasas.length; i++)
{
laikas.addItem(sarasas[i]);
}
}
}
我迫切需要任何建议和可能的解决方案,我倾向于认为它与行动听众有关,因为方法确实有效,但我不知所措,因为我无法确定它是什么。
编辑:实际的代码应该可以工作,似乎没有其他文件留下的不需要的东西。 注意:这适用于GUI,只需在main()中启动它:)
答案 0 :(得分:0)
您似乎没有使用组合框的数据模型。数据模型控制项目的内部列表。有关详细信息,请查看this。
答案 1 :(得分:0)
虽然我并不喜欢你正在使用的if-else方法,但它应该可以正常工作。我同意rrirower的建议,你应该考虑使用数据模型。特别是如果你有很多选择,因为代码变得很乱。
代码的问题在于重建组合框项目时遇到NullPointerException
。原因是当您删除/添加项目时调用G.actionPerformed()
。删除所有项目后(在开始添加新项目之前),G.getSelectedItem()
将返回null。
如果你在防守方面编码得更多,那么它会按预期运作:
proc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object selectedItem = proc.getSelectedItem();
if ("Choice1".equals(selectedItem)) {
setGyd(Option1);
}
if ("Choice2".equals(selectedItem)) {
setGyd(Option2);
}
}
});
G.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
Object selectedItem = G.getSelectedItem();
if ("A1".equals(selectedItem)) {
setLaikas(Option3);
}
if ("A2".equals(selectedItem)) {
setLaikas(Option4);
}
if ("A3".equals(selectedItem)) {
setLaikas(Option5);
}
}
});//JComboBox
我没有检查空值,而只是翻了等号并跳过了不必要的toString()
(它们已经是字符串,那就是你放在那里的东西)。
另一件事,我的一个小小的烦恼,请遵循所有类,字段和方法名称的普通java代码约定。您几乎就在那里,但Option1
等应该以小写字母开头。 G
应该具有更具描述性的名称,并且以小写字母开头。
最后,我不明白为什么你们都在你的班级的构造函数和扩展JFrame
中创建JFrame
。你应该选择其中一个。