[英]Why can't I draw in a JPanel?
public void display() {
pan.repaint();
fen.add(pan);
fen.addKeyListener(this);
fen.setResizable(false);
fen.setTitle("Le Jeu 2D");
img.setText("Coucou");
pan.add(img);
pan.repaint();
pan.setBackground(Color.yellow);
fen.setVisible(true);
fen.setSize(480, 272);
pan.repaint();
fen.revalidate();
}
public void paintComponent(Graphics g) {
System.out.println("zzz");
pan.paint(g);
g.setColor(Color.red);
g.drawRect(10, 10, 10, 10);
}
它沒有畫任何東西。 為什么? 我已經定義了paint component方法,所以我不明白為什么。 編輯:我編輯了我的代碼,請看一看
您不會創建Game
類的實例,也不會將其添加到JFrame
。
這是您要繪畫的“游戲”面板:
Game.java
public class Game extends JPanel {
@Override
public final void paintComponent(final Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawRect(10, 10, 10, 10);
}
@Override
public Dimension getMinimumSize() {
return new Dimension(300, 300);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
@Override
public Dimension getMaximumSize() {
return new Dimension(300, 300);
}
}
然后,您需要創建此Game面板的實例並將其添加到您的JFrame中:
GameFrame.java
public class GameFrame extends JFrame {
public GameFrame() {
setLocationRelativeTo(null);
setResizable(false);
setTitle("2D Game");
Game game = new Game();
setContentPane(game);
pack();
setVisible(true);
}
}
然后,當您創建JFrame的實例時:
范例.java
public class Example {
public static void main(String[] args) {
new GameFrame();
}
}
面板將被添加並繪制:
您永遠不會創建Game
類的實例,也永遠不會將Game
類添加到框架。 即使您確實創建了一個實例,其大小仍將是(0,0),因此將無需繪制任何內容。
基本上,您的代碼的整個結構是錯誤的。
我建議您重新開始,並從“ 自定義繪畫”的Swing教程中找到的演示代碼開始。
您的代碼的基本結構似乎很奇怪。 您可以在主控件類中實例化JFrame,即。 在這種情況下,它應該是GAME類。 然后,您可以創建一個新的JPanel類,並將其對象添加到JPanel對象中。 在JPanel類中,您可以創建所需的所有元素並設置相應的參數。 您也可以在內部類或單獨的類中添加事件偵聽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.