Элементы, не появляющиеся в новом фрейме в Java - PullRequest
1 голос
/ 27 апреля 2011

Я создаю JFrame, который в конечном итоге будет отображать вывод программы, в которой есть переменное количество разделов. Я проанализировал вывод, но отображение его в кадре является проблемой.

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

public class OutputPanel extends JFrame {

    public OutputPanel(Vector parsedOutput) {

    this.setTitle("Output");
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    JScrollPane scrollPane = new JScrollPane();

    Iterator<Vector> outputIter = parsedOutput.iterator();

    while(outputIter.hasNext()) {
        Vector section = outputIter.next();

        JLabel sectionLabel = new JLabel((String)section.get(0));
        System.out.println((String)section.get(0));
        scrollPane.add(sectionLabel);

    }
    this.add(scrollPane);
    this.pack();
    this.setVisible(true);

    }
}

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Вы должны использовать setViewPortView () с контейнером вместо add () для JScrollPane.

Попробуйте это.

public class OutputPanel extends JFrame {

    public OutputPanel(Vector parsedOutput) {

    this.setTitle("Output");
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    JScrollPane scrollPane = new JScrollPane();

    Iterator<Vector> outputIter = parsedOutput.iterator();
    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());
    scrollPane.setViewportView(panel);
    while(outputIter.hasNext()) {

        Vector section = outputIter.next();

        JLabel sectionLabel = new JLabel((String)section.get(0));
        System.out.println((String)section.get(0));
        panel.add(sectionLabel);

    }
    this.add(scrollPane);
    this.pack();
    this.setVisible(true);

    }
}
2 голосов
/ 27 апреля 2011

Не следует добавлять компоненты в scrollPane

scrollPane.add(sectionLabel);

, а добавлять их на отдельную панель и использовать

scrollPane = new JScrollPane(thePanel);

или

scrollPane.setViewportView(thePanel);

Пример:

import java.awt.GridLayout;
import java.util.Vector;

import javax.swing.*;

class Test {
    public static void main(String[] args) {
        new OutputPanel(null);
    }
}

class OutputPanel extends JFrame {

    public OutputPanel(Vector parsedOutput) {

        this.setTitle("Output");
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel content = new JPanel(new GridLayout(0, 1));

        for (int i = 0; i < 100; i++) {    
            JLabel sectionLabel = new JLabel("hello " + i);
            content.add(sectionLabel);
        }
        JScrollPane scrollPane = new JScrollPane(content);

        this.add(scrollPane);
        this.pack();
        this.setVisible(true);

    }
}

Производит:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...