Чтобы установить задний цвет JButton, вы можете использовать setBackground(Color)
.
Если вы хотите переключить кнопку, вам нужно будет добавить кнопку ActionListener
на кнопку, чтобы при ее нажатии она менялась. Вы не необходимо использовать MouseListener
.
Что я здесь сделал, я задал логическое значение, которое переворачивается каждый раз, когда нажимается кнопка. (TRUE становится FALSE, FALSE становится TRUE при щелчке). Для этого используется XOR.
Поскольку вы хотели получить больше свойств, чем оригинальный JButton, вы можете настроить свой собственный, расширив его с JButton
.
Это позволяет вам наслаждаться преимуществами JComponents и в то же время позволяет вам добавлять свои собственные функции.
Пример моей настраиваемая кнопка:
class ToggleButton extends JButton{
private Color onColor;
private Color offColor;
private boolean isOff;
public ToggleButton(String text){
super(text);
init();
updateButtonColor();
}
public void toggle(){
isOff ^= true;
updateButtonColor();
}
private void init(){
onColor = Color.YELLOW;
offColor = Color.RED;
isOff = true;
setFont(new Font("Arial", Font.PLAIN, 40));
}
private void updateButtonColor(){
if(isOff){
setBackground(offColor);
setText("OFF");
}
else{
setBackground(onColor);
setText("ON");
}
}
}
Пример JPanel содержит настроенную кнопку:
class DrawingSpace extends JPanel{
private ToggleButton btn;
public DrawingSpace(){
setLayout(new BorderLayout());
setPreferredSize(new Dimension(200, 200));
btn = new ToggleButton("Toggle Button");
setComponents();
}
private void setComponents(){
add(btn);
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
btn.toggle(); //change button ON/OFF status every time it is clicked
}
});
}
}
Класс бегун водить код:
class ButtonToggleRunner{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
JFrame f = new JFrame("Toggle Colors");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new DrawingSpace());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
Вы пытались сначала использовать метод ** ActionPerformed ** (по умолчанию)? и каждый раз проверяйте цвет с помощью цветового приемника ** ** перед внесением каких-либо изменений? –
Я не уверен, почему вам нужен Mouse Listener, просто используйте Action Listeners для вашего JButton. – KyleKW
Чтобы лучше помочь, пожалуйста, отправьте сообщение [mcve] – Frakcool