如何分隔列表中的选项

时间:2014-05-22 19:04:57

标签: java swing jlist

该程序的目的是计算不同几何图形的体积(如圆柱体或金字塔形)。我首先添加了一个列表,用户可以在其中选择不同的数字。

问题是我不知道如何让程序知道使用哪个公式。我需要能够分离选择,而不是仅仅从答案中取出一个int。

    private void btnAktiveraActionPerformed(java.awt.event.ActionEvent evt) {                                            
        String form = listForm.getSelectedValue().toString();
        int fo = Integer.valueOf( form );

        String höjd = txfHöjd.getText().toString();
        int hö = Integer.valueOf( höjd );

        String bredd = txfBredd.getText().toString();
        int br = Integer.valueOf( bredd );

        String radie = txfRadie.getText();
        int ra = Integer.valueOf(radie);

        String djup = txfDjup.getText();
        int dj = Integer.valueOf(djup);

        double ACyl = 3.14*ra*ra*hö;
        double APyr = (br*dj*hö)/2;
        double AKub = br*dj*hö;
        double ARät = br*dj*hö;

        txfHöjd.setEnabled(false);
        txfBredd.setEnabled(false);
        txfDjup.setEnabled(false);
        txfRadie.setEnabled(false);
        listForm.setEnabled(false);
    }                                           

    private void btnBeräknaActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // I know this code won't work, its just a reminder.
    if (answer == Cyinder){
        System.out.print("volymen är: "+ACyl+" cm^3");
    }            

    }                                          

3 个答案:

答案 0 :(得分:0)

如果您已经有供用户选择的列表,可以考虑使用地图。您可以将所有形状作为地图的关键点,然后将体积公式作为地图的值。可以通过keySet将形状列表提供给用户,并且可以将它们的响应与地图匹配以查找公式。

编辑:你有一个动作事件中每个形状的公式。您需要将这些内容移到单独的课程中

public static class Formulas() {
     // list all formulas here
     private String cylinder = "3.14*r*r*h";
}

然后当你点击动作时,你可以创建一个新的Formulas类实例,并使用你可能在那里写的任何便利方法。

答案 1 :(得分:0)

我不清楚你的问题。我建议制定一个解决问题的计划。

  1. 列出程序将计算的数字
  2. 列出计算这些数字量的方法列表
  3. 创建个别类,变量等......
  4. 创建方法
  5. 使用用户输入创建主要方法
  6. 您提到您不知道使用哪个公式。 我假设你的程序中没有很多公式。我会为每个单独的数字创建一个单独的方法,即piramidFormula(),cilinderFormula()......

    当我认为你的编程水平在这个阶段是非常基础的时候,没有必要提到民族主义。

    我希望这会对你有所帮助。

答案 2 :(得分:0)

你需要一个列表来保存这些东西,你似乎理解这很好。

你需要一种方法来选择东西。选择通常与列表不完全相同,您需要一个班级来负责选择"选择"行为。

每个东西都有一个可以计算音量的例程。这意味着它需要输入参数。这就是它开始变得棘手的地方,因为如果你想让你所有的东西都在同一个列表中,你需要决定如何管理列表中不同类型的不同输入参数。

public List<VolumeCalculations> volumeCalculations ...

public interface VolumeCalculation {
   public double getVolume();
}

public class CubleCalcuation implements VolumeCalculation {
   private double side = 0;

   public void setSide(double value) {
     this.side = value;
   }

   @Override
   public double getVolume() {
     return side*side*side;
   }

}

其他音量计算留给你练习。

然后你需要把它们全部放在列表中

volumeCalculations.add(new CubeVolumeCalculation());
...

但是当你选择计算时,你需要&#34;某些东西&#34;要求正确的输入。

public interface CalculationInputGather {
   public void setCalcualtion(VolumeCalcuation value);
   public void askForInputs();
}

CubleCalcuation的那个可能看起来像

public CubeInputGather implements CalculationInputGatherer {

   @Override
   public void setCalculation(VolumeCalcualtion value) {
     if (value instanceof CubeCalcuation) {
       this.volume = value;
     }
     throw new IllegalArgumentException("value must be a CubeCalculation");
   }

   public void askForInputs() {
     System.out.println("enter the side value:");
     // read the value
     volume.setSide(value);
   }
}

然后,当您知道列表中的所选项目时,您可以使用计算映射到其输入收集器,以便为所选计算查找正确的输入收集器。