【问题标题】:How do I make a selected Combobox value display different text?如何使选定的组合框值显示不同的文本?
【发布时间】:2019-08-27 09:09:28
【问题描述】:

我是 Java 新手,找不到任何我能够理解的问题的答案。 我想在我的 ComboBox 中选择一个值来更改文本字段中显示的文本。

例如,如果用户在组合框中选择了一位艺术家,则该艺术家的专辑将显示在文本字段中。

感谢任何帮助。谢谢!

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
 String a = (String)jComboBox1.getSelectedItem();  
int artists = 0;
switch (artists){
    case 0: jTextField1.setText("Take Care, Nothing Was The Same, Views, More Life, Scorpion");
break;
    case 1: jTextField1.setText("Stoney, Beerbongs & Bentleys");
break;
    case 2: jTextField1.setText("One Love, Listen, Nothing But the Beat");
break;
    case 3: jTextField1.setText("Ready for the Weekend, 18 Months, Motion");
break;
    case 4: jTextField1.setText("Cole World: The Sideline Story, 2014 Forest Hills Drive, 4 Your Eyez Only");
break;
    case 5: jTextField1.setText("My Beautiful Dark Twisted Fantasy, Yeezus, The Life of Pablo, ye");
break;
    case 6: jTextField1.setText("Parachutes, a Rush of Blood to the Head, X&Y, Viva La Vida, Mylo Xyloto");
}
    }   

【问题讨论】:

  • 您使用的是哪个 GUI 框架? JavaFX、Swing、AWT,还有什么?
  • @eera-l 我觉得jCombobox 说得够多了
  • @MarkJeronimus 起初他发布了没有代码的问题,这就是问这个问题的原因,我什至在我的回答中提到了这一点。

标签: java combobox textfield


【解决方案1】:

这是一个完整的工作示例:

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

public class ChangeTextViaCheckbox extends JFrame {


    public ChangeTextViaCheckbox() {
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new GridLayout(3, 1));

        JCheckBox cb1 = new JCheckBox("Checkbox 1");
        JCheckBox cb2 = new JCheckBox("Checkbox 2");
        JTextField tf = new JTextField();

        cb1.addActionListener(e -> tf.setText("CB 1 is active"));
        cb2.addActionListener(e -> tf.setText("CB 2 is active"));

        add(cb1);
        add(cb2);
        add(tf);
    }

    public static void main(String[] args) {
        ChangeTextViaCheckbox frame = new ChangeTextViaCheckbox();
        frame.pack();
    }
}

ActionListener 都在监听执行的操作。如果是这样,他们会在JTextField 中设置一个新文本。

但如果你通过JRadioButtonButtonGroup 实现它会更好。这样就不能多选了。

【讨论】:

  • @Downsy 由于声誉不足,我无法评论其他答案。你在每种情况下都有休息吗?你能告诉我们你的实际代码吗?
  • 将其添加到我的问题中。谢谢!
【解决方案2】:

您的问题缺少细节和示例,您应该发布您已经编写的代码的重要部分,例如我现在不知道您使用的是什么 [GUI] API(例如 swing 或 @ 987654322@),所以我强烈建议您编辑您的问题并提供更多详细信息,但无论哪种方式,我都会给您一个简单的示例。

我将假设您使用 swing api,但如果您使用另一个 GUI api(如 AWT),它应该不会有那么不同。

import javax.swing.*;  
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SwingExample extends JFrame{  

   public SwingExample(){
      String[] artists = {"artist1","artist2","artist3"};
      Map<String,String> albumOfArtists = new HashMap<String,String>();
      albumOfArtists.put("artist1","album1");
      albumOfArtists.put("artist2","album2");
      albumOfArtists.put("artist3","album3");

      JComboBox combo1 = new JComboBox<String>(artists);
      JTextField field1 = new JTextField();

      //You implement an action listener to define what should be done when 
      //an user performs certain operation. An action event occurs, 
      //whenever an action is performed by the user. Examples: When the user 
      //clicks a button, chooses a menu item, presses Enter in a text field.

      //add action listener to your combobox:
      combo1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                  String selectedString=(String)combo1.getSelectedItem(); 
                  field1.setText(albumOfArtists.get(selectedString));
                  //for example if you select artist1 then the text displayed in the text field is: album1
            }
      }

      add(combo1);
      add(field1);

   }

   private static void createAndShowGUI() {

     JFrame frame = new CreateNewJTextField();
     frame.pack();
     frame.setVisible(true);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   }

   public static void main(String[] args) {
        createAndShowGUI();
   }
}

【讨论】:

    【解决方案3】:

    您可以将 switch() 用于您的组合框。我编写了一个代码,其名称定义为组合框为 cb1。 getSelectedItem() 方法用于 cb1。您可以为每种情况定义相应的命令(从索引 0 开始)。

    String a = (String)cb1.getSelectedItem();  
    int i = 0;
    switch (i){
        case 0: 
    break;
    }
    

    确保每个 case 都以 break 结束;否则您的代码将重复执行。 现在,如果您使用的文本字段是 t1,那么下面的代码是通用的,

    switch (i) {
    case 0: t1.setText(<whatever you want to display>);
    break;
    }
    

    希望这会有所帮助。

    这是重新访问的代码:

    String a = (String)cb1.getSelectedItem();
    int i = 0;
    switch(i){
        case 0: t1.setText("Take Care, Nothing Was The Same, Views, More Life, Scorpion");
        // for combobox option Drake index = 0
        break;
        case 1: t1.setText("Stoney, Beerbongs & Bentleys");
       // for combobox option post_malone index = 1
        break;
        case 2: t1.setText("One Love, Listen, Nothing But the Beat");
        // for combobox option david_guetta
        break;
     }
    

    switch 是一个选择语句,它根据整数或字符常量的列表连续测试表达式的值。找到匹配项时,将执行与该常量关联的语句。在这里,变量 i 是被评估的表达式(您从组合框中选择的选项)。

    希望这对您有帮助!

    【讨论】:

    • 感谢您的回复!我尝试了您的代码,它在文本字段中显示了值,但由于某种原因,始终显示最高的案例编号,无论组合框选项如何。我将我的代码附加到我的原始问题中。希望你有一个解决方案:)
    • 嘿,我想你误读了一些东西。您不需要为每个其他组合框选项定义不同的变量。现在,我根据您在代码中使用的数据在我的答案中附加了代码。检查一下。
    • 您好,感谢您迄今为止的帮助!我删除了我以前的错误,但现在它只显示第一个案例(drakes 专辑)。你能看一下吗?这又是我的问题。谢谢!
    • @Downsy 当然它只会显示第一种情况,因为你设置 artists 等于 0 并且你永远不会改变它,所以 switch 只会(并且总是)捕获如果artists=0,这不是您检索JComboBox 值的方式,您应该在您的JComboBox 中添加action listener,我已经在answer 中为您的问题提供了一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多