3

FlowLayoutをホストするバーティカルが必要ですJPanels。多くの人が の使用を提案してBoxLayoutいます。ただし、その動作はまったく同じではないことに気付きましたFlowLayout

フローレイアウト

ここに画像の説明を入力

ここに画像の説明を入力

Y軸付きBoxLayout

ここに画像の説明を入力

ここに画像の説明を入力

ご覧のとおり、FlowLayout親パネルの幅を伸ばすと、子パネルの幅は同じままです。

しかし、 ではBoxLayout、親パネルの高さを伸ばすと、その子パネルの高さが変わりました! . これは 1 column 2 rows と同様の動作をしているようGridLayoutです。これは私が望むものではありません。

これを防ぐ方法はありますか?

親パネルの上下に垂直フィラーを配置しようとしています。

new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));

しかし、それはあまり役に立ちません。親の高さを変更しても、2 つの子パネルの高さが伸びます。

4

3 に答える 3

2
  • BoxLayout(最小、最大、および優先サイズを受け入れ、この値に応じてサイズ変更)がどのように機能するかを確認してください。

  • FlowLayout と比較して (PreferredSize のみを受け入れ、子はコンテナーでサイズ変更できません)

ここに画像の説明を入力

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BoxStructAndJComponents {

    private JFrame frame;
    private JPanel intro;
    private JPanel name;

    public BoxStructAndJComponents() {
        frame = new JFrame("JFrame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JComponent newContentPane = createUI();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);
        frame.pack();
        frame.setVisible(true);
    }

    private JPanel createUI() {
        intro = new JPanel() {
            @Override
            public Dimension getMinimumSize() {
                return new Dimension(100, 100);
            }

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(100, 100);
            }

            @Override
            public Dimension getMaximumSize() {
                return new Dimension(100, 100);
            }
        };
        intro.setBackground(Color.red);
        //intro.setLabelFor(name);
        name = new JPanel() {
            @Override
            public Dimension getMinimumSize() {
                return new Dimension(100, 100);
            }

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(100, 100);
            }

            @Override
            public Dimension getMaximumSize() {
                return new Dimension(100, 100);
            }
        };
        name.setBackground(Color.blue);
        final JButton button = new JButton("Pick a new name...");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
            }
        });
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 10, 20));
        intro.setAlignmentX(JComponent.CENTER_ALIGNMENT);
        name.setAlignmentX(JComponent.CENTER_ALIGNMENT);
        button.setAlignmentX(JComponent.CENTER_ALIGNMENT);
        panel.add(intro);
        //panel.add(Box.createVerticalStrut(5));
        panel.add(Box.createHorizontalStrut(5));
        panel.add(name);
        panel.add(Box.createRigidArea(new Dimension(150, 10)));
        panel.add(button);
        return panel;
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                BoxStructAndJComponents listDialogRunner = new BoxStructAndJComponents();
            }
        });
    }
}
于 2013-09-11T08:28:27.000 に答える