Java 禁用JList单元格选择属性

Java 禁用JList单元格选择属性,java,swing,selection,cell,jlist,Java,Swing,Selection,Cell,Jlist,我试图在JList中显示字符串的数组,然后使用JavaSwing将其添加到JPanel。在Jlist中显示数据没有问题,但是我想删除允许用户选择Jlist中项目的默认属性。我试图简单地向用户显示数据。不幸的是,我无法找到允许我禁用此功能的属性。我所指的选择属性的示例可以在中看到 也许我使用了错误的JavaSwing组件来显示此数据,但我有researchJTextArea,JTable等,而且JList似乎适合我的需要。非常感谢您的帮助 公共静态JComponent createList(Arr

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

也许我使用了错误的
JavaSwing
组件来显示此数据,但我有research
JTextArea
JTable
等,而且
JList
似乎适合我的需要。非常感谢您的帮助

公共静态JComponent createList(ArrayList inputData){

JPanel面板=新的JPanel(false);
面板.setLayout(新的FlowLayout(FlowLayout.LEFT));
面板.立根背景(颜色.白色);
字符串[]displayData={Data.get(0),Data.get(1),Data.get(2),Data.get(3)};
JList displayDataList=新的JList(displayData);
displayDataList.setFont(sysDataList.getFont().deriveFont(Font.PLAIN));
panel.add(displayDataList);
返回面板;
}   

JList
应该是可选择的。请注意,
ListSelectionModel
界面中没有
NO\u选择


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

我通过实现NoSelectionModel实现了这一点。SelectionModels负责处理选择事件,请参见示例:

公共最终类主{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame=新JFrame();
框架。设置尺寸(500500);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JList视图=新JList();
view.setSelectionModel(新的NoSelectionModel());
setListData(新对象[]{“字符串1”,“字符串2”});
frame.getContentPane().add(新的JScrollPane(视图));
frame.setVisible(true);
}
});
}
私有静态类NoSelectionModel扩展了DefaultListSelectionModel{
@凌驾
公共无效setAnchorSelectionIndex(最终内部anchorIndex){}
@凌驾
public void setLeadAnchorNotificationEnabled(最终布尔标志){}
@凌驾
public void setLeadSelectionIndex(最终整数leadIndex){}
@凌驾
public void set selection interval(final int index0,final int index1){}
}
} 

你必须记住:如果用户不能选择任何东西,他也不能复制粘贴任何东西。此外,键盘滚动行为有点奇怪。

显示您试图解决此问题的代码。本网站上也有许多解决方案,例如此副本已经有副本。这非常有效,非常受欢迎。我只需调用以下命令:displayDataList.setSelectionModel(newnoselectionmodel());如果在选择项目时按住Ctrl键,则此解决方案不起作用。。有什么办法可以防止这种情况发生吗?是的,有,解决办法就在这篇文章中被接受的答案的评论中:---我们需要将模式SINGLE\u INTERVAL\u SELECTION设置为list。真的吗?如果要显示大量的ArrayList对象,您甚至会使用数百个JLabel?
    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;
}   
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) { }
 }
}