免责声明:我是Java新手。我是Swing的新手。我相信它会显示出来。
我看了很多关于如何在jpanel上绘制的例子/教程;画布";。但它们大多具有相同的基本格式,并将所有的drawLine/drawRect/drawArc都放在paintComponent((方法中。人们似乎想把静态的东西画到jpanel上一次。但是,如果我想在程序运行时更改jpanel对象,比如绘画程序或游戏,该怎么办?
我想我需要能够访问jpanel对象,以及要绘制的内部方法。我打赌我所做的不是最佳实践,但我有以下经验:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PaintPanel extends JPanel {
public static JFrame frame;
private Graphics g = getGraphics();
public static void main(String[] args) {
frame = new JFrame();
frame.getContentPane().setBackground(new Color(32, 32, 32));
frame.setResizable(false);
frame.setBounds(1, 1, 800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
frame.setVisible(true);
frame.setLocationRelativeTo(null); // center frame on screen
PaintPanel paintPanel = new PaintPanel();
paintPanel.setBounds(10, 10, 100, 100);
paintPanel.setBackground(Color.red);
frame.add(paintPanel);
}
// constructor
public PaintPanel() {
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
}
public void DrawRect(Integer x, Integer y, Integer w, Integer h, Color color) {
g.setColor(color);
g.fillRect(x, y, w, h);
this.repaint(); // doesn't seem to do anything
}
}
这段代码产生了一个红色的面板框,但我的用户方法DrawRect((没有绘制任何内容。
- 我在一些地方读到有必要重写paintComponent((方法。如果里面什么都没有,那目的是什么
- 如何使DrawRect((方法工作
您缺少的拼图是模型对象。应该有一个外部对象来描述应该绘制的内容。例如,在游戏中,它将描述游戏的当前状态。
你的自定义组件会查看这个模型,并采取必要的步骤来绘制它。这在paintComponent和你认为适合添加的辅助方法中实现。
要制作动画,需要制作一个循环,随着时间的推移修改模型,并要求自定义组件使用repaint((重新绘制自己。