paintComponent未运行

时间:2013-12-20 01:50:44

标签: java swing graphics paintcomponent

基本上,我正在尝试对我的GUI进行测试以确保它会绘制。 这是我的课程: 游戏

public class Game {
    private static GUI gui = new GUI();

    private static int[][] pixels = new int[10][10];
    public static void main(String[] args) {

    }
    public void startGame() {
        System.out.print("start");
        gui.setGameFrame();
    }
    public static GUI getGUI() {
        return gui;
    }
    public static int[][] getGraphics() {
        return pixels;
    }
}

GUI

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

class GUI extends JPanel {
private static Game game = new Game();
private static JPanel panel = new JPanel();
private static JFrame frame = new JFrame();
final private static int FRAME_HEIGHT = 500;
final private static int FRAME_WIDTH = 500;
//Board size 25x25px
final private static int PIXEL_SIZE = 20;

public GUI () {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            setAttributes();
            makeMenu();
        }
    });
}
public static void setAttributes() {
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("");
    frame.setBackground(Color.black);
    frame.setVisible(true);
}

private static void makeMenu() {
    JButton start = new JButton("Start");
    start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            game.startGame();
        }
    });
    panel.add(start);
    frame.add(panel);
    frame.pack();
}
public void setGameFrame() {
    panel.removeAll();
    frame.getContentPane().add(Game.getGUI());
    frame.setTitle("Snake v0.1");
    frame.setSize(getPreferredSize());
}
@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.white);
    g.fillRect(5, 5, 10, 10);
}
@Override
public Dimension getPreferredSize() {
    return new Dimension(FRAME_WIDTH, FRAME_HEIGHT);
 }
public void paintGraphics() {
    int[][] pixels = Game.getGraphics();
}
}

我试图调试它,但无法追踪它无法正常运行的原因。 我相信这与以下事情有关: frame.getContentPane().add(Game.getGUI()); 但我不确定。

2 个答案:

答案 0 :(得分:2)

  

我:" Game类的目的是什么?为什么不从Gui课程中运行一切? "

     

您:"因为更多代码将涉及逻辑和事件处理,并将这些事件发送到GUI类进行更新。"

Game视为您的数据模型。使用Game类仅用于数据和数据操作,并将所有GUI过程保留在GUI类中。只需在Game课程中创建GUI课程的实例即可。从GUI课程中运行该计划,即在main课程中使用GUI方法。并从invokeLater方法运行main

答案 1 :(得分:1)

我将您的代码直接复制并粘贴到Netbeans中,似乎正在运行。

在我看来,似乎有一些图形对象覆盖在白色矩形的左上角,这就是为什么它最初没有显示出来的原因。

尝试更改fillRect()功能以填充更大的区域。 这对我有用:

g.fillRect(5, 5, 100, 100);