java - 在 Java 中实现通用 switch 语句

标签 java swing switch-statement jslider

我有一个 JSlider,其值从 1 到 360。对于每个值,我想从数据库获取图像并将其放入 JLabel。所以我有 360 个案例,其中唯一的区别是用于从数据库获取相应图像的变量开关(参见下面的代码)。我知道我需要刷新我的代码,因为使用我的“解决方案”,代码非常繁重。

我希望我清楚我要存档的内容。下面是代码。

degreesSlider = new JSlider(); //my JSlider

degreesSlider.setMajorTickSpacing(10);
degreesSlider.setMaximum(360);
degreesSlider.setMinorTickSpacing(1);
degreesSlider.setOrientation(javax.swing.JSlider.VERTICAL);
degreesSlider.setPaintLabels(true);
degreesSlider.setPaintTicks(true);
degreesSlider.setSnapToTicks(true);
degreesSlider.setValue(0);

degreesSlider.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent evt) {

                int x = degreesSlider.getValue(); //get JSlider value

                int row = myJTable.getSelectedRow();
                int realIndex = myJTable.convertRowIndexToModel(row);
                String clickJTable = (myJTable.getModel().getValueAt(realIndex, 0).toString()); //detect my JTable row click

                switch (x) {

                    case 1:
                        try {
                            PreparedStatement pst = conn.prepareStatement("select pol, cros from test where degrees = ? AND id_min=?");
                            pst.setInt(1, x); //x is the only variable of the all 360 cases
                            pst.setString(2, clickJTable);
                            ResultSet rs = pst.executeQuery();

                            if (rs.next()) {
                                byte[] imageP = rs.getBytes("pol");
                                byte[] imageC = rs.getBytes("cros");

                                pol = new ImageIcon(imagepolars);
                                cros = new ImageIcon(imagecrossed);

                                mineralsPolars.setIcon(pol); //put image into JLabel
                                mineralsCrossed.setIcon(cros); //put image into JLabel
                            }
                            rs.close();
                            pst.close();
                        } catch (Exception e) {
                        }
                        break;

                    //case 2, 3, 4 ... 360 with the same code and the difference between them is the variable x


                }

            }
        });

最佳答案

考虑到每个 switch 子句的代码都是相同的,为什么不将 switch 替换为

 if (x >= 1 && x <= 360) {
     // do the db lookup
 }

编辑:

您需要 if 语句的唯一原因是您想要检查 slider 值 (x) 是否在查询指定的范围内,正如 @NominSim 指出的那样, slider 值在您的控制范围内,因此您可能根本不需要它。

关于java - 在 Java 中实现通用 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088384/

相关文章:

java - 如何在java中访问具有两个条件的开关的情况?

java - 取消Timer类对象后如何重新创建它?

java - 将首选项迁移到 AndroidX

java - 尝试制作一个 JFrame,其中包含两个具有自己的类的 JPanel,然后使用 mouseListener 在两个 JPanel 上绘制形状

java - 更改 ContentPane 的背景颜色

java - setLayout(LayoutManager) 不适用于参数

java - 在 jax-ws 中根据 XSD 验证 Web 服务请求?

java - 如何强制使用 GridBagLayout 的 JPanel 通过 JFrame 调整大小

java开关性能优化

java菜单程序切换大小写避免退出如果从菜单中选择了数字