2015-04-04 218 views
0

我需要知道如何有效地將鼠標事件添加到JComboBox或任何其他可行的方法。我在這裏找到了一些可能的解決方案,也找到了不同的網站,但我無法實現它的工作。似乎mouseEvent不適合在JComboBox上使用,因爲它是一個複合組件。我發現了一個複合組件的可能解決方案,但也不起作用。所以下面是我使用文本字段時的代碼。我應該使用哪種方法的任何想法?謝謝如何將偵聽器事件添加到Java中的JComboBox中

private void updateReviewers() { 
     jComboBox_reviewer.addMouseListener(new MouseListener() { 

     @Override 
     public void mouseClicked(MouseEvent e) { 
      System.out.println("clicked"); 
     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
      System.out.println("pressed"); 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      System.out.println("released"); 
     } 

     @Override 
     public void mouseEntered(MouseEvent e) { 
      System.out.println("entered"); 
     } 

     @Override 
     public void mouseExited(MouseEvent e) { 
      System.out.println("exited"); 
     } 

    } 
    ); 

} 

回答

1

你應該能夠在JComboBox本身上使用addActionListener(ActionEvent e)。一旦選擇任何項目,您可以在動作偵聽器中執行任何類型的驗證。

jcomboBox.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) 
     { 
      JComboBox comboBox = (JComboBox) event.getSource(); 
      Object o = comboBox.getSelectedItem(); 
      //Any extra code 
     } 
    }); 

Ofcourse,Object可投放至所需的對象類型。

Oracle Documentation的事件有JComboBox的

+0

感謝@Juxhin,有沒有辦法被點擊下拉框中時,甚至從列表中選擇一個項目之前添加一個事件? – Bob 2015-04-04 10:32:43

+0

是的,提供的代碼將做到這一點。我會誠實地說,我不確定'Object'在調用getSelectedItem時會返回什麼(因爲你剛剛點擊了組合框並且沒有其中的項目),但是我的直覺告訴我它將返回第一個對象默認。不過,從你所說的話我不認爲你應該有問題。 – Juxhin 2015-04-04 10:34:37

+0

對不起@Juxhin,但上面的代碼只適用於我從列表中選擇一個元素。不知道我是否錯過了解這裏的某些東西,但它不適合我。 – Bob 2015-04-04 10:55:33

0

處理這是一個程序,使一個JComboBox,並有刺陣列和使用這些陣列的項目,使組合框的列表項。然後將每個項目與圖像鏈接起來。然後我們啓動Action Listener併爲每個列表項提供一個動作。 請注意,您必須將圖像保存在項目的源文件夾和類文件夾中。

package JComboBox; 

    import java.awt.*; 

    import java.awt.event.*; 

    import javax.swing.*; 

    /*<applet code="JComboBoxDemo" width=200 height=120></applet> 
    */ 

    public class JComboBoxDemo extends JApplet 
    { 

     JLabel jlab; 
     ImageIcon hourglass, digital, analog, stopwatch; 
     JComboBox <String> jcb; 
     String timepieces[] = {"Digital", "Analog", "Hourglass", "Stopwatch"}; 
     String s; 

     public void init() 
     { 
      try { 
       SwingUtilities.invokeAndWait(new Runnable() { 

        public void run() { 

         makeGUI(); 
        } 
       }); 
      } 

      catch(Exception exc) 
      { 
       System.out.println("Program can't run because of "+exc); 
      } 
     } 

     private void makeGUI() 
     { 
      setLayout(new FlowLayout()); 
      jcb = new JComboBox<String>(timepieces); 
      add(jcb); 

      jcb.addActionListener(new ActionListener() { 

       public void actionPerformed(ActionEvent ae) { 

        s = (String) jcb.getSelectedItem(); 
        jlab.setIcon(new ImageIcon(s + ".jpg")); 
       } 
      }); 

       jlab = new JLabel(new ImageIcon()); 
       add(jlab); 
     } 
    } 
相關問題