簡體   English   中英

我的GUI窗口未顯示任何內容

[英]My GUI window doesn't show anything

我正在嘗試使用網格布局制作GUI窗口。 我添加了所有組件,並且可以編譯,但是在運行時什么也沒有顯示。 我正在嘗試制作一個簡單的布局,像這樣分組和堆疊。

{introduction message}
{time label
time input text}
{gravity label
gravity input text}
{answer label
answer text box}
{calculate button clear button}

這是我的代碼

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

public class TurnerRandyFallingGUI  extends JFrame
{   
final int WINDOW_HEIGHT=500;
final int WINDOW_WIDTH=500;

public TurnerRandyFallingGUI()
{
    setTitle("Falling Distance Calculator");

    setSize(WINDOW_WIDTH,WINDOW_HEIGHT);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setLayout(new GridLayout(1, 5));

    //labels
    JLabel introMessage = new JLabel("Welcome to the Falling distance"+
                                       "calculator");
    JLabel timeLabel = new JLabel("Please enter the amount of time "+
                "in seconds the object was falling.");
    JLabel gravityLabel = new JLabel("Enter the amount of gravity being "+
                    "forced onto the object");
    JLabel answerLabel = new JLabel("Answer");

    //text fields
    JTextField fTime = new JTextField(10);
    JTextField gForce = new JTextField(10);
    JTextField answerT = new JTextField(10);

    //buttons
    JButton calculate = new JButton("Calculate");
    JButton clr = new JButton("clear");

    //panels
    JPanel introP = new JPanel();
    JPanel timeP = new JPanel();
    JPanel gravityP = new JPanel();
    JPanel answerP = new JPanel();
    JPanel buttonsP = new JPanel();

    //adding to the panels
    //intro panel
    introP.add(introMessage);
    //time panel
    timeP.add(timeLabel);
    timeP.add(fTime);
    //gravity panel
    gravityP.add(gravityLabel);
    gravityP.add(gForce);
    //answer panel
    answerP.add(answerLabel);
    answerP.add(answerT);
    //button panel
    buttonsP.add(calculate);
    buttonsP.add(clr);




    setVisible(true);
}
    public static void main(String[] args)
    {
        new TurnerRandyFallingGUI();
    }
}

您沒有為上述類擴展的JFrame添加任何內容。 您需要將您的組件添加到容器中,其層次最終導致頂層窗口,在this如果你願意。 換句話說,在上面的代碼中沒有add(someComponent)或功能類似的this.add(someComponent)方法調用。

  • 考慮將所有JPanels添加到單個JPanel中
  • 考慮通過調用add(thatJPanel)將該JPanel添加到您的類的JFrame實例中。
  • 更好的辦法是不擴展JFrame並僅在需要時創建一個JFrame,但這可能是在另一時間進行另一次討論的主題。

setVisible (true)語句之前,添加以下語句:

add (introP);
add (timeP);
add (gravityP);
add (answerP);
add (buttonsP);

您的JFrame中沒有任何內容。 這就是原因

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

public class TurnerRandyFallingGUI  extends JFrame
{   
final int WINDOW_HEIGHT=500;
final int WINDOW_WIDTH=500;

public TurnerRandyFallingGUI()
{


    //labels
    JLabel introMessage = new JLabel("Welcome to the Falling distance"+
                                       "calculator");
    JLabel timeLabel = new JLabel("Please enter the amount of time "+
                "in seconds the object was falling.");
    JLabel gravityLabel = new JLabel("Enter the amount of gravity being "+
                    "forced onto the object");
    JLabel answerLabel = new JLabel("Answer");

    //text fields
    JTextField fTime = new JTextField(10);
    JTextField gForce = new JTextField(10);
    JTextField answerT = new JTextField(10);

    //buttons
    JButton calculate = new JButton("Calculate");
    JButton clr = new JButton("clear");

    //panels
    JPanel introP = new JPanel();
    JPanel timeP = new JPanel();
    JPanel gravityP = new JPanel();
    JPanel answerP = new JPanel();
    JPanel buttonsP = new JPanel();

    //adding to the panels
    //intro panel
    introP.add(introMessage);
    //time panel
    timeP.add(timeLabel);
    timeP.add(fTime);
    //gravity panel
    gravityP.add(gravityLabel);
    gravityP.add(gForce);
    //answer panel
    answerP.add(answerLabel);
    answerP.add(answerT);
    //button panel
    buttonsP.add(calculate);
    buttonsP.add(clr);

    setLayout(new GridLayout(5, 1));

    this.add(introP);
    this.add(timeP);
    this.add(gravityP);
    this.add(answerP);
    this.add(buttonsP);


 setTitle("Falling Distance Calculator");

    this.pack();

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



    setVisible(true);
    this.validate();
}
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TurnerRandyFallingGUI();
            }
        });

    }
}

考慮以下

  • 在GridLayout中,第一個參數是Rows ,第二個參數是columns
  • 切勿手動設置JFrame的大小。 使用pack()方法確定大小
  • 使用SwingUtilities.InvokeLater()在另一個線程中運行GUI。

暫無
暫無

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

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