如何从两个不同的组合框输入?

时间:2015-01-31 16:10:47

标签: java swing jcombobox

我必须编写一个Java代码,我应该从2个不同的组合框输入。我将获得的输入必须显示在文本字段中。我已经编写了部分代码,但我无法获得输入。

这是我到目前为止所写的:

package main;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ComboI extends JFrame implements ItemListener{
    JComboBox dita = new JComboBox();
    JComboBox ora = new JComboBox();
    JLabel dita1 = new JLabel("Zgjidhni diten:");
    JLabel ora1 = new JLabel("Zgjidhni oren");
    JTextArea pergjigje = new JTextArea(2, 10);
    public ComboI(){
        super("Orari mesimor IE102");
        setSize(600, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        Container content = getContentPane();
        FlowLayout lay = new FlowLayout(FlowLayout.LEFT);
        content.setLayout(lay);
        content.add(dita);
        content.add(dita1);
        content.add(ora1);
        content.add(ora);
        content.add(pergjigje);
        setContentPane(content);

        dita.addItem("E Hene");
        dita.addItem("E Marte");
        dita.addItem("E Merkure");
        dita.addItem("E Enjte");
        dita.addItem("E Premte");
        dita.addItemListener(this);


        ora.addItem("08:30 - 09:25");
        ora.addItem("09:30 - 10:25");
        ora.addItem("10:30 - 11:25");
        ora.addItem("11:30 - 12:25");
        ora.addItem("12:30 - 13:25");
        ora.addItem("13:30 - 14:25");
        ora.addItemListener(this);

    }
    public void itemStateChanged(ItemEvent event){
        String choice1 = event.getItem().toString();
        String choice2 = event.getItem().toString();

        if (choice1.equals("E Marte") && choice2.equals("E Marte")){
            String a = "hi";
            pergjigje.setText(a);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

String choice1 = event.getItem().toString();
String choice2 = event.getItem().toString();

您一次只能为一个组合框生成一个事件,因此如果您想要组合框中的值,您需要访问组合框,而不是事件。

代码如下:

String choice1 = dita.getSelectedItem().toString();
String choice2 = ora.getSelectedItem().toString();

答案 1 :(得分:1)

您可以使用getSelectedItem()方法,使用强制转换为String。或者,您可以将getItemAtgetSelectedIndex和通用JComboBox<String>用于您的字段 - 这样做的好处是编译时安全类型,而且不需要强制转换。

String sd = (String)dita.getSelectedItem();
String so = (String)ora.getSelectedItem();

String sd = dita.getItemAt(dita.getSelectedIndex());
String so = ora.getItemAt(ora.getSelectedIndex());

第二种方法的另一个优点是,您可以使用getSelectedIndex从数组中获取星期几或时间段,而无需解析文本。例如:

// using java 8 for the java.time.DayOfWeek enum
DayOfWeek day = DayOfWeek.of(dita.getSelectedIndex());
// simply storing the hour of the time selection
int hour = ora.getSelectedIndex();
// using joda time for time without dates
//   with org.joda.time.LocalTime
LocalTime time = new LocalTime(ora.getSelectedIndex() + 7, 30);

检测用户何时未做出选择

您还应该知道,对于您的代码,即使用户尚未选择项目,它也会返回组合框中的第一项。因此,您可能希望添加一个&#34;选择一个项目...&#34;任何其他条目之前的字符串。例如:

dita.addItem("Select a day ...");
dita.addItem("E Hene");
...
// inside the listener
if (dita.getSelectedIndex() == 1) { // no choice made yet }