簡體   English   中英

Java:JTextField不會出現

[英]Java: JTextField won't appear

public class HandleUI {     
    public static void setUpUI(){   
        JPanel jPan = new JPanel();
        FlowLayout flow = new FlowLayout();
        jPan.setLayout(flow);           
        txtFld = new JTextField();
        txtFld.setSize(550,5);
        jPan.add(txtFld);
        jPan.setSize(10,200);
        MainClass.mainFrame.add(jPan);
        int gapX = MainClass.mainFrame.getX()-(txtFld.getX()/2);
    }   
    //Instance variables.
    public static JTextField txtFld;
    public JButton [] buttons;
}   
public class MainClass { 
    public static void main (String [] args){           
        int frameX = Constants.FRAME_WIDTH;
        int frameY = Constants.FRAME_HEIGHT;
        mainFrame = new JFrame();
        mainFrame.setSize(frameX,frameY);
        mainFrame.setResizable(false);
        mainFrame.setVisible(true);
        HandleUI.setUpUI(); 
    }
    //Instance variables
    public static JFrame mainFrame;
}

它應該顯示JTextField ,但是您可能已經猜到了JFrame什么也不顯示。 我沒有故意輸入,但它們都在那里。 我找不到問題。 有人可以幫忙嗎?

1.)簡單地寫:

JTextField tField = new JTextField(10);

在這里,在構造函數中,您傳遞的是列數,這足以使FlowLayout類的布局設置JTextField的大小。

2.)mainFrame.setVisible(true); 必須是main方法的最后一行。 您需要將代碼放在SwingUtilities.invokeLater(...)內部的main()方法中。

3.)不用在JFrame上設置大小,而是使用JFrame.pack()將窗口設置為首選大小。

4.)創建不必要的static成員是設計缺陷。 嘗試使自己遠離此類事情。

5.)閱讀一些有關Swing中的並發性的知識

一個示例程序來獲得幫助( 使用此答案中指定的行順序 ):

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

public class Example {

    private void displayGUI() {
        JFrame frame = new JFrame("Example Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        JTextField tField = new JTextField(10);
        contentPane.add(tField);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new Example().displayGUI();
            }           
        };
        EventQueue.invokeLater(runnable);
    }
}

初始化UI 后,必須在JFrame上調用setVisible(true)

只需拉以下行:

HandleUI.setUpUI(); 

... 就在之前:

mainFrame.setVisible(true);

...將達到目的。

附帶說明一下,我想指出的是,設置文本字段的大小實際上並不會像您那樣工作。 您可能會改用setPreferredSize(Dimension) 或者,甚至更好的是,僅使用布局來組織UI,而不是手動設置任何組件的大小。

暫無
暫無

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

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