[英]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));
兩件事跳出來
FlowLayout
將使用此信息來決定如何最好地布置面板。 由於大小為0x0,因此重新繪制管理器將忽略它。 嘗試覆蓋getPreferredSize
方法並返回適當的大小,或者使用不使用首選大小的布局管理器,例如BorderLayout
paintComponent
方法必須調用super.paintComponet
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.