将JTextField布置为可包装的JLabel - 不受欢迎的行为

时间:2014-03-17 09:39:40

标签: java swing layout resize

我正在创建一个包含三个JTextAreas的面板,每个面板都是一个可以包装的JLabel模仿。 这里有一个示例代码:

 public static String getLoremIpsumString() {
        return "Lorem ipsum dolor sit amet, consectetur adipisicing "
                + "elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "
                + "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip "
                + "ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate "
                + "velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
                + "non proident, sunt in culpa qui officia deserunt mollit anim id est laborum";
    }

    public static void main(String[] args) {
        final JFrame frameMain = new JFrame(){
            @Override
            public Dimension getPreferredSize() {
                Dimension prefDim = super.getPreferredSize();
                prefDim.width = 600;
                return prefDim;
            }
        };
        JPanel pnlMain = new JPanel();
        JTextArea txtAreaLeft = new JTextArea(getLoremIpsumString());
        JTextArea txtAreaRight = new JTextArea(getLoremIpsumString());
        JTextArea txtAreaBottom = new JTextArea(getLoremIpsumString());

        txtAreaLeft.setWrapStyleWord(true);
        txtAreaRight.setWrapStyleWord(true);
        txtAreaBottom.setWrapStyleWord(true);
        txtAreaLeft.setLineWrap(true);
        txtAreaRight.setLineWrap(true);
        txtAreaBottom.setLineWrap(true);
        txtAreaLeft.setEditable(false);
        txtAreaRight.setEditable(false);
        txtAreaBottom.setEditable(false);

        GroupLayout layout = new GroupLayout(pnlMain);
        pnlMain.setLayout(layout);
        layout.setAutoCreateContainerGaps(true);
        layout.setAutoCreateGaps(true);
        layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(txtAreaLeft)
                    .addComponent(txtAreaRight)
                )
                .addComponent(txtAreaBottom)
        );

        layout.setVerticalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(txtAreaLeft)
                    .addComponent(txtAreaRight)
                )
                .addComponent(txtAreaBottom)
        );

        txtAreaLeft.setBackground(txtAreaLeft.getParent().getBackground());
        txtAreaRight.setBackground(txtAreaRight.getParent().getBackground());
        txtAreaBottom.setBackground(txtAreaBottom.getParent().getBackground());
        frameMain.setContentPane(pnlMain);
        frameMain.setVisible(true);
        frameMain.pack();
        frameMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

下图显示了结果:

enter image description here

问题:
1)我应该做什么才能在开始时强制我的框架如下所示:

enter image description here

2)我将帧的大小更改为更大的帧(帧应该可调整大小),然后我尝试回到较小的大小,文本框不会调整大小(不要变小) )。我该怎么解决这个问题?我希望他们能够调整框架大小。

2 个答案:

答案 0 :(得分:1)

来自How to Use GroupLayout

  

GroupLayout中每个组件的大小受三个限制   值;最小尺寸,首选尺寸和最大尺寸。这些尺寸   控制组件在布局中的大小调整方式。该   GroupLayout.addComponent(...)方法允许大小约束   指定。

您似乎只需要在以下位置指定这些约束:

.addComponent(txtAreaLeft)
                    .addComponent(txtAreaRight)
                )
                .addComponent(txtAreaBottom)

你会完成的。

答案 1 :(得分:1)

供将来使用:在elcodedocle的回答之后,我修改了一些布局大小细节。现在它起作用了:

固定主码:

public static void main(String[] args) {
        final JFrame frameMain = new JFrame(){
            @Override
            public Dimension getPreferredSize() {
                Dimension prefDim = super.getPreferredSize();
                prefDim.width = 600;
                return prefDim;
            }
        };
        JPanel pnlMain = new JPanel();

        JTextArea txtAreaLeft = new JTextArea(getLoremIpsumString(), 10, 15);
        JTextArea txtAreaRight = new JTextArea(getLoremIpsumString(), 10, 15);
        JTextArea txtAreaBottom = new JTextArea(getLoremIpsumString(), 5, 15);

        txtAreaLeft.setWrapStyleWord(true);
        txtAreaRight.setWrapStyleWord(true);
        txtAreaBottom.setWrapStyleWord(true);
        txtAreaLeft.setLineWrap(true);
        txtAreaRight.setLineWrap(true);
        txtAreaBottom.setLineWrap(true);
        txtAreaLeft.setEditable(false);
        txtAreaRight.setEditable(false);
        txtAreaBottom.setEditable(false);

        GroupLayout layout = new GroupLayout(pnlMain);
        pnlMain.setLayout(layout);
        layout.setAutoCreateContainerGaps(true);
        layout.setAutoCreateGaps(true);
        layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(txtAreaLeft, 1, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
                    .addComponent(txtAreaRight, 1, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
                )
                .addComponent(txtAreaBottom, 1, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
        );

        layout.setVerticalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                    .addComponent(txtAreaLeft)
                    .addComponent(txtAreaRight)
                )
                .addComponent(txtAreaBottom)
        );

        txtAreaLeft.setBackground(txtAreaLeft.getParent().getBackground());
        txtAreaRight.setBackground(txtAreaRight.getParent().getBackground());
        txtAreaBottom.setBackground(txtAreaBottom.getParent().getBackground());
        frameMain.setContentPane(pnlMain);
        frameMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frameMain.pack();
        frameMain.setVisible(true);
    }