簡體   English   中英

Java搖擺。 需要打開3個單獨的窗口

[英]Java Swing. Need to open 3 separate windows

假設在框架中拉起3個帶有不同標簽和字符串的不同窗口。 以下是預計輸出的圖片

http://i.stack.imgur.com/KlcKh.png

我有三節課。

  • 擴展JPanel的P1Panel
  • 擴展JFrame的P1Frame
  • P1Driver用於主

    -------------------------------------------------- -------- P1Panel類如下:

     import java.awt.*; import java.awt.event.*; import javax.swing.*; public class P1Panel extends JPanel { private String s0; public P1Panel(String s0){ { add(new P1Panel(s0)); } } } 

---------------------------------------------這是下面的P1Frame類:

        import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;
        public class P1Frame extends JFrame
    {
            private String s1;
            public P1Frame (String s1){
                this.s1 = s1;
                {
                    add(new P1Panel(s1));
                }
                P1Frame p1 = new P1Frame(s1);



      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            p1.setSize(300,200);
            p1.setVisible(true);
        }
    }

----------------------------------------這是P1Driver類:

        import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;
        public class P1Driver
        {
            public static void main(String [] args)
            {
                P1Frame p1 = new P1Frame("This is window 1");
                //JFrame f2 = new JFrame("This is window 2");
                //JFrame f3 = new JFrame("This is window 3");
                p1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                p1.setSize(300,200);
                p1.setVisible(true);        
            }
        }
  • 我相信我的P1Panel類是正確的,因為我調用了一個構造函數並將其添加到自身中。 我標簽中的文本將P1Panel構造函數作為參數傳遞

  • 我遇到的P1Frame類很難。 在構造函數中,我想制作一個P1Panel對象並將其添加到P1Frame中。 我想我需要將字符串作為參數傳遞給P1Frame構造函數,然后將字符串傳遞給P1Panel?

  • 我相信我的Driver類也是正確的,因為我只是將main放在這里並設置項目的大小和可見性。

我相信我的解決方案很小,但是我不確定如何解決。 當我按原樣運行該程序時,它將無限運行,沒有彈出窗口。

在P1Panel類中有一個無限遞歸的構造函數,這就是為什么程序卡住的原因。 只需刪除線

add(new P1Panel(s0));

當您在構造函數中執行此行時,您實際上是在通過以下方式再次調用它:

new P1Panel(s0)

因此,構造函數永遠不會返回,並且會繼續遞歸調用自身。 另外,為什么不將任何Swing組件添加到P1Panel? 沒有Swing組件,它將為空。 如果要在面板內顯示字符串,建議您在構造函數中執行以下操作。

setLayout(new BorderLayout());
JLabel label = new JLabel(s0);
add(label, BorderLayout.CENTER);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM