Java - 当我运行我的公式计算器程序时,即使选择了另一个形状,它也默认询问“圆的半径是多少”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 当我运行我的公式计算器程序时,即使选择了另一个形状,它也默认询问“圆的半径是多少”相关的知识,希望对你有一定的参考价值。

package messingaround;
import java.awt.*;
import javax.swing.*;
import messingaround.Secondary;
public class Main {

    public static void main (String[] args){
        Runnable r = new Runnable() {

            @Override
            public void run() {
                Object[] options = {
                    "Circle Area",
                    "Triangle Area",
                    "Square/Rectangle Area",
                    "Circle Circumference",
                    "Cube/Rectangular Prism Volume",
                    "Cylinder Volume",
                    "Pyramid Volume"
                };
                JComboBox shapePicker = new JComboBox(options);

下面是带有下拉菜单的实际GUI

                String shapechoice = (String) JOptionPane.showInputDialog(
                        null,
                        "Choose from the following options...", 
                        "Formula Calculator",
                        JOptionPane.QUESTION_MESSAGE, null,
                        options, // Array of menuChoices
                        options[0]); // Initial choice

                    int shapepick = shapePicker.getSelectedIndex();

                Secondary CalculationsObject = new Secondary();

这是我遇到问题的地方,switch语句总是默认为case 0;

                switch(shapepick) {

它始终默认为大小写0

                case 0:
                    CalculationsObject.CircleArea();
                    break;
                case 1:
                    CalculationsObject.TriangleArea();
                    break;
                case 2:
                    CalculationsObject.RectangleArea();
                    break;
                case 3:
                    CalculationsObject.CircleCircumference();
                    break;
                case 4:
                    CalculationsObject.CubeVolume();
                    break;
                case 5:
                    CalculationsObject.CylinderVolume();
                    break;
                case 6:
                    CalculationsObject.PyramidVolume();
                    break;
                default:
                    break;

                }
            }
        };

旁注:如果它涉及invokeLater的事情,我需要解释invokeLater实际上做了什么,因为我不太熟悉它。

        SwingUtilities.invokeLater(r);   
}

}

这是下面的下一课。此类计算形状的面积/体积。我删除了一些方法,因为它们不是必需的或涉及到问题。

package messingaround;
import javax.swing.JOptionPane;
public class Secondary {

public static void CircleArea(){

    String arearadiusdefine;    
    double arearadius, circlearea, arearadiussquared;

    arearadiusdefine = JOptionPane.showInputDialog("What is the radius of the circle?");
    arearadius = Double.parseDouble(arearadiusdefine);

    arearadiussquared = arearadius * arearadius;
    circlearea = arearadiussquared * 3.14159265359;

    JOptionPane.showMessageDialog(null, "The area of the circle is: " +circlearea, "Formula Calculator", JOptionPane.PLAIN_MESSAGE);
}
public static void TriangleArea(){

    String trianglebasedefine, triangleheightdefine;        
    double trianglebase, triangleheight, trianglearea;

    trianglebasedefine = JOptionPane.showInputDialog("What is the base");       
    triangleheightdefine = JOptionPane.showInputDialog("What is the height?");
    triangleheight = Double.parseDouble(triangleheightdefine);
    trianglebase = Double.parseDouble(trianglebasedefine);  

    trianglearea = trianglebase * triangleheight * 0.5;

    JOptionPane.showMessageDialog(null, "The area of the triangle is: " 
 +trianglearea, "Formula Calculator", JOptionPane.PLAIN_MESSAGE);
}
答案

因为你还没有将回调附加到你的JComboBox,所以你的switch代码只在启动时运行一次。

首先将你的switch重构为一个重用函数:

public void onOptionChange(int newOption) {
     switch(newOption) {
            case 0:
                CalculationsObject.CircleArea();
                break;
            case 1:
                CalculationsObject.TriangleArea();
                break;
            case 2:
                CalculationsObject.RectangleArea();
                break;
            case 3:
                CalculationsObject.CircleCircumference();
                break;
            case 4:
                CalculationsObject.CubeVolume();
                break;
            case 5:
                CalculationsObject.CylinderVolume();
                break;
            case 6:
                CalculationsObject.PyramidVolume();
                break;
            default:
                break;

            }
}

定义“onOptionChange”侦听器:

    public void optionChanged(ItemEvent event) {
       if (event.getStateChange() == ItemEvent.SELECTED) {
           // For each item change, you got two events: One for Deselect and the other for DESELECT
           int option = shapePicker.getSelectedIndex();
           // Invoke change
           onOptionChange(option);
       }
    } 

然后附加一个事件监听器:

JComboBox shapePicker = new JComboBox(options);
onOptionChange(0); // Default first option select.
shapePicker.addItemListener(new ItemListener() {
        @Override
        public void itemStateChanged(ItemEvent e) {
            optionChanged(e);
        }
    });

以上是关于Java - 当我运行我的公式计算器程序时,即使选择了另一个形状,它也默认询问“圆的半径是多少”的主要内容,如果未能解决你的问题,请参考以下文章

不使用 localhost 时 Java NIO Selector 不起作用

即使应用程序关闭也运行作业(Android Oreo)

错误:即使 @TargetApi 设置为 18,当我使用 getRunningTasks 时,我的应用程序也会停止工作

扩展内联汇编 gcc - 计算二次公式根

即使我的应用程序关闭,也会在后台运行 dart 代码

当我尝试在我的终端上运行代码时,我不断收到“ModuleNotFound”错误,即使我安装了它