-2

私には3つのパネルがあり、パネル1には3つのコンポーネント(ADD、Delete、Edit)JButtonがあり、パネル2(scrollPane)にはjtableがあり、panel3には再び(5つのJTextField、5JLabels)があります。すべてのパネルをフレームに追加すると、 panel3 コンポーネントは部分的にのみ表示され、(4JTextFields) はフレーム内でのみ表示されます。パネルの場合、 frame.add(panel2,BorderLayout.SOUTH) 、 frame.add(panel3,BorderLayout.CENTER); に BorderLayout を使用しました。パネル 1、パネル 2 はすべてのコンポーネントを表示しますが、パネル 3 は部分的にしか表示しません。パネルに使用するレイアウトと、すべてのパネル(コンポーネント)に対応するためにフレームのサイズを設定する方法を正確に教えてください。明らかに?

`

          frame.add(topPanel, BorderLayout.NORTH);
        frame.add(updatePanel, BorderLayout.SOUTH);
        frame.add(middlePanel, BorderLayout.CENTER);

        frame.setVisible(true); 
        frame.setSize(850, 500);

`

4

1 に答える 1

2

使ってみてWindow#pack

サブコンポーネントの優先サイズとレイアウトに合わせて、この Window のサイズを変更します。ウィンドウの幅と高さのいずれかが setMinimumSize メソッドへの前の呼び出しで指定された最小サイズより小さい場合、ウィンドウの幅と高さは自動的に拡大されます。

ウィンドウおよび/またはその所有者がまだ表示可能になっていない場合は、適切なサイズを計算する前に両方を表示可能にします。Window は、サイズが計算された後に検証されます。

例で更新

SSCCE (実例)がなければ、問題を完全に診断することは不可能です。実演させてください...

それで、あなたの説明に基づいて、私はこれを問題なく作成できます...

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class TestPack {

    public static void main(String[] args) {
        new TestPack();
    }

    public TestPack() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TopPanel(), BorderLayout.NORTH);
                frame.add(new MiddlePanel(), BorderLayout.CENTER);
                frame.add(new UpdatePanel(), BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TopPanel extends JPanel {

        public TopPanel() {
            setBackground(Color.red);
            add(new JLabel("I'm on top"));
        }

    }

    public class MiddlePanel extends JPanel {

        public MiddlePanel() {
            setLayout(new BorderLayout());
            add(new JScrollPane(new JTable(new DefaultTableModel(new Object[]{"A", "B", "C"}, 5))));
        }

    }

    public class UpdatePanel extends JPanel {

        public UpdatePanel() {
            for (int index = 0; index < 5; index++) {
                add(new JLabel(Integer.toString(index)));
                add(new JTextField(5));
            }
            add(new JButton("Button"));
        }            
    }        
}

しかし、明らかに、あなたは何か違うことをしています。時間をかけて実際の例で質問を更新してください。そうしないと、これ以上できることはありません

于 2013-08-22T06:53:44.010 に答える