Java - IntelliJ - JScrollPane 中的 JList
Java - IntelliJ - JList in JScrollPane
您好,
我关于 SOF 的第一个问题。
我对 JScrollPane 和 JList 有疑问。
我用 getter 为列表创建了 class 以获得列表对象
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;
}}
并获得 class 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()));
}}
在这种代码风格中它是有效的。列表可见但没有滚动条
frame view
第一个问题是为什么? :)
第二个问题是为什么在这种语法中,列表在框架上不可见。
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());
}
}
感谢帮助
frame.add(scrollPane.getViewport().add(list.getList())
这不是您将组件添加到视口的方式。
您使用:
frame.add(scrollPane.setViewportView(...);
或者,更简单的方法是在创建 JScrollPane 时添加组件。
JScrollPane scrollPane = new JScrollPane(...);
阅读有关 How to Use Lists 的 Swing 教程部分,了解更多信息和工作示例。
下载示例并将其用作起点。本教程中的代码将向您展示如何更好地构造您 class。
您好,
我关于 SOF 的第一个问题。 我对 JScrollPane 和 JList 有疑问。 我用 getter 为列表创建了 class 以获得列表对象
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;
}}
并获得 class 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()));
}}
在这种代码风格中它是有效的。列表可见但没有滚动条
frame view
第一个问题是为什么? :) 第二个问题是为什么在这种语法中,列表在框架上不可见。
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());
}
}
感谢帮助
frame.add(scrollPane.getViewport().add(list.getList())
这不是您将组件添加到视口的方式。
您使用:
frame.add(scrollPane.setViewportView(...);
或者,更简单的方法是在创建 JScrollPane 时添加组件。
JScrollPane scrollPane = new JScrollPane(...);
阅读有关 How to Use Lists 的 Swing 教程部分,了解更多信息和工作示例。
下载示例并将其用作起点。本教程中的代码将向您展示如何更好地构造您 class。