使 MouseAdapter 引用它被添加到的 JComponent
Making a MouseAdapter refer to the JComponent it's being added to
我有很多按钮,它们的大部分功能应该相同,但按下时会更改链接到按钮的不同变量(主要是颜色)。我想尽可能精简代码(而不是输入相同的内容 10 次)。
我将如何着手编写此适配器以便它可用于 button1 和 button2?
MouseAdapter customMouseAdapter = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
button1.setForeground(Color.WHITE);
}
};
button1.addMouseListener(customMouseAdapter);
button2.addMouseListener(customMouseAdapter);
你可以这样做。
public class ColourMouseAdapter extends MouseAdapter
{
private final Color colour;
private final JButton button;
public ColourMouseAdapter(JButton button, Color colour)
{
this.colour = colour;
this.button = button;
}
@Override
public void mouseClicked(MouseEvent e)
{
button.setForeground(colour);
}
}
JButton jbutton = new JButton();
jButton.addMouseListener(new ColourMouseAdapter(jbutton, Color.WHITE));
或者您可以按照其他人的建议进行此操作
public class ColourMouseAdapter extends MouseAdapter
{
private final Color colour;
public ColourMouseAdapter(Color colour)
{
this.colour = colour;
}
@Override
public void mouseClicked(MouseEvent e)
{
if(e.getSource() instanceof JButton)
{
JButton button = e.getSource();
button.setForeground(colour);
}
}
}
我有很多按钮,它们的大部分功能应该相同,但按下时会更改链接到按钮的不同变量(主要是颜色)。我想尽可能精简代码(而不是输入相同的内容 10 次)。
我将如何着手编写此适配器以便它可用于 button1 和 button2?
MouseAdapter customMouseAdapter = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
button1.setForeground(Color.WHITE);
}
};
button1.addMouseListener(customMouseAdapter);
button2.addMouseListener(customMouseAdapter);
你可以这样做。
public class ColourMouseAdapter extends MouseAdapter
{
private final Color colour;
private final JButton button;
public ColourMouseAdapter(JButton button, Color colour)
{
this.colour = colour;
this.button = button;
}
@Override
public void mouseClicked(MouseEvent e)
{
button.setForeground(colour);
}
}
JButton jbutton = new JButton();
jButton.addMouseListener(new ColourMouseAdapter(jbutton, Color.WHITE));
或者您可以按照其他人的建议进行此操作
public class ColourMouseAdapter extends MouseAdapter
{
private final Color colour;
public ColourMouseAdapter(Color colour)
{
this.colour = colour;
}
@Override
public void mouseClicked(MouseEvent e)
{
if(e.getSource() instanceof JButton)
{
JButton button = e.getSource();
button.setForeground(colour);
}
}
}