我正在创建一个包含三个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);
}
下图显示了结果:
问题:
1)我应该做什么才能在开始时强制我的框架如下所示:
2)我将帧的大小更改为更大的帧(帧应该可调整大小),然后我尝试回到较小的大小,文本框不会调整大小(不要变小) )。我该怎么解决这个问题?我希望他们能够调整框架大小。
答案 0 :(得分:1)
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);
}