1

我有一个程序,它在不同的类中编写了不同的 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 语句是否做得很好。我正在自学编程,没有人可以咨询。提前非常感谢任何建议

4

3 回答 3

3

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

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

由于所有case标签都应该是Switch.

于 2013-08-09T08:46:38.933 回答
2

Declare pageAnimals and pagePlants as static final (note the variable name change to match java conventions for constants):

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

Also, you have to explicitly case the panels to String:

case PAGE_ANIMALS :
     value = (AnimalsJPanel animalsJPanel = new AnimalsJPanel()).toString();
     break;
case PAGE_PANTS :
     value = (PlantsJPanel plantsJPanel = new PlantsJPanel()).toString();
     break;
于 2013-08-09T08:52:49.557 回答
1

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

于 2013-08-09T09:30:45.620 回答