我有一個JList
與JScrollPane
。如果我在JList
中只有一件東西,則由於JScrollPane
而會有空的空間。如果我點擊JList
中的任何地方,它會點擊一個元素。有沒有辦法讓它只點擊元素,如果我真的點擊它?此外,我正在使用JList
的自定義渲染器添加圖像,如果這與它有任何關係。Java - JList點擊
感謝
我有一個JList
與JScrollPane
。如果我在JList
中只有一件東西,則由於JScrollPane
而會有空的空間。如果我點擊JList
中的任何地方,它會點擊一個元素。有沒有辦法讓它只點擊元素,如果我真的點擊它?此外,我正在使用JList
的自定義渲染器添加圖像,如果這與它有任何關係。Java - JList點擊
感謝
您可以檢查通過locationToIndex
被點擊的索引。
返回最接近列表的 座標系中給定位置的單元索引。要確定單元格是否實際包含指定位置,請將點與單元格的邊界進行比較,如
getCellBounds
提供的 。如果型號爲 爲空,此方法返回-1
。
不知道這是否符合你的情況,但你可以嘗試List.isFileList
屬性:
list.putClientProperty("List.isFileList", Boolean.TRUE);
這將迫使ListUI,以確保該點是一個列表項的實際範圍內(見SwingUtilities2.loc2IndexFileList) 。
但是,設置此屬性可能會改變列表的外觀。
這可以幫助你。
public class JListOperations extends javax.swing.JFrame {
private static final long serialVersionUID = 1L;
private javax.swing.JScrollPane jsp = null;
private javax.swing.JList<java.lang.String> jl = null;
public JListOperations(){
super();
}
public void initialiseComponents(){
jl = new javax.swing.JList<java.lang.String>(new java.lang.String[]{"Item 1"});
/*
* Add mouse listener which checks if the mouse click point is on the item. If not deselect the item
*/
jl.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(java.awt.event.MouseEvent mouseEvent){
if (!jl.getCellBounds(jl.getSelectedIndex(), jl.getSelectedIndex()).contains(mouseEvent.getPoint())){
jl.removeSelectionInterval(jl.getSelectedIndex(), jl.getSelectedIndex());
}
java.lang.System.out.println(jl.getSelectedIndex());
}
});
jsp = new javax.swing.JScrollPane(jl);
getContentPane().add(jsp);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(java.lang.String args[]){
JListOperations jlopFrame = new JListOperations();
jlopFrame.initialiseComponents();
jlopFrame.pack();
jlopFrame.setVisible(true);
}
}
爲了更好地提供幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-02-02 01:05:48