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组件方法,所以我不明白为什么。 编辑:我编辑了我的代码,请看一下
答案 0 :(得分:2)
您没有创建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);
}
}
然后,您需要创建此游戏面板的实例并将其添加到您的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的实例时:
<强> Example.java 强>
public class Example {
public static void main(String[] args) {
new GameFrame();
}
}
将添加面板并绘制:
答案 1 :(得分:1)
您永远不会创建Game
类的实例,也不会将Game
类添加到框架中。即使你确实创建了一个实例,大小仍然是(0,0),所以没有什么可以画的。
基本上你的代码的整个结构是错误的。
我建议你重新开始,然后在Custom Painting的Swing教程中找到演示代码。
答案 2 :(得分:-1)
您的代码的基本结构似乎很奇怪。 您可以在主控制类中实例化JFrame,即。在这种情况下它应该是GAME类。然后,您可以创建一个新的JPanel类,并将其对象添加到JPanel对象中。在JPanel类中,您可以创建所需的所有元素并设置相应的参数。您还可以在内部类或单独的类中添加事件侦听器。