Поэтому у меня есть JPanel в JScrollPane, который включает GridLayout, заполненный другими панелями (чтобы я мог установить их абсолютный размер). Размеры каждой из панелей и прокрутки определяются с помощью SetPreferredSize(), а прокрутка работает. Однако все, что находится ниже первоначального вида, отключено, что делает прокрутку бесполезной. Вот картина того, что я имею в виду:
Здесь должны быть дополнительные поля. Как я могу убедиться, что они появляются?
Изменение: фрагмент кода:
public Volume_Stacks_Builder2 () {
super("Volume Stacks Builder");
instance = this;
addKeyListener(IJ.getInstance());
setLayout(new FlowLayout());
panel = new Panel();
wList = WindowManager.getIDList();
if (wList==null) {
IJ.noImage();
//return false;
}
panel.setLayout(new GridLayout(wList.length * 3 + 3, 1));
framesC = new int[wList.length];
framesD = new int[wList.length];
frameBoxes = new JComboBox[wList.length];
diastoleSlices = new JFormattedTextField[wList.length];
cystoleSlices = new JFormattedTextField[wList.length];
String[] titles = new String[wList.length];
for (int i=0; i<wList.length; i++) {
ImagePlus imp = WindowManager.getImage(wList[i]);
titles[i] = imp!=null?imp.getTitle():"";
}
int firstStackSize = WindowManager.getImage(wList[0]).getStack().getSize();
for (int i = 0; i < wList.length; i++) {
JPanel fPanel = new JPanel();
fPanel.setMinimumSize(new Dimension(450, 25));
fPanel.setPreferredSize(new Dimension(450, 25));
fPanel.setMaximumSize(new Dimension(450, 25));
JLabel flabel = new JLabel("Frame " + (i + 1) + " image:");
flabel.setPreferredSize(new Dimension(200, 25));
fPanel.add(flabel);
frameBoxes[i] = new JComboBox(titles);
frameBoxes[i].setSelectedIndex(i);
frameBoxes[i].setPreferredSize(new Dimension(200, 25));
fPanel.add(frameBoxes[i]);
panel.add(fPanel);
JPanel dPanel = new JPanel();
dPanel.setMinimumSize(new Dimension(450, 25));
dPanel.setPreferredSize(new Dimension(450, 25));
dPanel.setMaximumSize(new Dimension(450, 25));
JLabel dLabel = new JLabel("End disastole slice: ");
dLabel.setPreferredSize(new Dimension(200, 25));
dPanel.add(dLabel);
diastoleSlices[i] = new JFormattedTextField(sliceFormat);
diastoleSlices[i].setValue(new Integer(1));
diastoleSlices[i].setPreferredSize(new Dimension(200, 25));
dPanel.add(diastoleSlices[i]);
panel.add(dPanel);
JPanel sPanel = new JPanel();
sPanel.setMinimumSize(new Dimension(450, 25));
sPanel.setPreferredSize(new Dimension(450, 25));
sPanel.setMaximumSize(new Dimension(450, 25));
JLabel sLabel = new JLabel("End systole slice: ");
sLabel.setPreferredSize(new Dimension(200, 25));
sPanel.add(sLabel);
cystoleSlices[i] = new JFormattedTextField(sliceFormat);
cystoleSlices[i].setValue(new Integer(firstStackSize / 2));
cystoleSlices[i].setPreferredSize(new Dimension(200, 25));
sPanel.add(cystoleSlices[i]);
panel.add(sPanel);
}
JPanel dtPanel = new JPanel();
dtPanel.setMinimumSize(new Dimension(450, 25));
dtPanel.setPreferredSize(new Dimension(450, 25));
dtPanel.setMaximumSize(new Dimension(450, 25));
JLabel dLabel = new JLabel("Diastole stack title:");
dLabel.setPreferredSize(new Dimension(200, 25));
dtPanel.add(dLabel);
dStackTitle = new JTextArea(titleD);
dStackTitle.setPreferredSize(new Dimension(200, 25));
dtPanel.add(dStackTitle);
panel.add(dtPanel);
JPanel stPanel = new JPanel();
stPanel.setMinimumSize(new Dimension(450, 25));
stPanel.setPreferredSize(new Dimension(450, 25));
stPanel.setMaximumSize(new Dimension(450, 25));
JLabel sLabel = new JLabel("Systole stack title:");
sLabel.setPreferredSize(new Dimension(200, 25));
stPanel.add(sLabel);
sStackTitle = new JTextArea(titleC);
sStackTitle.setPreferredSize(new Dimension(200, 25));
stPanel.add(sStackTitle);
panel.add(stPanel);
JPanel subPanel = new JPanel();
subPanel.setMinimumSize(new Dimension(450, 25));
subPanel.setPreferredSize(new Dimension(450, 25));
subPanel.setMaximumSize(new Dimension(450, 25));
JButton submit = new JButton("Submit");
submit.addActionListener(this);
submit.setPreferredSize(new Dimension(450, 25));
subPanel.add(submit);
panel.add(subPanel);
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setPreferredSize(new Dimension(450, 400));
scrollPane.setMaximumSize(new Dimension(450, 400));
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
this.add(scrollPane);
pack();
GUI.center(this);
setVisible(true);
}
Вероятно, ваша проблема связана с тем, что вы устанавливаете размеры или предпочтительные размеры, в частности JPanel, который хранится в окне просмотра JScrollPane. Не устанавливайте его размер. Также вы захотите избежать установки абсолютных размеров ваших подкомпонентов.
Для лучшей помощи, покажите код, желательно минимальную примерную программу.
редактировать