Java - IntelliJ - JList в JScrollPane - PullRequest
0 голосов
/ 16 марта 2020

Здравствуйте,

Мой первый вопрос по SOF. У меня проблема с JScrollPane и JList. Я создал класс для списка с помощью метода get, чтобы получить объект списка

package frontend;

import javax.swing.*;

public class GeneratedList
{
    private JList<String> List;

    public GeneratedList() {
        DefaultListModel<String> listModel = new DefaultListModel<>();
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        listModel.addElement("1");
        List = new JList<>(listModel);
}

    public JList<String> getList() {
        return List;
    }}

И получил класс GUI для создания целого кадра.

package frontend;

import javax.swing.*;
import java.awt.*;

public class GUI
{
    JFrame frame = new JFrame("QR Generator");

    BorderLayout borderLayout = new BorderLayout();
    public static JFormattedTextField inputField = new JFormattedTextField("XX.XXXX.XX");
    JButton generateButtton = new JButton("Generate");
    JButton printButton = new JButton("Print");

    public GUI()
    {
        frame.setVisible(true);
        frame.setLayout(borderLayout);
        frame.setSize(new Dimension(200,200));

        frame.add(inputField,BorderLayout.NORTH);
        frame.add(generateButtton,BorderLayout.NORTH);

        frame.add(printButton,BorderLayout.EAST);
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setSize(200,300);
        frame.add(scrollPane.add(new GeneratedList().getList()));
    }}

В этом стиле кода это работает. Список виден, но полос прокрутки нет

вид рамки

Первый вопрос: почему? :) И второй вопрос: почему в этом синтаксисе список не виден во фрейме.

package frontend;

import javax.swing.*;
import java.awt.*;

public class GUI
{
    JFrame frame = new JFrame("QR Generator");

    BorderLayout borderLayout = new BorderLayout();
    public static JFormattedTextField inputField = new JFormattedTextField("XX.XXXX.XX");
    JButton generateButtton = new JButton("Generate");
    JButton printButton = new JButton("Print");
    JScrollPane scrollPane = new JScrollPane();
    public GUI()
    {
        frame.setVisible(true);
        frame.setLayout(borderLayout);
        frame.setSize(new Dimension(200,200));

        frame.add(inputField,BorderLayout.NORTH);
        frame.add(generateButtton,BorderLayout.NORTH);

        frame.add(printButton,BorderLayout.EAST);

        frame.add(scrollPane);
        scrollPane.add(new GeneratedList().getList());
    }
}

Спасибо за помощь

1 Ответ

1 голос
/ 17 марта 2020
frame.add(scrollPane.getViewport().add(list.getList())

Это не то, как вы добавляете компонент в область просмотра.

Вы используете:

frame.add(scrollPane.setViewportView(...);

Или еще проще добавить компонент при создании JScrollPane .

JScrollPane scrollPane = new JScrollPane(...);

Прочтите раздел из учебника Swing по Как использовать списки для получения дополнительной информации и рабочего примера.

Загрузите пример и используйте его как отправная точка. Код из учебника покажет вам, как лучше структурировать свой класс.

...