开发者社区> 问答> 正文

Java-IntelliJ-JScrollPane中的JList

你好,

我对SOF的第一个问题。我在使用JScrollPane和JList时遇到问题。我已经用getter为列表创建了类以获取列表对象

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());
    }
}

问题来源:Stack Overflow

展开
收起
montos 2020-03-21 23:45:14 801 0
1 条回答
写回答
取消 提交回答
  • frame.add(scrollPane.getViewport().add(list.getList())
    

    这不是将组件添加到视口的方式。

    你用:

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

    或者,甚至更容易的是在创建JScrollPane时添加组件。

    JScrollPane scrollPane = new JScrollPane(...);
    

    阅读Swing教程中有关如何使用列表的部分,以获取更多信息和工作示例。

    回答来源:Stack Overflow

    2020-03-21 23:47:05
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载