5
我想将组件添加到JPanel,然后将此面板放入JScrollPane,然后将JScrollPane放入JOptionPane中。为什么JOptionPane中的JScrollPane没有显示其所有内容?
问题:仅添加了19行组件。有一个确定组件行数的for循环,如果将条件计数器更改为19或更少,则将显示所有组件的行数。
这是问题
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class DynamicGroupLayout extends JPanel
{
JButton addRecordButton;
JTextField[] FieldsArray;
JLabel[] LabelsArray;
GroupLayout layout;
JScrollPane scrollPane;
public DynamicGroupLayout()
{
addRecordButton = new JButton("add record");
layout = new GroupLayout(this);
this.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
scrollPane = new JScrollPane(this);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
scrollPane.setPreferredSize(this.getPreferredSize());
setTextFields();
showDialog();
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(400, 500);
}
private void setTextFields()
{
int num = 30; //If 19 or less, all components shown.
String[] labelsNames =
{
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
"21", "22", "23", "24", "25", "26", "27", "28", "29", "30"
};
FieldsArray = new JTextField[num];
LabelsArray = new JLabel[num];
GroupLayout.ParallelGroup parallelGroupHoriz = layout.createParallelGroup();
layout.setHorizontalGroup(layout.createSequentialGroup().addGroup(parallelGroupHoriz));
for (int i = 0; i < num; i++)
{
System.out.println(i);
LabelsArray[i] = new JLabel(labelsNames[i]);
FieldsArray[i] = new JTextField(10);
FieldsArray[i].setMaximumSize(new Dimension(200, 3));
LabelsArray[i].setLabelFor(FieldsArray[i]);
parallelGroupHoriz.addGroup(layout.createSequentialGroup()
.addComponent(LabelsArray[i])
.addComponent(FieldsArray[i]));
}
parallelGroupHoriz.addComponent(addRecordButton, GroupLayout.Alignment.CENTER);
GroupLayout.SequentialGroup sequentialGroupVert = layout.createSequentialGroup();
layout.setVerticalGroup(sequentialGroupVert);
for (int i = 0; i < num; i++)
{
sequentialGroupVert.addGroup(layout.createParallelGroup().
addComponent(LabelsArray[i])
.addComponent(FieldsArray[i]));
}
sequentialGroupVert.addComponent(addRecordButton);
for (int i = 0; i < num; i++)
{
layout.linkSize(SwingConstants.HORIZONTAL, LabelsArray[i], LabelsArray[0]);
}
}
private void showDialog()
{
JOptionPane.showOptionDialog(null, scrollPane, "Update data",
JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null,
null, null);
}
public static void main(String[] args)
{
DynamicGroupLayout d = new DynamicGroupLayout();
}
}
1为[SSCCE](http://sscce.org/);另请参阅此[问与答](http://stackoverflow.com/q/10094825/230513)。 – trashgod 2013-02-13 15:50:55
@trashgod谢谢trashgod,但我的问题是不是“如何使用GroupLayout迭代添加组件”。我已经添加了它们,但并非全部都显示出来。 – 2013-02-13 16:01:02
添加了19个以上但在视口中不可见,您可以查看是否更改为'返回新尺寸(400,900)' – oliholz 2013-02-13 16:02:04