java - 将 JScrollPane 添加到 JList

标签 java swing user-interface jscrollpane jlist

我有以下代码: 主要:

package PackageMain;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Main {

public static JFrame frame = new JFrame("Window");
public static PanelOne p1;
public static PanelTwo p2;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.setBounds(100, 100, 800, 600);
                p1 = new PanelOne();
                p2 = new  PanelTwo();
                frame.setVisible(true);
            } catch(Exception e){

            }
        }
    });
}

第 2 类:

package PackageMain;

import java.awt.Color; 
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class PanelOne{

public PanelOne(){
    loadScreen();
}

public void loadScreen(){
    JPanel p1 = new JPanel();
    DefaultListModel model = new DefaultListModel<String>();
    JList list = new JList<String>(model);
    //
    JScrollPane scroll = new JScrollPane(list);
    list.setPreferredSize(null);
          scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
    scroll.setViewportView(list);
    //
    list.addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent arg0) { 
            System.out.println("You selected " + list.getSelectedValue());
        }
    });
    p1.add(list);
    Main.frame.add(p1);
    Main.frame.revalidate();
    Main.frame.repaint();
    for (int i = 0; i < 100; i++){
        model.addElement("test");
    }
}

我尝试了很多方法来让 JScrollPane 出现在 JList 上,但它不想这样做。我最好的猜测是模型把事情搞砸了,但这是一个简化版本,模型需要在那里。

最佳答案

JScrollPane scroll = new JScrollPane(list);

您将 JList 添加到 JScrollPane 中,这是正确的。

p1.add(list);

但是随后您将 JList 添加到 JPanel 中,这是不正确的。一个组件只能有一个父组件,因此JList将从JScrollPane`中删除。

您需要将 JScrollPane 添加到 JPanel:

p1.add( scroll );

关于java - 将 JScrollPane 添加到 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166880/

相关文章:

java - 如何编辑可更改的图标比例?

java - 数组中的 GUI 按钮

python - 在一个函数中创建列表,然后在 python (pythonista ios) 中的另一个函数中使用它

java - 如何实现XMPP发送推送通知

java - 通过身份验证遍历网站的特定路径。网络爬虫还是标准的 HttpClient?

java - 我们如何在 Apache Camel 中的单个路径中选择 2 个文件,并同时处理它们?

java - 等待 Swing 完成更新 JProgressBar,然后再继续

java - java Canvas 上耗时

java - 初始化后如何更改JTable?

java - Mac OS X 上的 Java 运行时无法在 PATH 中找到程序