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
组件来显示此数据,但我有researchJTextArea
,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) { }
}
}