【问题标题】:Jcombobox, when an item is selected, a value is displayedJcombobox,当一个项目被选中时,显示一个值
【发布时间】:2012-02-12 10:08:53
【问题描述】:

基本上,我有一个JComboBox,目前,所选值随后显示在文本框中的组合框旁边。

但是,我想做的是从组合框中选择一个值 - 文本框中显示一个不同的值(此显示的值特定于从组合框中选择的值。

所以在这种情况下,我在组合框中有尺寸,我希望在文本字段中显示成本。

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

public class ComboBox{
  JComboBox combo;
  JTextField txt;
  public static void main(String[] args) {
    ComboBox b = new ComboBox();
  }

  public ComboBox(){
    String course[] = {"18x18cm (7x7inches)","18x20cm (7x8inches)",};
    JFrame frame = new JFrame("Cost Calculator");
    JPanel panel = new JPanel();
    combo = new JComboBox(course);
    combo.setBackground(Color.white);
    combo.setForeground(Color.black);
    txt = new JTextField(25);
    panel.add(combo);
    panel.add(txt);
    frame.add(panel);
    combo.addItemListener(new ItemListener(){
      public void itemStateChanged(ItemEvent ie){
        String str = (String)combo.getSelectedItem();
        txt.setText(str);
      }
    });
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400,200);
    frame.setVisible(true);
  }
}

所以我的问题是我该怎么做?

【问题讨论】:

  • 您似乎已经知道如何从组合框中检索所选值,以及如何在此选择更改时更新文本字段。那么问题是什么?当你有大小时如何检索成本?这是我们无法用您发布的代码回答的问题
  • 啊,基本上,我不想从组合框中复制并显示在文本字段中的值的相同副本,而是从组合框中选择一个值,然后有一个与之关联的值显示在文本字段中。例如。当前(组合框值=显示的文本):7x7cm=7x7cm 而我想要:7x7cm=100 英镑
  • 这是我理解的部分。但是我们应该如何用问题中的可用信息给你一个答案......你是唯一知道如何将 7*7cm 转换为 100 磅的人
  • 好的,我已经用完整的脚本更新了帖子。所以基本上对于原始帖子中的三个值,第一个等于 122 英镑,第二个等于 114 英镑,第三个等于 116 英镑。定价与尺寸的方式并不完全一致(我只有一张“高度到宽度”的表格,其中包含成本)。那么我是否必须在 actionlistener 中创建一个单独的值字符串,然后将其显示在文本字段中?因此,如果组合框字符串中的“18x18cm (7x7inches)”为 0,则“£122”也是 0,因为它是第一个值,因此将显示。如果我不是很清楚,我很抱歉):
  • 您可以为此使用 java.util.Map ,我想如果我理解您的问题和 cmets 是否正确。从 JComboBox 中获取您选择的内容,并从 Map 中获取相关值以在 JTextField 中显示。

标签: java swing combobox jcombobox


【解决方案1】:

您应该做的是创建一个新类,这样您就可以保持 JComboBox 和 JTextField 的数据相互关联。

class MyClass{
    private String comboStr;
    private String textStr;

    public MyClass{
        comboStr = "this goes in my combobox";
        textStr = "this goes in my textfield";
     }

    public String toString(){
        return comboStr;
    }

    public String getText(){
         return textStr;
    }
}

(您需要 toString() 以便组合框中的每个元素都显示正确的文本。)

然后在您的侦听器中,您可以使用以下内容为 JTextField 设置文本。

MyClass myObj = (MyClass)combo.getSelectedItem();
txt.setText(myObj.getText());

【讨论】:

    【解决方案2】:

    为了使JComboBox 显示不同的文本,比如Google,当那里有一个对象有关于它的信息时,您需要覆盖要添加到的类中的toString() 方法JComboBox。这是因为当JComboBox 设置自己时,它对其中的每个对象使用toString() 方法来创建显示文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多