[英]Not able to add JTextField to JFrame
我無法將JTextField
添加到JFrame
。 我的JFrame
包含一個JLabel
和一個JTextField
。 首先,我添加了JLabel
,它正在運行。 這是代碼。
private static void createandshowGUI()
{
JFrame frame =new JFrame("HelloSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.red);
frame.setSize(200,200);
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
frame.setVisible(true);
}
public static void main(String[] args) {
createandshowGUI();} //and it shows the output like below .
然后我添加了JTextField。
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
JTextField jtf=new JTextField();
frame.getContentPane().add(jtf);
frame.setVisible(true);
但后來它顯示了這樣的輸出。
請有人幫我解決這個問題。我可以向JFrame添加多個組件嗎?因為我是Java新手,我在框架,ContentPane和Layouts之間存在混淆。
實際上你成功地添加了JTextField
。 您遇到的問題源於布局管理器,它在整個框架中展開它。
默認情況下, JFrame
的內容窗格使用BorderLayout
管理器。 (請參見如何使用BorderLayout )
在我的應用程序中,總是最終使用MigLayout管理器,但首先您可能希望熟悉布局管理器。 (請參閱布局管理器的可視指南 )
默認情況下,您的ContentPane
具有BorderLayout
,它只接受單個元素(在默認位置 - 中心)。 添加第二個元素( JTextField
)后,它替換了最后一個元素( JLabel
)。
使用單參數add
向Container
添加元素時,您沒有指定您想要它們的位置,因此布局管理器會隨意選擇一個位置。 OTOH如果您指定約束(使用重載的添加 ),那么您可以更好地控制元素的放置位置。 檢查每個布局管理器的文檔,以了解它們的工作方式以及它支持的約束。
對於您當前的情況,您可以使用中間JPanel
(其中包含FlowLayout
作為其默認的LayoutManager
- 最簡單的恕我直言,仍在學習),而不是直接向內容窗格添加元素,或者只是將其布局更改為其他內容。
JFrame
只能有一個組件(除非你使用它有一個BorderLayout
)。 解決方案是使用JPanel
。 您將對象添加到JPanel,然后將JPanel
添加到JFrame
。 你需要添加import javax.swing.JPanel;
太。 你可以這樣做:
private static void createandshowGUI()
{
JFrame frame =new JFrame("HelloSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.red);
frame.setSize(200,200);
JPanel panel = new JPanel(); //Create a JPanel
JLabel label=new JLabel("New To Java!!");
panel.add(label); // Add the label to the panel
JTextField jtf = new JTextField();
panel.add(jtf); // Add the JTextField to the panel
frame.getContentPane().add(panel); // Add the panel to the JFrame
frame.setVisible(true);
}
public static void main(String[] args) {
createandshowGUI();}
這應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.