2015-07-28 50 views
1

我试图在JList中显示stringsarray,然后使用Java Swing将其添加到JPanel。我在Jlists中没有显示数据的问题,但是我想删除允许用户选择Jlist中的项目的默认属性。我试图简单地向用户显示数据。不幸的是,我无法找到允许我禁用此功能的属性。我所指的选择属性的示例可以在1中看到。禁用JList单元格选择属性

也许我用错了Java Swing组件来显示这个数据,但我有研究JTextAreaJTable等,以及JList似乎符合我的需要。任何帮助深表感谢。

公共静态的JComponent createList(ArrayList的inputData){

JPanel panel = new JPanel(false); 
    panel.setLayout(new FlowLayout(FlowLayout.LEFT)); 
    panel.setBackground(Color.white); 

    String[] displayData= {Data.get(0),Data.get(1),Data.get(2),Data.get(3)}; 
    JList<String> displayDataList= new JList<String>(displayData); 
    displayDataList.setFont(sysDataList.getFont().deriveFont(Font.PLAIN)); 
    panel.add(displayDataList); 

    return panel; 
} 
+0

显示你的代码,你试图解决这个问题。 –

+0

在这个网站上也有很多解决方案,像这样复制已经有重复的http://stackoverflow.com/questions/17863780/make-jlist-values-unselectable。 – milez

回答

2

我通过实现NoSelection SelectionModel来实现这一点。 SelectionModels负责处理选择事件,看到ListSelectionModel示例:

public final class Main { 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     JFrame frame = new JFrame(); 
     frame.setSize(500, 500); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     JList<Object> view = new JList<Object>(); 
     view.setSelectionModel(new NoSelectionModel()); 
     view.setListData(new Object[] {"String 1 ", "String 2"}); 
     frame.getContentPane().add(new JScrollPane(view)); 

     frame.setVisible(true); 
    } 
    }); 
} 

private static class NoSelectionModel extends DefaultListSelectionModel { 

    @Override 
    public void setAnchorSelectionIndex(final int anchorIndex) {} 

    @Override 
    public void setLeadAnchorNotificationEnabled(final boolean flag) {} 

    @Override 
    public void setLeadSelectionIndex(final int leadIndex) {} 

    @Override 
    public void setSelectionInterval(final int index0, final int index1) { } 
} 
} 

你要记住:如果用户不能选择什么,他也不能复制粘贴任何东西。而且,键盘的滚动行为有点奇怪。

+0

- 这工作完美,非常感谢。我只需要调用以下代码: displayDataList.setSelectionModel(new NoSelectionModel()); – Jonathandgorman

+0

如果您在选择项目时按住Ctrl键,此解决方案不起作用。有没有办法防止这种情况发生? – Jack

+0

是的,有解决方案是在这篇文章的接受答案的评论:https://stackoverflow.com/questions/17863780/make-jlist-values-unselectable ---我们需要设置模式SINGLE_INTERVAL_SELECTION为列表。 – Jack

0

JList应该是可选择的。注意在ListSelectionModel接口中不存在NO_SELECTION

如果您只想显示项目,最好的选择是在面板中显示JLabel的列表,而不是使用JList

+1

真的吗?如果要显示相当多的对象ArrayList,您甚至会使用数百个JLabel? – Jack