有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java滚动条不会出现在JList上

我正在使用一个GridBagLayout并有一个JList的自定义类。JList本身如我所料显示,但滚动条没有出现。(我的数据大小也大于我的JList。)我查看了很多相关链接,所有的链接都提到了这两行,但这对我来说不起作用

JScrollPane scrollPane = new JScrollPane(list); 

add(scrollPane);

完整代码:

import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Label;
import javax.swing.*;

public class UserPart extends JFrame {
    Label messageL = new Label("Confirm an item for more options.");
    Button confirmB = new Button("Confirm");
    Button backB = new Button("Back");
    DefaultListModel<User2> model;
    public UserPart() {

        JList<User2> list = new JList<User2>();
        model = new DefaultListModel<User2>();
        for (int i = 0; i < MainActivity2.arr.size(); i++) {
            User2 u = new User2();
            u.setForShow(i);
            model.addElement(u);
        }
        // SETTING THE APPEARANCE OF THE JLIST
        list.setModel(model);
        list.setCellRenderer(new MyListCellRenderer());
        list.setLayoutOrientation(JList.VERTICAL);
        list.setPreferredSize(new Dimension(500, 750));
        //////////////////////////////////////////////    
        GridBagLayout grid = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(grid);
        setTitle("List of users");
        GridBagLayout layout = new GridBagLayout();
        this.setLayout(layout);

        gbc.gridx = 0;
        gbc.gridy = 0;
        this.add(messageL, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        this.add(list, gbc); //ADDED JLIST TO LAYOUT HERE
        JScrollPane scrollPane = new JScrollPane(list); // DEFINED SCROLL BAR HERE
        add(scrollPane); // ADDED SCROLL BAR TO LAYOUT HERE
        setSize(1000, 1500);
        setPreferredSize(getSize());
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    将约束权重(weightxweighty)设置为大于零的值-要使用所有布局-还将fill设置为BOTH。不要直接将列表添加到框架中,只需添加滚动窗格,并设置上述约束。不要将AWT组件(Label)与Swing组件混合使用,而是使用JLabel。总结如下:

    JLabel label = new JLabel("Confirm an item for more options.");
    
    JScrollPane scroll = new JScrollPane(list);
    
    GridBagConstraints gbc = new GridBagConstraints();
    
    JFrame frame = new JFrame();
    frame.setLayout(new GridBagLayout());
    gbc.gridx = 0;
    gbc.gridy = 0;
    frame.add(label, gbc);
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.fill = GridBagConstraints.BOTH;
    frame.add(scroll, gbc);