Java 如何将值绑定到jList索引

Java 如何将值绑定到jList索引,java,swing,user-interface,Java,Swing,User Interface,因此,我正在制作我工作场所所需的第一个GUI应用程序。我想计算一些值,一些来自单选按钮,一些来自用户输入 我还想在最终结果中添加一些其他选项(对于移动电话公司来说,还有一些额外的选项需要成本) 关于大量EO(额外选项),我想让用户选择多个选项 我尝试了一个组合框,但它只允许您选择一个选项,所以我考虑了一个列表(可能是jList?) 每个EO都需要有它的通用名称,但保留一个值(键)以计算最终结果非常重要 所以问题是:你认为什么是最好的方法,如何做到?(并不是最难的,因为我是个乞丐) 提前谢谢,别对

因此,我正在制作我工作场所所需的第一个GUI应用程序。我想计算一些值,一些来自单选按钮,一些来自用户输入

我还想在最终结果中添加一些其他选项(对于移动电话公司来说,还有一些额外的选项需要成本)

关于大量EO(额外选项),我想让用户选择多个选项

我尝试了一个组合框,但它只允许您选择一个选项,所以我考虑了一个列表(可能是jList?)

每个EO都需要有它的通用名称,但保留一个值(键)以计算最终结果非常重要

所以问题是:你认为什么是最好的方法,如何做到?(并不是最难的,因为我是个乞丐)

提前谢谢,别对我苛刻,这是我的第一个问题! 应用程序:

更新: 因此,我设法采取了一些进一步的步骤来完成这个应用程序。 到目前为止,我能够从列表中选取所选行并将其纳入总结果。
但是:a)如果不从列表中选择一些内容,我将无法再计算结果。(仅限文本字段)
b) 它不会更新结果。如果我选择另一行,结果将保持不变
代码如下所示:

public class NewJFrame extends JFrame {
Double radioNumb1 = null, radioNumb2 = null, subsidyNumb , result = null, radioNumb3 = null, radioNumb4 = null, periodNumb, ans ;

String[] eo_names = {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5"}; //the names of EO (for now)
double[] eo_values = {10, 100, 1000, 10000, 100000}; // the values of EO (for now)    
NumberFormat nfRegular = NumberFormat.getNumberInstance(Locale.US); // to shorten the decimals of the result

public void greaterCondition (Double radioNumb){
        result = ((subsidyNumb + ans)/radioNumb) * periodNumb;
     if (periodNumb > radioNumb){
            JOptionPane.showMessageDialog(null, "Perioada contractuala dorita este mai mare decat cea initiala", "Error", JOptionPane.ERROR_MESSAGE);

        }}
private void initRadioButton() { //setting the second radioButton as default
    radioButton1.setSelected(false);
    radioButton2.setSelected(true);
    radioButton3.setSelected(false);
    radioButton4.setSelected(false);
}

    public NewJFrame() {
        initComponents();
        init();

    }

private void init(){
    setTitle("CED calculator for KA");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);
}
   private void equalButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
        radioNumb1 = Double.parseDouble(radioButton1.getText());
        radioNumb2 = Double.parseDouble(radioButton2.getText());
        radioNumb3 = Double.parseDouble(radioButton3.getText());
        radioNumb4 = Double.parseDouble(radioButton4.getText());
        subsidyNumb = Double.parseDouble(subsidyField.getText());
        periodNumb = Double.parseDouble(periodField.getText());

        for (int i : jList1.getSelectedIndices()){
            ans = eo_values[i];

        }
         jList1 = new JList<String>(eo_names);


        if (radioButton1.isSelected()){
            greaterCondition(radioNumb1);
        }
        else if (radioButton2.isSelected()){
            greaterCondition(radioNumb2);
        }
        else if (radioButton3.isSelected()){
            greaterCondition(radioNumb3);
        }
        else if (radioButton4.isSelected()){
            greaterCondition(radioNumb4);
        }



        answerLabel.setText("" + nfRegular.format(result) + " euro");

    }                                           
公共类NewJFrame扩展了JFrame{
Double radioNumb1=null,radioNumb2=null,subsidyNumb,result=null,radioNumb3=null,radioNumb4=null,periodNumb,ans;
字符串[]eo_name={“值1”、“值2”、“值3”、“值4”、“值5”};//eo的名称(目前)
double[]eo_value={1010010001000000000};//eo的值(目前)
NumberFormat nfRegular=NumberFormat.getNumberInstance(Locale.US);//缩短结果的小数
公共空间更大条件(双重无线电麻醉){
结果=((subsidyNumb+ans)/radioNumb)*periodNumb;
如果(周期性麻木>无线电麻木){
showMessageDialog(null,“Perioada contractuala dorita este mai mare decat cea initiala”,“Error”,JOptionPane.Error\u消息);
}}
private void initRadioButton(){//将第二个radioButton设置为默认值
radioButton1.setSelected(假);
radioButton2.setSelected(真);
radioButton3.setSelected(假);
radioButton4.setSelected(假);
}
公共NewJFrame(){
初始化组件();
init();
}
私有void init(){
setTitle(“用于KA的CED计算器”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(空);
setVisible(真);
}
私有void equalButtonActionPerformed(java.awt.event.ActionEvent evt){
radioNumb1=Double.parseDouble(radioButton1.getText());
radioNumb2=Double.parseDouble(radioButton2.getText());
radioNumb3=Double.parseDouble(radioButton3.getText());
radioNumb4=Double.parseDouble(radioButton4.getText());
subfidynumb=Double.parseDouble(subfidyfield.getText());
periodNum=Double.parseDouble(periodField.getText());
for(int i:jList1.getSelectedIndices()){
ans=eo_值[i];
}
jList1=新的JList(eo_名称);
如果(radioButton1.isSelected()){
更严重的情况(1);
}
else if(radioButton2.isSelected()){
更严重的情况(2);
}
else if(radioButton3.isSelected()){
更严重的情况(3);
}
else if(radioButton4.isSelected()){
更严重的情况(4);
}
answerLabel.setText(“+nfRegular.format(result)+euro”);
}                                           

您认为可以做什么?这就是我所做的。

JList
对象是为处理您所面临的任务而构建的

处理您的评论时,它们确实会处理
String
条目。条目存储在一个数组中,因此,您可以通过每个条目在数组中的位置来引用每个条目

让我举例说明我的观点

您可以这样构建JList:

String[] data = {"one", "two", "three", "four"};
JList<String> myList = new JList<String>(data);
如果在列表中选择多个条目,则
GetSelectedDices()
将按递增顺序返回所有选定索引的数组

那么,假设您选择了条目
“一”
“三”

因此,针对您的具体情况,我将创建一个字符串数组来保存“EO”值,并使用数组将每个选择“映射”到您需要的相关值

因为您没有发布任何关于您尝试做什么的具体数据,所以我将编写一个简单的示例

 String[] eo_names = {"Value 1", "Value 2", "Value 3", "Value 4", "Value 5"};
 double[] eo_values = {3, 5, 8, 12, 1};
 JList<String> eoList = new JList<String>(eo_names);
现在,让我们创建一个简单的方法来打印选定的值(字符串):


让我们更进一步

我假设你有一个“EO”列表,它有一个标签和一个值;换句话说,“EO”是一对键值属性。你可以用地图来处理这类东西

假设您的EO键值对如下所示:

EO   | Value
-----+------
Val1 | 3
Val2 | 5
Val3 | 8
Val4 | 12
Val5 | 1
让我们用以下数据创建一个
HashMap

HashMap<String,Double> myEoMap = new HashMap<String,Double>();
myEoMap.put("Val1",3);
myEoMap.put("Val2",5);
myEoMap.put("Val3",8);
myEoMap.put("Val4",12);
myEoMap.put("Val5",1);
现在,让我们编写一个小方法来打印列表中选定的值:

public void printSelectedValues() {
    for(String s : myEoList.getSelectedValueList()) {
        if(myEoMap.containsKey(s)) {
            System.out.println("Key " + s + " found! The value is: " + myEoMap.get(s));
        } else {
            System.err.println("Oops, no value found");
        }
    }
}

希望这有帮助

事实上,我认为jList是一个不错的选择。作为一个快速参考,请查看java教程:我已经把互联网翻了个底朝天,搜索答案并直接提问是我最后的机会。我找到的只是处理字符串的列表,而不是整数。谢谢编辑:)检查我的答案……这可能会对你有所帮助u、 只需将ExtraOptions存储在列表中,并编写一个自定义呈现程序来显示它们。getSelectedValue将直接返回您感兴趣的项目。我更新了代码,请查看,也许您可以帮助我提供意见。非常感谢!outch,这很脆弱;-)而不是将字符串弱映射到值,只需存储值即可(并编写自定义渲染器以显示它们)
 public void printSelectedValues() {
     // getSelectedValueList() replaces getSelectedValues() starting with JDK 1.7
     for(String s : eoList.getSelectedValueList()) {
         System.out.println(s);
     }
 }
EO   | Value
-----+------
Val1 | 3
Val2 | 5
Val3 | 8
Val4 | 12
Val5 | 1
HashMap<String,Double> myEoMap = new HashMap<String,Double>();
myEoMap.put("Val1",3);
myEoMap.put("Val2",5);
myEoMap.put("Val3",8);
myEoMap.put("Val4",12);
myEoMap.put("Val5",1);
String[] k = new String[myEoMap.size()];
JList<String> myEoList = new JList<String>(myEoMap.keySet().toArray(k));
public void printSelectedValues() {
    for(String s : myEoList.getSelectedValueList()) {
        if(myEoMap.containsKey(s)) {
            System.out.println("Key " + s + " found! The value is: " + myEoMap.get(s));
        } else {
            System.err.println("Oops, no value found");
        }
    }
}