0

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

我还想在最终结果中添加一些其他选项(移动电话公司有额外的选项)。

关于EO(extraoptions)数量众多,我想让用户选择多个选项。

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

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

所以问题是:你认为最好的方法是什么,怎么做?(并不是最难的,因为我是个初学者,拜托)

在此先感谢,不要对我苛刻,这是我的第一个问题!应用程序: http: //tinypic.com/r/wugsnm/5

更新: 所以我设法进一步完成了这个应用程序。到目前为止,我能够从列表中取出选定的行并将其纳入总结果。
但是: 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");

    }                                           

你认为可以做到什么?这就是我走了多远。

4

1 回答 1

0

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

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

让我说明一下我的观点(取自Java API)。

您可以像这样构建您的 JList:

String[] data = {"one", "two", "three", "four"};
JList<String> myList = new JList<String>(data);

这将创建一个JList包含四个字符串的对象(请注意,您指定此 JList 将在您编写时保存字符串<String>。进一步参考:Java 教程:泛型)。

当您从列表中选择一个项目时,您可以使用 检索它的位置getSelectedIndex(),它返回最小的选定单元格索引或在列表中仅选择一个项目时的选择

因此,假设您选择"three"JList 中的条目:

myList.getSelectedIndex(); // Will return 2 (remember arrays are "zero based")

如果您在列表中选择多个条目,getSelectedIndices()则将返回一个包含所有选定索引的数组,按升序排列。

因此,假设您选择条目"one""three"

myList.getSelectedIndices(); // Will return an array with the values [0, 2]

因此,针对您的具体情况,我将创建一个字符串数组来保存您的“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);

现在,让我们创建一个返回每个选定值之和的小方法:

 public double sumSelectedValues() {
     double ans = 0;
     for(int i : eoList.getSelectedIndices()) {
         ans += eo_values[i];
     }
     return ans;
 }

现在,让我们创建一个简单的方法来打印选定的值(字符串):

 public void printSelectedValues() {
     // getSelectedValueList() replaces getSelectedValues() starting with JDK 1.7
     for(String s : eoList.getSelectedValueList()) {
         System.out.println(s);
     }
 }

让我们更进一步。

我假设您有一个包含标签和值的“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);

请注意,“键”(put方法的第一个参数)必须是唯一的。

现在,让我们使用键值创建一个 JList:

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");
        }
    }
}

希望这可以帮助

于 2013-09-17T21:08:34.537 回答