2017-03-31 9 views
1

Java Swingアプリケーションでタブ付きペインを作成しようとしていますが、機能しません。JTabbedPane ArrayIndexOutOfBoundsException:0

JTabbedPanecontentpaneと設定すると、すべてうまくなります。タブを追加しようとすると、私はArrayIndexOutOfBoundsException: 0を取得します。

コンポーネントがペインに追加されますが、このエラーがスローされただけです。私のコードとエラーは以下の通りです。

コード:

// This all happens in a class which extends JFrame 

private JTabbedPane contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       ConfigBuilderWindow frame = new ConfigBuilderWindow(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public ConfigBuilderWindow() { 
    setTitle("Config Builder"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 916, 617); 
    contentPane = new JTabbedPane(); 
    contentPane.setBorder(new LineBorder(Color.BLUE, 4)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 

    contentPane.addTab("Test1", new JButton("Test1")); 
    contentPane.addTab("Test2", new JButton("Test2")); 

    setContentPane(contentPane); 
} 

エラー:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 
at javax.swing.plaf.basic.BasicTabbedPaneUI.paintTabArea(Unknown Source) 
at javax.swing.plaf.basic.BasicTabbedPaneUI.paint(Unknown Source) 
at javax.swing.plaf.metal.MetalTabbedPaneUI.paint(Unknown Source) 
at javax.swing.plaf.metal.MetalTabbedPaneUI.update(Unknown Source) 
at javax.swing.JComponent.paintComponent(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JLayeredPane.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
at java.awt.Container.paint(Unknown Source) 
at java.awt.Window.paint(Unknown Source) 
at javax.swing.RepaintManager$4.run(Unknown Source) 
at javax.swing.RepaintManager$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.access$1200(Unknown Source) 
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(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$JavaSecurityAccessImpl.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) 

私は、誰もが何が起こっているのかを知っている願っています。

+1

'SwingUtilities.invokeLater(Runnable r)'を使用して、SwingイベントスレッドでGUIを起動していますか? –

+4

ようこそスタックオーバーフロー! [ツアー](http://stackoverflow.com/tour)を見て回り、[ヘルプセンター](http://stackoverflow.com/help)、特に[どのように私に質問しますか良い質問?](http://stackoverflow.com/help/how-to-ask)と[ここで私はどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)。 [最小、完全、および検証可能な例(MCVE)]を入力してください(http://stackoverflow.com/help/mcve) –

+0

はい、私はです。それは私がしてはいけないことですか? –

答えて

4

私はなぜあなたはcontentPaneBorderLayoutを設定しているかわからない、私はtabbedPaneに変数名を変更し、この行を削除することをお勧めいたします:

tabbedPane.setLayout(new BorderLayout(0, 0)); 

これは、エラーを修正します。

タブのレイアウトを編集する場合は、そのレイアウトのJPanelを作成し、JButtonの代わりにパラメータとして渡します。脇The use of multiple JFrames, Good/Bad practice?を参照して、JFrameを拡張しない、注意してください(一般的なコンセンサスが、それは悪い習慣だと言うように注意する

もう一つは、今

代わり setBoundsが、 pack()setLocation()または setLocationRelativeToまたは setLocationByPlatform()メソッドを呼び出していません)。また、参照してください Extends JFrame vs creating it inside of class

+0

それは本当にそれを修正した、ありがとう!私はSwingとJavaのGUIには全く新しいので、それがそれを混乱させるかもしれないということを知らなかった。 –

+0

@FinnBon:実際には、JTabbedPaneが独自のレイアウトマネージャを使用するため、JTabbedPaneがタブを正しくレイアウトできないようにしています。しかし、論理的に考えると、なぜあなたはこれをやりたいのですか?将来、あなたの質問に有効な[mcve]を投稿してください。これは、コピー&ペーストして修正することなく実行できることを意味します。有効なクラスやインポートが表示されていないため、コードでは対応できません。できるだけ簡単に質問に回答できるようにすることが重要です。 (この答えに1+) –

関連する問題