0

ツールが全画面表示になったとき、または誰かが手動でサイズ変更を行ったときに、textArea のサイズを変更する必要があるスイング UI を開発しています。

私は netbeans GUI ビルダーを使用しているので、明らかにすべてが GroupLayout にあります。現在の GUI にはテキスト領域しかなく、他のコンポーネントは追加していません。したがって、JFrame>>JPanel1>>jTextArea があり、上部と両側に固定されているため、ツールのサイズを変更すると、水平方向に拡大してスペース全体を埋めますが、下部に固定されていないため、サイズを変更しても下部を埋めませんスペースがあり、下部に空白スペースが残っています..

努力しています

jPanel1.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            }
    });

私がここでやろうとしているのは、JPanel1 のサイズが変更され、サイズ変更時に変更される場合です..それを呼び出して、textArea のサイズを垂直方向にも変更する何かを行う必要があります..

これはすべて、私の質問の根拠を提供するためのものでした。今私が実際に持っているのはJpanel1です。上部には、この TextArea が両側に水平に固定されており、その下には小さな JPanel2 が片側から反対側に水平に固定されており、データを表示しています。全画面表示にすると、JPanel2 と textArea の両方が左右にサイズ変更されますが、その textArea と JPanel2 の間に垂直方向に空白が発生します。だから私が考えていたのは、textAreaの下部とJpanel2の上部の間のスペースの高さを取得することです(これも方法がわかりません)。上記の方法で、textAreaのサイズを大きくするために何かをします私が見つけた空白の高さで。

これが私のコードです:

public class NewJFrame extends javax.swing.JFrame {

/**
 * Creates new form NewJFrame
 */
public NewJFrame() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jScrollPane1 = new javax.swing.JScrollPane();
    jTextArea1 = new javax.swing.JTextArea();
    jPanel2 = new javax.swing.JPanel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTextArea1.setColumns(20);
    jTextArea1.setRows(5);
    jScrollPane1.setViewportView(jTextArea1);

    jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("MyBorder"));

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );
    jPanel2Layout.setVerticalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 30, Short.MAX_VALUE)
    );

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(57, 57, 57)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(88, 88, 88)
            .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
    );

    pack();
}// </editor-fold>//GEN-END:initComponents

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
// End of variables declaration//GEN-END:variables

}

しかし、私はこの中で何をすべきかわかりません。これに関しては他にもいくつかのスレッドがあることは知っているので、重複としてマークしないでください。他の解決策が存在する場合は、それを見つけるのを手伝ってください..

この問題の解決策をさまざまな方法で示している他のリンクを調べました。ただし、次の制約があるため、使用できません
。 1. コードを変更できない NetBeans の GUI ビルダーを使用しています。パネルなどに要素を配置したときに生成されたコンテンツ。コードのその部分はすべて自動生成されるため、変更できません。
2.私が経験した解決策はすべて、自動生成されたコードがないという共通点が1つあります。彼らはそれをゼロから構築しています。ゼロからやればできるけど、ここはそうじゃない。

生成されたコードを変更できない正確なシナリオのソリューションが欲しいのですが、サイズ変更は動的に実行できるため、一部のリスナーを呼び出してサイズを変更できます..

これについてはご容赦ください。これほど多くの制約があるため、あなたのような人々が極端な状況に置かれていることはわかっています。

4

1 に答える 1

0

あなたの問題は、layaoutmanager と netbeans gui builder に関連しているようです。別のレイアウト マネージャーを使用してみると、borderlayout が状況に非常に適しています。適切なレイアウトマネージャー (ここでは borderlayout など) を使用すると、コンポーネントのサイズ変更イベントをリッスンする必要はありません。

public class Example extends JPanel {

    public Example() {
        super(new BorderLayout());
        add(new JScrollPane(new JTextArea()), BorderLayout.CENTER);
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame();
        frame.setContentPane(new Example());
        frame.setSize(200, 200);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

編集: grouplayout の使用

public class Example extends JFrame {

    private JPanel contentPane;

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater( () -> {
            Example  frame = new Example ();
            frame.setVisible(true);
        } );
    }

    public Example () {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        setContentPane(contentPane);
        JPanel panel = new JPanel();
        JPanel panel_1 = new JPanel();
        panel_1.setBorder(new TitledBorder("JPanel 2"));
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addComponent(panel))
                .addComponent(panel_1)
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addComponent(panel)
                    .addComponent(panel_1))
        );
        panel.setLayout(new BorderLayout(0, 0));

        JTextArea textArea = new JTextArea();
        panel.add(textArea);
        contentPane.setLayout(gl_contentPane);
    }
}
于 2016-08-27T14:11:38.423 に答える