2010-12-03 20 views

cevap

115
String[] items = {"A", "B", "C", "D"}; 
JList list = new JList(items); 

list.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent evt) { 
     JList list = (JList)evt.getSource(); 
     if (evt.getClickCount() == 2) { 

      // Double-click detected 
      int index = list.locationToIndex(evt.getPoint()); 
     } else if (evt.getClickCount() == 3) { 

      // Triple-click detected 
      int index = list.locationToIndex(evt.getPoint()); 
     } 
    } 
}); 
+20

Not mouseClicked kullanıyorsanız, söz konusu liste boş yer olup olmadığını, ve bir kullanıcı boş alana çift tıklar, bu listede son nesneyi çift tıklatır. Öğeleri içeren listede yalnızca tıklamaları algılamak isterseniz, şu şekilde kontrol edebilirsiniz: Rectangle r = list.getCellBounds (0, list.getLastVisibleIndex()); if (r! = Null && r.contains (evt.getPoint())) { int dizini = list.locationToIndex (evt.getPoint()); } –

+11

JList'i, şu anda seçili olan öğe için locationToIndex yerine sormak yeterli olmaz mıydı? yani sadece list.getSelectedIndex() öğesini çağırın. –

+0

@CookieMonster, liste çok yönlü ise işe yaramaz. –

10

Sana basit bir çözüm var biliyorum ama anahtar kurulu yanı sıra fare kullanmanızı sağlayacak daha genel bir çözüm için List Action kontrol etmek isteyebilir. Uygun GUI tasarımı, her iki yaklaşımın da kullanılmasına izin vermelidir. (Mohamed Saligh kabul tepki dayalı)

9

NetBeans

seçin JList> Etkinlikler pencere>

private void jListNicknamesMouseClicked(java.awt.event.MouseEvent evt) {            
    JList list = (JList)evt.getSource(); 
    if (evt.getClickCount() == 2) { 
     int index = list.locationToIndex(evt.getPoint()); 
     System.out.println("index: "+index); 
    } 
} 
İlgili konular