JPanel внутри JScrollPane обрезается

1

Поэтому у меня есть JPanel в JScrollPane, который включает GridLayout, заполненный другими панелями (чтобы я мог установить их абсолютный размер). Размеры каждой из панелей и прокрутки определяются с помощью SetPreferredSize(), а прокрутка работает. Однако все, что находится ниже первоначального вида, отключено, что делает прокрутку бесполезной. Вот картина того, что я имею в виду: Изображение 174551

Здесь должны быть дополнительные поля. Как я могу убедиться, что они появляются?

Изменение: фрагмент кода:

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);
}
Теги:
swing
jscrollpane

1 ответ

0
Лучший ответ

Вероятно, ваша проблема связана с тем, что вы устанавливаете размеры или предпочтительные размеры, в частности JPanel, который хранится в окне просмотра JScrollPane. Не устанавливайте его размер. Также вы захотите избежать установки абсолютных размеров ваших подкомпонентов.

Для лучшей помощи, покажите код, желательно минимальную примерную программу.


редактировать

  • Кроме того, существуют и другие часто более эффективные способы указания желаемых размеров, включая использование свойства столбца JTextField.
  • Кроме того, интересно, действительно ли вы хотите использовать JTable для отображения табличных данных. Кажется, это было бы естественным подходом.
  • 0
    Добавлен фрагмент кода. Я установил абсолютные размеры, потому что, если бы я не сделал, панели просто сжались бы, чтобы соответствовать размеру области прокрутки. Есть ли способ избежать этого?
  • 0
    @aftrumpet: возможно, есть решение. Мне нужно больше, чем фрагмент, чтобы полностью понять это. Можно ли было создать и опубликовать минимальный пример программы ? Это дало бы вам лучший шанс понять вашу проблему и помочь вам.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню