2013-08-16 72 views
0

我正在嘗試使用ImageIcon和addMouseListener從JFrame上的圖像製作一個buttom,該圖像將通過單擊它來替換當前圖像。從JLabel創建的圖像按鈕無法正常工作

static JPanel jp = new JPanel(); 
final JLabel jl = new JLabel(); 
final JFrame jf = new JFrame(); 

    ImageIcon image = new ImageIcon("image1.jpg"); 
    jl.setIcon(image); 
    jp.add(jl); 
    jf.add(jp); 
    jf.validate(); 

    JLabel button = new JLabel(image); 
    button.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      jl.setIcon(null); 
      ImageIcon image = new ImageIcon("image2.jpg"); 
      jl.setIcon(image); 
     } 
    }); 

GUI與image1.jpg一起顯示,但按鈕根本不起作用,我甚至無法測試從image1到image2的替換是否工作。即使我嘗試點擊窗口上顯示的image1.jpg,GUI也不會執行任何操作。

編輯:經過調整的JLabel變得現在是最終決定。其他類似的問題,這種方法應該工作,但我無法弄清楚代碼有什麼問題。

+0

你應該爲按鈕使用'ActionListener'。 –

+0

我只是想讓圖像可點擊來命令一個動作。不太確定ActionListener是否可以與JLabel一起使用。 –

+0

什麼類的類型是你的「按鈕」變量?請說明它是如何聲明和初始化的。你的標題表明它是一個JLabel,如果是這樣,變量名稱是非常具有誤導性的,因爲它表明它實際上是一個JButton或類似的東西。考慮澄清你的問題。 –

回答

0

不太確定ActionListener是否可以與JLabel一起使用。

不,您不能將ActionListener添加到JLabel。一種更簡單的方法是使一個JButton看起來像一個JL​​abel,那麼你可以將的ActionListener添加到按鈕:

JButton button = new JButton(...); 
button.setBorderPainted(false); 
button.setContentAreaFilled(false); 
button.addActionListener(...); 

但按鈕完全不

用鼠標點擊工作當爲同一個鼠標點接收到mousePressed和mouseReleased時生成。所以如果你稍微移動鼠標,事件就不會生成。而是傾聽mousePressed()事件。