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

How to get an input from two different combo boxes?

我必须编写一个 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);
        }
    }
}
String choice1 = event.getItem().toString();
String choice2 = event.getItem().toString();

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

代码如下:

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

您可以使用 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);

检测用户未进行选择

您还应注意,对于您的代码,即使用户尚未选择项目,它也会 return 组合框中的第一项。因此,您可能希望在任何其他条目之前添加一个 "choose an item ..." 字符串。例如:

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