【问题标题】:The switch statent and return values - How to use a switch to determin JPanel drawnswitch 语句和返回值 - 如何使用 switch 来确定 JPanel 绘制
【发布时间】:2013-08-09 08:43:21
【问题描述】:

我有一个程序,它在不同的类中编写了不同的 JPanel。我想根据用户单击的按钮打印特定的 JPanel。

程序启动时只有三个按钮:“Animals JButton”、“Plants JButton”和一个JFrame“frame”中的“Refresh JButton”;没有JPanel。

例如,如果用户点击“Animals JButton”,带有 Animals 的 JPanel 会打印在 JFrame 上。

“AnimalsJPanel”和“PlantsJPanel”写在不同的类中。另一个类“PageReturner”有一个方法可以确定通过开关打印什么。

public class Redirect {

    String pageAnimals = "pageAnimals";
    String pagePlants = "pagePlants";

    String value;

    public String pageRedirect (String pageID) {
        switch (pageID) {
            case pageAnimals:
                value = (AnimalsJPanel animalsJPanel = new AnimalsJPanel());
            break;
            case pagePlants:
                value = (PlantsJPanel plantsJPanel = new PlantsJPanel());
                break;
            case 2:
                value = null;
                break;
        }
        return null;

    }

}

我在 netbeans 中收到“需要常量字符串表达式”和“不兼容的类型”错误。我的 switch 语句可能有什么问题,有没有更好的方法来解决这个问题,即确定要打印的页面。 我想对此进行编码,而不是使用卡片布局。我是 JAVA 新手,正在尝试学习如何从类中获取对象。

我的 switch 语句是否做得很好。我正在自学编程,没有人可以咨询。非常感谢任何建议

【问题讨论】:

    标签: java swing class jpanel switch-statement


    【解决方案1】:

    switch case中使用的变量声明为final。

       final String pageAnimals = "pageAnimals";
       final String pagePlants = "pagePlants";
    

    因为所有case 标签都应该是Switch 中的编译时常量。

    【讨论】:

    • 感谢您的快速回复。它解决了“所需的常量字符串表达式”。如何处理“不兼容的类型 - 必需:字符串 - 找到 AnimalsJPanel”和必需:字符串 - 找到 PlantsJPanel
    • 你是如何调用pageRedirect() 方法的?用该代码编辑你的问题
    【解决方案2】:

    pageAnimalspagePlants 声明为静态final(注意变量名更改以匹配Java 常量约定):

    static final String PAGE_ANIMALS = "pageAnimals";
    static final String PAGE_PANTS = "pagePlants";
    

    此外,您必须明确将面板大小写为String

    case PAGE_ANIMALS :
         value = (AnimalsJPanel animalsJPanel = new AnimalsJPanel()).toString();
         break;
    case PAGE_PANTS :
         value = (PlantsJPanel plantsJPanel = new PlantsJPanel()).toString();
         break;
    

    【讨论】:

      【解决方案3】:

      您将 JPanel 对象分配给字符串,但您不能这样做!
      将值定义为JPanel value; 或写value = (AnimalsJPanel animalsJPanel = new AnimalsJPanel()).toString();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 2015-08-12
        相关资源
        最近更新 更多