首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当JScrollBar内部的JList未填满整个区域时,如何禁用JScrollPane?

当JScrollBar内部的JList未填满整个区域时,如何禁用JScrollPane?
EN

Stack Overflow用户
提问于 2014-04-16 06:54:15
回答 1查看 566关注 0票数 0

jlist只有几行时,我不希望滚动条能够向下滚动,因为没有必要。此外,我还可以单击空行,这会突出显示该行,即使该行是空的。如何禁用突出显示该行的功能?

代码语言:javascript
运行
复制
    public ProductApplication()
    {
    //WEST PANEL
    JPanel west = new JPanel(new BorderLayout());
    west.setBorder(BorderFactory.createMatteBorder(
            5, 5, 5, 5, Color.blue));
    west.add(new JTextField("Products"),
            BorderLayout.NORTH);
    pList = new JList(product);
    pList.setFixedCellHeight(20);
    pList.setFixedCellWidth(100);
    west.add(pList, BorderLayout.CENTER);
    scrollpane = new JScrollPane(pList);
    west.add(scrollpane, BorderLayout.WEST);
    add(west, BorderLayout.WEST);
EN

回答 1

Stack Overflow用户

发布于 2014-04-16 15:08:41

1)如果不需要显示JScrollBar,只需像下面这样创建JScrollPane

代码语言:javascript
运行
复制
JScrollPane jScrollPane = new JScrollPane(list);
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);

2)您可以借助ListCellRenderer来管理高亮显示能力。

尝试下一个示例:

代码语言:javascript
运行
复制
import java.awt.Component;

import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.SwingUtilities;

public class TestFrame extends JFrame {

    public TestFrame(){
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                init();
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                pack();
                setVisible(true);
            }
        });
    }

    private void init() {
        DefaultListModel<String> model;
        JList<String> l = new JList<>(model = new DefaultListModel<>());
        l.setFixedCellHeight(20);
        l.setFixedCellWidth(100);
        model.addElement("");
        for(int i=0;i<5;i++){
            model.addElement(i+"");
        }
        model.addElement("");
        model.addElement("5");
        l.setCellRenderer(getRenderer());
        JScrollPane jScrollPane = new JScrollPane(l);
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        add(jScrollPane);

    }

    private ListCellRenderer<? super String> getRenderer() {
        return new DefaultListCellRenderer(){
            @Override
            public Component getListCellRendererComponent(JList<?> list,Object value, int index, boolean isSelected,boolean cellHasFocus) {
                Component listCellRendererComponent = super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);
                if((value == null || value.toString().isEmpty()) && isSelected){
                    listCellRendererComponent.setBackground(list.getBackground());
                    ((JComponent)listCellRendererComponent).setBorder(null);
                }

                return listCellRendererComponent;
            }
        };
    }

    public static void main(String... s){
        new TestFrame();
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23095997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档