2015-07-28 94 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