我上了2节课:
- 1日制作一个框架(JFrame)并在其上添加一个面板(JPanel)
- 第二个制作面板并在其上绘制一个矩形(至少我认为会这样)
这是第一堂课
class Frame {
JFrame frame;
Panel panel;
void draw() {
frame = new JFrame ("qwertz");
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setSize(300,200);
panel = new Panel();
panel.setLayout(null);
panel.paint();
frame.add(panel);
}}
和第二个
class Panel extends JPanel {
void paint() {
Graphics g = getGraphics();
g.drawRect(50,50,90,70);
}}
当我从第一个类调用draw()方法时,它会向我抛出此异常:
java.lang.NullPointerException
at Panel.paint(Panel.java:8) (( g.drawRect(50,50,90,70); ))
at Frame.draw(Frame.java:15) (( panel.paint(); ))
答案 0 :(得分:2)
这不是你应该怎么画的。要绘制组件,请覆盖paintComponent(Graphics g)
的{{1}}方法,然后调用JPanel
repaint();
和
class MyPanel extends JPanel {
@Override // <-- this makes a compiler error if you typod the method name
public void paintComponent(Graphics g) {
g.drawRect(50,50,90,70);
}
}
此外,如果您只需要在此面板上绘画,我会考虑使用普通的panel = new MyPanel();
panel.setLayout(null);
panel.repaint(); // <<---- Look here! It says repaint() not paint()
frame.add(panel);
,并覆盖Component
而不是paint(Graphics g)
。 paintComponent(Graphics g)
专门针对摇摆组件。
答案 1 :(得分:1)
而不是实现paint方法,你应该实现paintComponent(Graphics g)方法。这样,您拥有的图形对象就是有效的。
答案 2 :(得分:0)
您正在尝试在将面板添加到框架之前绘制它。尝试将frame.paint();
移到frame.add(panel);
下方。此外,如果您使用Swing,则应使用JPanel而不是Panel。