簡體   English   中英

在向JPanel添加圖形時遇到問題

[英]Having trouble adding graphics to JPanel

我已經看過網上了,但是仍然無法理解如何向JPanel添加圖形

這是我的面板類的代碼:

public class GamePanel extends JPanel {

    public GamePanel(){

    }

    public void paintComponent(Graphics g) {

        g.drawString("asd", 5, 5);
    }

}

而我的主要方法是:

public static void main(String[] args) {

    frame.setLayout(new FlowLayout());
    frame.getContentPane().setBackground(Color.WHITE);

    //i is an instance of GamePanel
    frame.add(i);

    frame.setPreferredSize(new Dimension(500, 500));
    frame.pack();
    frame.setVisible(true);

}

文本只會出現在屏幕的一小部分(這適用於我嘗試繪制的任何圖形對象)。 我究竟做錯了什么?

FlowLayout遵循組件的首選大小。 因此,重寫getPreferredSize可以為您的JPanel提供可見的大小,而不是在調用JFrame#pack后面板當前具有的默認零大小Dimension:

class GamePanel extends JPanel {

    public void paintComponent(Graphics g) {
        super.paintComponent(g); // added to paint child components
        g.drawString("asd", 5, 20);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }
}

編輯:

要消除JPanel及其包含的JFrame之間的間隙,請將垂直間隙設置為0

frame.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));

兩件事跳出來

  1. 您的“游戲”面板沒有首選大小,默認情況下為0x0。 FlowLayout將使用此信息來決定如何最好地布置面板。 由於大小為0x0,因此重新繪制管理器將忽略它。 嘗試覆蓋getPreferredSize方法並返回適當的大小,或者使用不使用首選大小的布局管理器,例如BorderLayout
  2. 您的paintComponent方法必須調用super.paintComponet

暫無
暫無

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

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