簡體   English   中英

為什么我不能繪制JPanel?

[英]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.

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