java - 在 JComboBox Java 中添加文本到字符串

标签 java string swing combobox

我正在 Java 中完成一项作业,但不知道如何执行此操作:完整代码如下

JTextField 描述字段 = new JTextField(20); //将您想要的电视节目添加到字符串

字符串[] progs = { }; //将您想要的电视节目描述添加到字符串

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JTVDownload extends JFrame implements ItemListener
{
   JComboBox<String> programBox = new JComboBox<String>();
   JLabel programList = new JLabel("***                  Program List               ***");
   JLabel stars = new JLabel("*****************************");
   JTextField descripField = new JTextField(20);
   // add your desired TV programs to the string


   String[] progs = {               };
   // add your desired TV programs descrips to the string
   String[] descrips = {              };
   public JTVDownload()
   {
      super("JTVDownload");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLayout(new FlowLayout());
      programBox.addItemListener(this);
      add(stars);
      add(programList);
      programBox.addItem("none");
      for(int x = 0; x < progs.length; ++x)
         programBox.addItem(progs[x]);
      add(programBox);
      add(descripField);
   }
   public static void main(String[] arguments)
   {
      JTVDownload frame = new JTVDownload();
      frame.setSize(300,150);
      frame.setVisible(true);
   }
   @Override
   public void itemStateChanged(ItemEvent list)
   {
      Object source = list.getSource();
      if(source == programBox)
      {
         int num = programBox.getSelectedIndex();
         descripField.setText(descrips[num]);
      }
   }
}

最佳答案

第一个progsdescrips需要添加一些文本。问题是,您添加了 none,这使得两个列表不同步,最好将其包含在数组中

import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class JTVDownload extends JFrame implements ItemListener {

    JComboBox<String> programBox = new JComboBox<String>();
    JLabel programList = new JLabel("***                  Program List               ***");
    JLabel stars = new JLabel("*****************************");
    JTextField descripField = new JTextField(20);
    // add your desired TV programs to the string

    String[] progs = {"None", "Happy days", "Here's Lucy", "That 70's Show"};
    // add your desired TV programs descrips to the string
    String[] descrips = {"", "Happy days", "Here's Lucy", "That 70's Show"};

    public JTVDownload() {
        super("JTVDownload");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        programBox.addItemListener(this);
        add(stars);
        add(programList);
        for (int x = 0; x < progs.length; ++x) {
            programBox.addItem(progs[x]);
        }
        add(programBox);
        add(descripField);
    }

    public static void main(String[] arguments) {
        JTVDownload frame = new JTVDownload();
        frame.setSize(300, 150);
        frame.setVisible(true);
    }

    @Override
    public void itemStateChanged(ItemEvent list) {
        Object source = list.getSource();
        if (source == programBox) {
            int num = programBox.getSelectedIndex();
            descripField.setText(descrips[num]);
        }
    }
}

总的来说,更好的解决方案是使用 POJO 将“名称”和“描述”包装到单个对象中,这样您就可以在单个工作单元中一起携带信息。当然,这会要求您使用 ListCellRenderer 来自定义对象的呈现方式。在这种情况下,请仔细查看 How to Use Combo Boxes了解更多详情

关于java - 在 JComboBox Java 中添加文本到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50901069/

相关文章:

java - 正则表达式匹配;但不是\;

string - 如何在循环中连接字符串?

string - J2ME 十六进制字符串转整数

java - 将 KeyListener 添加到自定义对象

java - 如何从自定义反序列化器调用默认解析器(在映射器中注册)

java - GWT - 直接在 native 方法中使用 java bean 参数

java - 当我将文本从 java servlet 加载到 JTextPane 时,为什么会丢失换行符?

java - 使用 SwingWorker 打开 JDialog?

java - 如何将 JTextField 与 GridLayout 的其余部分分开

java - jsoup 连接参数