2011-12-05 28 views
2

我试图改变一个JButton的背景被点击之后。目前我的按钮位于在GridLayout(3×3),看起来像这样:更改按钮的背景被点击后(即行动后执行)

tiles.add(new JButton(new AbstractAction("") { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     this.setIcon("foo.png"); 
    } 
})); 

这是行不通的。如何从操作执行的内部操作图像的背景?

+0

BTW - 这班有一个'的setIcon(字符串)'方法?当你说它'不起作用',你的意思是'不能编译',或者..什么? –

+0

仍然不明白这一点(和某人得到了我回答的downvote的查询股价:-)你怎么认为_background_相关的_icon_? – kleopatra

回答

4

一个JToggleButton可能是非常理想的,在Swing JToolbarButton pressing

请注意,您将需要添加一些代码,以确保一个按钮,只有点击一次,如图所示。

或者你可以使用一个标准的JButton并调用AbstractButton.setDisabledIcon(Icon)。单击时禁用按钮,它将翻转到备用图标。

+0

我认为这是一个很好的解决方案,非常简单。 – John

1

您可以创建自己的监听器实现的MouseListener。这样,您可以控制按钮的背景何时发生变化(鼠标被释放,按下等)。下面是一个例子

//Add the listener to the button 
     myButton.addMouseListener(new customActionListener()); 

//Create the listener 
    class customActionListener implements MouseListener { 
     public void mouseExited(MouseEvent e) { 
     } 

     public void mouseEntered(MouseEvent e) { 
     } 

     public void mouseReleased(MouseEvent e) { 
     } 

     public void mousePressed(MouseEvent e) { 
     Icon icon = new ImageIcon("icon.gif"); 
     myButton.setIcon(icon); 

     } 

     public void mouseClicked(MouseEvent e) { 
     } 
    } 

在您要设置背景回默认,随便用点:

myButton.setIcon(new ImageIcon());

+0

为什么当ActionListener可以响应鼠标和键盘输入时,为按钮添加一个MouseListener? –

+0

我同意,但由于他们指定处理'点击',我建议MouseListener。 –