簡體   English   中英

如何將jtextfield添加到具有繪畫組件的jpanel中?

[英]How add a jtextfield to a jpanel that has paint component?

我正在做一個游戲,我想將JTextField添加到具有Paint Component的JPanel中。 我每16毫秒重新繪制一次JPanel。

我將()文本字段添加到面板上,但是當我單擊它時,它僅顯示單個幀。 然后,我嘗試repaint()文本字段,但現在它正在閃爍。

public class Screen extends JPanel {


    public Screen() {
        JTextField txt = new JTextField();
        txt.setBounds(10, 10, 300, 50);
        this.add(txt);
    }
    @Override
    public void paint(Graphics g) {
        Graphics2D g2D = (Graphics2D) g;

        g2D.setColor(Color.BLACK);
        g2D.fillRect(0, 0, this.getWidth(), this.getHeight());

        g2D.setColor(Color.WHITE);
        g2D.fillRect(0, 0, this.getWidth(), 20);

        txt.repaint();
    }
}

我想在面板頂部顯示文本字段

JTextField txt = new JTextField();

創建JTextField時,應使用如下代碼:

JTextField txt = new JTextField(10);

現在,文本字段可以計算自己的首選大小。

//txt.setBounds(10, 10, 300, 50);

不要使用setBounds()來給組件指定大小。 同樣,每個Swing組件負責確定其自己的首選大小。 然后,布局管理器將在面板上設置組件的大小/位置。

//public void paint(Graphics g) {
public void paintComponent(Graphics g) 
{
    super.paintComponent(g);

    // add custom painting here
}

不要覆蓋paint()。 通過覆蓋paintComponent()方法來完成自定義繪制。 並且該方法中的第一條語句應該是super.paintComopnent(g)

//g2D.setColor(Color.BLACK);
//g2D.fillRect(0, 0, this.getWidth(), this.getHeight());

不要繪制面板的背景。 那就是面板的工作,這就是為什么需要super.paintComponent()來確保背景被繪制的原因。

然后,在JPanel類的構造函數中,只需使用setBackground( Color.BLACK )

//txt.repaint();

永遠不要在繪畫方法中的任何組件上調用repaint()。

閱讀Swing教程“ 自定義繪畫”中的部分,以獲取工作示例,以開始使用。 使用演示代碼作為您編程的起點。 然后,您只需將JTextField添加到面板中,因此它將是顯示文本字段所需的一行代碼。

似乎您想在黑色面板上有一個JTextField。 您無需每次在paint()方法中設置面板的顏色。 而是將其添加到構造函數中:

public Screen() {
    setOpaque(true);
    setBackground(Color.BLACK);
    //... 
}

並刪除paint()方法。

另外,如果要通過setBounds()方法使用絕對定位,則應在構造函數中將布局設置為null setLayout(null) 如果使用絕對定位,則還需要明確指定面板的尺寸。 但是,我仍然建議您使用一個布局管理器,該管理器還要照顧面板大小。 有關絕對定位的更多信息,請參見這篇文章

暫無
暫無

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

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