簡體   English   中英

擺動組件不可見

[英]swing component not visible

我正在開發一個應用程序,但仍處於初期階段。 我在JFrameJPanel中有一個JTextField JTextField不存在。 如果我用

JPanel p0 = (JPanel) f.getContentPane();

有用。 但不是

JPanel p0 = new JPanel();
f.add(p0);

因此問題是:

  1. 為什么看不到該字段? (最重要的q)
  2. 前面提到的兩種方法有什么區別?

碼:

import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;

public class Main
{

    static Font fontDefault = new Font("arial", Font.PLAIN, 15);

    public static void main ( String [ ] args )
    {
        JFrame f = new JFrame("Liquid");
        f.setSize(new Dimension(840, 400));
        //f.setIconImage(image);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //JPanel p0 = (JPanel) f.getContentPane();// is it necessary?
        JPanel p0 = new JPanel();
        p0.setLayout(null);
        JPanel p1 = new JPanel();
        p1.setLayout(null);

        JTextField tfHostName = new JTextField("default text", 20);
        tfHostName.setBounds(50, 50, 200, 25);
        tfHostName.setFont(fontDefault);

        JButton bRequest = new JButton("request");
        JButton bReset = new JButton("reset");

        JTextArea taTest = new JTextArea("default text", 1, 20);
        p0.add(tfHostName);
        f.add(p0);

        f.add(p1);

        p0.add(taTest);
        //f.pack();
        f.setResizable(false);
        f.setVisible(true);

    }
}

提醒一句:

它與JPanel p0 = (JPanel) f.getContentPane(); 但是為什么id不支持我更喜歡的第二種方法? 另外,以這種方式如何添加第二個面板,以及如何使每個面板中的組件自動排列?

更新:

我意識到代碼一開始就沒有用,可能是因為我沒有指定任何坐標/位置?

首先,您必須將面板添加到您的布局管理器中。

add(p0);

然后您需要調用JFrame的包裝

pack();

如果需要2個面板,則可以在框架/布局管理器中為其指定位置。

f.add(pane1, BorderLayout.WEST);
f.add(pane2, BorderLayout.EAST);

您有3種可能性來設置組件的大小:

setPreferredSize(Dimension D);
setMinimumSize(Dimension D);
setMaximumSize(Dimension D);

編輯

您尚未設置:

f.setLayout(new FlowLayout());

您需要將布局也設置為框架並注釋掉

//p0.setLayout(null);
//p1.setLayout(null);

像這樣

JFrame jf=new JFrame();
Jpanel jp=new JPanel();
jp.add(new TextField());
jf.add(jp);

set jf.setVisible(true);

關於JFrame代碼之間的區別: JFrame有一個contentPane ,它實際上是Panel,窗口中的所有內容都在其中發生-Frame僅具有此Panel,而沒有其他。 通過調用f.setContentPane(randomJPanel); 您實際上可以將contentPane設置為所需的某些面板。 我強烈建議您使用Layouts在此contentPane工作,而不是直接在JFrame中進行操作。

暫無
暫無

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

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