0

更新: コードを mouseclick イベント内に移動すると (つまり、initMarksScreen() を呼び出す代わりにコードを直接配置するだけです)、期待どおりに動作します。だから私の問題は、独自のメソッドでコードを呼び出すことです。これは、別のポイントまたは別のボタンで同じ手順を実行したい場合、呼び出すことができるメソッドではなく、そこにコードを直接配置する必要があることを意味しますか?


私はJavaにかなり慣れていないので、JTableを含むJScrollPaneを追加するボタンを作成しようとしています。

それは以下によって呼び出されます:

    public void mouseClicked(java.awt.event.MouseEvent evt) {
            initMarksScreen();
        }

コードは次のとおりです。

public final void initMarksScreen() {
    String[] columnNames = {"Student ID",
                            "Last Name",
                            "Firstname",
                            "Status",
                            "Degree",
                            "Candidate No.",
                            "Stage",
                            "Year",
                            "Code",
                            "Title",
                            "Grade Mode",
                            "Mark",
                            "Result"};
    Object[][] data = {
            {"100123456", "Cooper","Sheldon", "Signed Up", "BSc Physics","1201234","1","12","PH1001","Blackholes and Revelations","D",new Integer(99),"P"},
            {"100123456", "Cooper","Sheldon", "Signed Up", "BSc Physics","1201234","1","12","PH1025","Astrophysics","D",new Integer(95),"P"}
        };
    JTable tMarks = new JTable(data, columnNames);
    JScrollPane scrollPane = new JScrollPane(tMarks);
    tMarks.setFillsViewportHeight(true);
    panelCentral.add(scrollPane); --!!ERROR AT THIS LINE!!
    panelCentral.revalidate();
}   

パネルは次のように宣言されます。

private static final Container panelCentral = null;

私はJavaが初めてなので、簡単な修正があると思いますが、SSCCEを追加する必要がある場合。

ボタンをクリックするまですべてが正常に表示され、次のエラーが表示されます。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at GUI.mainScreen.initMarksScreen(mainScreen.java:312)
at GUI.mainScreen$2.mouseClicked(mainScreen.java:183)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
4

1 に答える 1

2

JPanel が初期化されていない場合panelCentralは、追加する前に初期化します

 panelCentral = new JPanel();
 panelCentral.add(scrollPane);
于 2013-01-17T10:54:40.723 に答える