如何在Java中隐藏带有动作的JPanel?

如何在Java中隐藏带有动作的JPanel?,java,swing,jpanel,Java,Swing,Jpanel,到目前为止,我已经得到了这一点,但我不断地得到错误。我现在不知道发生了什么,我已经在网上寻找教程,但我现在不知道如何解决我的问题 JComboBox<String> cmdChoose = new JComboBox<String>(); cmdChoose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

到目前为止,我已经得到了这一点,但我不断地得到错误。我现在不知道发生了什么,我已经在网上寻找教程,但我现在不知道如何解决我的问题

JComboBox<String> cmdChoose = new JComboBox<String>();
    cmdChoose.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (cmdChoose.getSelectedItem() == "Json Sign") {

                /* I am getting the error here it is below it says mDataone
                  cannot be resolved so please help me! */

                mDataone.setVisible(true);
            }

            if (cmdChoose.getSelectedItem() == "Summon") {

            }
        }
    });

    cmdChoose.setBounds(149, 11, 181, 27);
    mainPage.getContentPane().add(cmdChoose);

    cmdChoose.addItem("Json Sign");
    cmdChoose.addItem("Summon");

    cmdChoose.setSelectedItem(null);

    Label cglbl = new Label("Command Generators:");
    cglbl.setBounds(10, 16, 133, 22);
    mainPage.getContentPane().add(cglbl);

    JPanel mDataone = new JPanel();
    mDataone.setBounds(10, 74, 324, 209);
    mainPage.getContentPane().add(mDataone);
    mDataone.setLayout(new GridLayout(1, 0, 0, 0));
JComboBox cmdChoose=newjcombobox();
cmdChoose.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
if(cmdChoose.getSelectedItem()=“Json符号”){
/*我在这里得到了一个错误,它在下面,上面写着mDataone
无法解决,请帮助我*/
mDataone.setVisible(true);
}
如果(cmdChoose.getSelectedItem()=“召唤”){
}
}
});
挫折(149,11,181,27);
mainPage.getContentPane().add(cmdChoose);
cmdChoose.addItem(“Json符号”);
cmdChoose.addItem(“传唤”);
cmdChoose.setSelectedItem(空);
标签cglbl=新标签(“命令生成器:”);
cglbl.立根(10,16,133,22);
mainPage.getContentPane().add(cglbl);
JPanel mDataone=新的JPanel();
mDataone.setBounds(10,74,324,209);
mainPage.getContentPane().add(mDataone);
setLayout(新的GridLayout(1,0,0,0));

您已经创建了一个用于处理操作的内部类,并且mDataone在它之后声明,所以在处理操作事件之前创建它,但最好的方法是将其设置为静态


在代码中还应该做的一件事是使用equals()或equalsIgnoreCase(),cmdChoose.getSelectedItem().equalsIgnoreCase(“Json符号”)。希望对你有帮助

您正在使JPanelmdataone在连接到JFrame之前可见。您已经将JPanel的声明放在了代码的末尾,因此当在ActionPerformed()方法中调用setVisible()方法时,您会收到一个错误,表明未定义mdataone。因此,要解决此错误,您需要将下面的代码从其实际位置(即从末尾)放置到actionPerformed()方法的上方

像这样

JPanel mDataone = new JPanel();
    mDataone.setBounds(10, 74, 324, 209);
    mainPage.getContentPane().add(mDataone);
    mDataone.setLayout(new GridLayout(1, 0, 0, 0));

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    mDataone.add(tabbedPane);

    JPanel first_line = new JPanel();
    tabbedPane.addTab("1st Line", null, first_line, null);

    JPanel second_line = new JPanel();
    tabbedPane.addTab("2nd Line", null, second_line, null);

    JPanel third_line = new JPanel();
    tabbedPane.addTab("3rd Line", null, third_line, null);

    JPanel forth_line = new JPanel();
    tabbedPane.addTab("4th Line", null, forth_line, null);

    JComboBox<String> cmdChoose = new JComboBox<String>();
    cmdChoose.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (cmdChoose.getSelectedItem() == "Json Sign") {
                mDataone.setVisible(true);
            }

            if (cmdChoose.getSelectedItem() == "Summon") {

            }
        }
    });

    cmdChoose.setBounds(149, 11, 181, 27);
    mainPage.getContentPane().add(cmdChoose);

    cmdChoose.addItem("Json Sign");
    cmdChoose.addItem("Summon");

    cmdChoose.setSelectedItem(null);

JPanel mDataone=newjpanel();
mDataone.setBounds(10,74,324,209);
mainPage.getContentPane().add(mDataone);
setLayout(新的GridLayout(1,0,0,0));
JTabbedPane tabbedPane=新的JTabbedPane(JTabbedPane.TOP);
mDataone.add(选项卡窗格);
JPanel first_line=新的JPanel();
tabbedPane.addTab(“第一行”,null,第一行,null);
JPanel第二行=新的JPanel();
tabbedPane.addTab(“第二行”,null,第二行,null);
JPanel第三行=新的JPanel();
tabbedPane.addTab(“第三行”,null,第三行,null);
JPanel forth_line=新的JPanel();
tabbedPane.addTab(“第四行”,null,第四行,null);
JComboBox cmdChoose=新建JComboBox();
cmdChoose.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
if(cmdChoose.getSelectedItem()=“Json符号”){
mDataone.setVisible(true);
}
如果(cmdChoose.getSelectedItem()=“召唤”){
}
}
});
挫折(149,11,181,27);
mainPage.getContentPane().add(cmdChoose);
cmdChoose.addItem(“Json符号”);
cmdChoose.addItem(“传唤”);
cmdChoose.setSelectedItem(空);

嗯,这个信息很清楚,不是吗?您在哪里定义
mDataone
?10行之后。所以在这一点上没有定义。就这么简单。另外,学习如何在Java中比较字符串是在定义了
ActionListener
之后定义的,因此
ActionListener
无法看到它
mDataone
也是在本地上下文中定义的,在尝试提出更多问题之前请先阅读。在尝试提出更多问题之前请先阅读。因此,我需要在创建JPanel后执行操作?我是这个网站的新手,它也很有效。我真的很喜欢这个网站!!!!你错过了不使用“==”进行字符串比较的要点。
而且它也起作用了
-然后不要忘记“接受”通过单击复选标记帮助你解决问题的答案,这样人们就知道问题已经解决了。”…最好的方法是使其保持静态。”不,不是。对GUI组件使用
static
会导致比修复的问题更多的问题,并且通常是设计不佳的标志。对于手头的问题,它可以正常工作,但是的,Andrew,这是设计不佳的标志。。。
JPanel mDataone = new JPanel();
    mDataone.setBounds(10, 74, 324, 209);
    mainPage.getContentPane().add(mDataone);
    mDataone.setLayout(new GridLayout(1, 0, 0, 0));

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    mDataone.add(tabbedPane);

    JPanel first_line = new JPanel();
    tabbedPane.addTab("1st Line", null, first_line, null);

    JPanel second_line = new JPanel();
    tabbedPane.addTab("2nd Line", null, second_line, null);

    JPanel third_line = new JPanel();
    tabbedPane.addTab("3rd Line", null, third_line, null);

    JPanel forth_line = new JPanel();
    tabbedPane.addTab("4th Line", null, forth_line, null);

    JComboBox<String> cmdChoose = new JComboBox<String>();
    cmdChoose.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (cmdChoose.getSelectedItem() == "Json Sign") {
                mDataone.setVisible(true);
            }

            if (cmdChoose.getSelectedItem() == "Summon") {

            }
        }
    });

    cmdChoose.setBounds(149, 11, 181, 27);
    mainPage.getContentPane().add(cmdChoose);

    cmdChoose.addItem("Json Sign");
    cmdChoose.addItem("Summon");

    cmdChoose.setSelectedItem(null);