2

私はスイングレイアウトマネージャーのプロではなく、この振る舞いは私を完全に困惑させています。基本的に、NullPointerExceptionを取得せずに、JTextAreaまたはJTextPaneをMigLayoutに追加することはできません。

JPanelを拡張するクラスを作成しました。

public ComponentPanel(TestComponent testComponent) {
    setLayout(new MigLayout("", "[]", "[][][][][][]"));

    JLabel lblNewLabel = new JLabel("New label");
    add(lblNewLabel, "cell 0 0");

    JButton button = new JButton("New button");
    add(button, "cell 0 3");

    JButton btnNewButton = new JButton("New button");
    add(btnNewButton, "cell 0 5");
}

これは正常に機能します。ただし、textAreaを追加しようとすると、ビルドしようとすると例外がスローされます。

public ComponentPanel(TestComponent testComponent) {
    setLayout(new MigLayout("", "[grow]", "[][grow][][][][]"));

    JLabel lblNewLabel = new JLabel("New label");
    add(lblNewLabel, "cell 0 0");

    JTextArea textArea = new JTextArea();
    add(textArea, "cell 0 1,grow");

    JButton button = new JButton("New button");
    add(button, "cell 0 3");

    JButton btnNewButton = new JButton("New button");
    add(btnNewButton, "cell 0 5");
}

私はEclipseでWindowDesignerを使用しているので、何かがMigLayoutコンストラクターを起動していると思いますか?私はしばらくの間これに頭を悩ませてきました、そして私が理解することができたのは、textAreaまたはtextPanesを追加すると次の例外が発生するということだけです:

java.awt.Container.preferredSize(Unknown Source)at java.awt.Container.getPreferredSize(Unknown Source)at javax.swing.JComponent.getPreferredSize( Unknown Source)at javax.swing.JRootPane $ RootLayout.preferredLayoutSize(Unknown Source)at java.awt.Container.preferredSize(Unknown Source)at java.awt.Container.getPreferredSize(Unknown Source)at javax.swing.JComponent.getPreferredSize(不明なソース)at java.awt.BorderLayout.preferredLayoutSize(不明なソース)at java.awt.Container.preferredSize(不明なソース)at java.awt.Container.getPreferredSize(不明なソース)at net.miginfocom.swing.MigLayout.adjustWindowSize(不明なソース)net.miginfocom.swing.MigLayoutにあります。layoutContainer(Unknown Source)at net.miginfocom.swing.MigLayout.preferredLayoutSize(Unknown Source)at java.awt.Container.preferredSize(Unknown Source)at java.awt.Container.getPreferredSize(Unknown Source)atjavax.swing.JComponent。 getPreferredSize(Unknown Source)at javax.swing.BoxLayout.checkRequests(Unknown Source)at javax.swing.BoxLayout.layoutContainer(Unknown Source)at java.awt.Container.layout(Unknown Source)at java.awt.Container.doLayout(不明なソース)at java.awt.Container.validateTree(不明なソース)at java.awt.Container.validateTree(不明なソース)at java.awt.Container.validateTree(不明なソース)at java.awt.Container.validateTree(不明なソース)java.awt.Container.validate(Unknown Source)at java.awt.Window.show(Unknown Source)atjava.awt.Component。show(Unknown Source)at java.awt.Component.setVisible(Unknown Source)at java.awt.Window.setVisible(Unknown Source)at com.soartech.ssim.testbed.gui.TestbedApplication $ 1.run(TestbedApplication.java:25 )at java.awt.event.InvocationEvent.dispatch(Unknown Source)at java.awt.EventQueue.dispatchEventImpl(Unknown Source)at java.awt.EventQueue.access $ 000(Unknown Source)at java.awt.EventQueue $ 1.run(不明なソース)at java.awt.EventQueue $ 1.run(不明なソース)at java.security.AccessController.doPrivileged(ネイティブメソッド)at java.security.AccessControlContext $ 1.doIntersectionPrivilege(不明なソース)at java.awt.EventQueue.dispatchEvent(不明なソース)、java.awt.EventDispatchThread.pumpOneEventForFilters(不明なソース)、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(不明なソース)スレッド「AWT-EventQueue-0」の例外java.lang.NullPointerException at javax.swing.SizeRequirements.calculateTiledPositions(Unknown Source)at javax.swing.BoxLayout.layoutContainer(Unknown Source)at java.awt.Container.layout (Unknown Source)at java.awt.Container.doLayout(Unknown Source)at java.awt.Container.validateTree(Unknown Source)at java.awt.Container.validateTree(Unknown Source)at java.awt.Container.validateTree(Unknown Source)at java.awt.Container.validateTree(Unknown Source)atjava.awt。Container.validate(Unknown Source)at java.awt.Window.dispatchEventImpl(Unknown Source)at java.awt.Component.dispatchEvent(Unknown Source)at java.awt.EventQueue.dispatchEventImpl(Unknown Source)atjava.awt.EventQueue。 access $ 000(Unknown Source)at java.awt.EventQueue $ 1.run(Unknown Source)at java.awt.EventQueue $ 1.run(Unknown Source)at java.security.AccessController.doPrivileged(Native Method)at java.security.AccessControlContext $ 1.doIntersectionPrivilege(Unknown Source)at java.security.AccessControlContext $ 1.doIntersectionPrivilege(Unknown Source)at java.awt.EventQueue $ 2.run(Unknown Source)at java.awt.EventQueue $ 2.run(Unknown Source)at java.security java.security.AccessControlContext $ 1の.AccessController.doPrivileged(ネイティブメソッド)。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(不明なソース)at java.awt.EventDispatchThread.pumpEvents(不明なソース)at java.awt.EventDispatchThread.pumpEvents(不明なソース)at java.awt.EventDispatchThread.run(不明なソース)java.awt.EventDispatchThread.run(不明なソース)のEventDispatchThread.pumpEvents(不明なソース)java.awt.EventDispatchThread.run(不明なソース)のEventDispatchThread.pumpEvents(不明なソース)

4

2 に答える 2

1

MigLayout 4.0を使用すると、コードは私のコンピューターで正常に実行されます。ソースの添付ファイルを修正すると、何が起こっているのかを掘り下げてBoxLayoutより良いアイデアを得ることができるかもしれません。

ソースに実際の行番号がBoxLayout.preferredLayoutSize()ない場合、スローされる可能性があるのは、UIがBordernullインセットを返すを設定している場合だけです。これはありそうもないようですが、実験として、テキスト領域に明示的に境界線を設定してみることができます。

于 2012-01-18T04:10:12.673 に答える
0

問題は、プログラムで生成されていたため、SwingUtilitiesにパネルを作成させる必要があるということでした。

    Runnable doWorkRunnable = new Runnable() {
        public void run() {
            for(TestComponent c : Config.getComponents()){
                frame.getContentPane().add(new ComponentPanel(c));
                frame.getContentPane().add(Box.createRigidArea(new Dimension(5,0)));
            }
        }
    };
SwingUtilities.invokeLater(doWorkRunnable);

これで、問題なくMigLayoutにテキスト領域を含めることができます。

于 2012-01-18T15:53:13.243 に答える