我想繪製一個紅綠燈。基本上是一個長方形的框架,附有4個按鈕。我遵循了我所得到的指示,但我必須錯過一些東西。當我運行該程序,我得到:Java圖形不顯示
Exception in thread "main" java.lang.NullPointerException
at TrafficLightPanel.<init>(TrafficLightPanel.java:14)
at TrafficLightApp.main(TrafficLightApp.java:11)
任何幫助將是巨大的^^
主要方法
import javax.swing.*;
public class TrafficLightApp {
public static void main(String[] args) {
JFrame frame = new JFrame("Traffic Lights");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
TrafficLightPanel lightPanel = new TrafficLightPanel(); //line 11
frame.add(lightPanel);//JFrame containing instance of TrafficLightPanel class
}
}
支持類
import javax.swing.*;
import java.awt.*;
public class TrafficLightPanel extends JPanel{
private JButton red,amber,green,change;
private JLabel buttonLabel,lastPressed;
private JPanel buttonPanel;
public TrafficLightPanel(){
//JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setSize(200,400);
panel.setBackground(Color.blue);
buttonPanel.setSize(80,390); //line 14
buttonPanel.setBackground(Color.white);
buttonPanel.add(red);
buttonPanel.add(amber);
buttonPanel.add(green);
buttonPanel.add(change);
buttonPanel.add(buttonLabel);
panel.add(buttonPanel);
}
}
'buttonPanel.setSize(80,390);'這可能會被佈局管理器忽略。一般提示:除非更改功能,否則不要擴展「JPanel」。問題描述表明你打算爲一個面板進行自定義繪畫,但它可能沒有任何自己的「孩子」控制。該自定義繪畫面板可以通過重寫'getPreferredSize()'來提示***大小,然後將其添加到其他控件並將其添加到「父」面板(同樣只是一個實例,而不是擴展),並將父容器添加到GUI。 'frame.setVisible(true);'應該在frame.pack()之後立即。 –