繁体   English   中英

第二个JFrame从第一个JFrame不显示

[英]Second JFrame doesn't show from first JFrame

这是一个简单的JFrame应用程序。 它基本上是根据用户选择创建一个新的Frame 第一帧开始,但是新的帧不显示! 它显示ie2 cannot be resolved ie1 cannot be resolvedie2 cannot be resolved 我想看一下新的Frame

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Test2 {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Java test");
        Container c = jf.getContentPane();
        jf.setBounds(450, 180, 450, 450);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
        JPanel jp = new JPanel();
        c.add(jp);
        JLabel jl = new JLabel("This is a text in a label",SwingConstants.CENTER);
        jp.add(jl);
        JComboBox jcb1 = new JComboBox();
        jp.add(jcb1);
        jcb1.addItemListener(new ItemListener() {
            public void itemStateChanged(final ItemEvent ie1) {
                ie1.getItem();
            }
        });
        jcb1.addItem("       Select the Size       ");
        jcb1.addItem("100 x 100");
        jcb1.addItem("200 x 200");
        jcb1.addItem("300 x 300");
        jcb1.addItem("400 x 400");
        jcb1.addItem("500 x 500");
        jcb1.addItem("600 x 600");
        JComboBox jcb2 = new JComboBox();
        jp.add(jcb2);
        jcb2.addItemListener(new ItemListener() {
            public void itemStateChanged(final ItemEvent ie2) {
                ie2.getItem();
            }
        });
        jcb2.addItem("       Select the Colour     ");
        jcb2.addItem("Blue");
        jcb2.addItem("Red");
        jcb2.addItem("Black");
        jcb2.addItem("White");
        jcb2.addItem("Yellow");
        jcb2.addItem("Green");
        JButton jb = new JButton("Create a new Frame");
        jp.add(jb);
        jb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                final JFrame jf1 = new JFrame("New Frame");
                Container c = jf1.getContentPane();
                jf1.setVisible(true);
                jf1.setDefaultCloseOperation(jf1.EXIT_ON_CLOSE);
                // The Size of the frame
                if (ie1.getItem().equals("       Select the Size       ")) {
                    JOptionPane.showMessageDialog(null, "Please select the size of the Frame");
                }
                if (ie1.getItem().equals("100 x 100"))
                    ;
                {
                    jf1.setBounds(450, 180, 100, 100);
                }
                if (ie1.getItem().equals("200 x 200"))
                    ;
                {
                    jf1.setBounds(450, 180, 200, 200);
                }
                if (ie1.getItem().equals("300 x 300"))
                    ;
                {
                    jf1.setBounds(450, 180, 300, 300);
                }
                if (ie1.getItem().equals("400 x 400"))
                    ;
                {
                    jf1.setBounds(450, 180, 400, 400);
                }
                if (ie1.getItem().equals("500 x 500"))
                    ;
                {
                    jf1.setBounds(450, 180, 500, 500);
                }
                if (ie1.getItem().equals("600 x 600"))
                    ;
                {
                    jf1.setBounds(450, 180, 600, 600);
                }
                // The size of the Frame ends

                // The colour of the frame
                if (ie2.getItem().equals("       Select the Colour     ")) {
                    JOptionPane.showMessageDialog(null, "Please select the colour of the Frame");
                }
                final JPanel jp1 = new JPanel();
                c.add(jp1);
                if (ie2.getItem().equals("Blue")) {
                    jp1.setBackground(Color.blue);
                }
                if (ie2.getItem().equals("Red")) {
                    jp1.setBackground(Color.red);
                }
                if (ie2.getItem().equals("Black")) {
                    jp1.setBackground(Color.black);
                }
                if (ie2.getItem().equals("White")) {
                    jp1.setBackground(Color.white);
                }
                if (ie2.getItem().equals("Yellow")) {
                    jp1.setBackground(Color.yellow);
                }
                if (ie2.getItem().equals("Green")) {
                    jp1.setBackground(Color.green);
                }
                // the colour of the frame ends
            }
        });

    }
}

您既没有实例化,也没有在任何地方初始化ie1ie2变量。 我可以看到它们代表ItemEvent引用,但是它们的范围仅限于ItemListener '方法。

如果您使用的是Eclipse,它将为您提供快速修复。 但是,如果您是我,那么我将首先开始Java for Beginners阅读Java for Beginners ,然后再转向AWT / Swing和SWT / JFace。

尝试从更基本的内容开始。 在我看来,上面的代码对您来说有点不知所措。 祝你好运,小小程序员。

几件事:您不需要ItemListeners即可获得组合框的选定值,而只需

Object ie1 = jcb1.getSelectedItem();
Object ie2 = jcb2.getSelectedItem();

正上方

if(ie1.equals("       Select the Size       "))
{
    JOptionPane.showMessageDialog(null,"Please select the size of the Frame");
}

并且由于您使用的是匿名内部类,因此需要确保将jcb1jcb2声明为final ,如下所示:

final JComboBox jcb1 = new JComboBox();

同样,将ie1.getItem().equals(...)更改为ie1.equals(...) ,并对ie2进行相同的ie2

另一方面,请勿在if语句后加上分号。

对:

if(ie1.equals("100 x 100")) 
{
    ...
}

错误:

if(ie1.equals("100 x 100"));
{                        //^
    ...
}

因此,删除那些if语句之后的分号。

综上所述,我绝对建议您遵循GGrec的建议,并开始阅读一些Java教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM