簡體   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