如何使 JButton 只有在活动时才有边框
How to make a JButton have a border only when active
我正在用 Java Swing 制作绘画工具。我在右侧有一个面板,显示所有颜色并让用户在它们之间进行选择。我正在尝试在当前所选颜色的按钮周围显示一个边框。
事实上,当我选择颜色时,我在按钮周围创建了一个永久边框。
我正在努力解决的问题是临时设置边界。我的意思是当用户按下另一个按钮时不再使用该颜色时,我希望它消失。这是我的代码的样子
final JButton blueKnapp = new JButton();
blueKnapp.setBackground(Color.BLUE);
blueKnapp.setSize(20, 30 );
this.add(blueKnapp);
blueKnapp.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
blueKnapp.setBorder(new LineBorder(Color.BLACK, 3));
parent.changeColor(Color.BLUE);
}
});
正如 Andrew Thompson 所指出的,覆盖 paint()
方法是不好的做法,应该使用 paintComponent()
方法来完成。
同样,仅使用焦点绘画可以更好地完成同样的工作。
您可以覆盖按钮的 paintComponent-method 并添加按钮焦点检查。如果它有焦点,则将边框设置为绘制,否则将其设置为不绘制。
可能看起来像这样:
JButton blueKnapp = new JButton()
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.setBorderPainted(this.hasFocus());
}
};
blueKnapp.addActionListener((evt) -> {
// set the border to either black or blue randomly.
// replace this with your "color picker color" probably.
blueKnapp.setBorder(new LineBorder(Math.random() < 0.5 ? Color.BLACK : Color.BLUE, 3));
});
我正在用 Java Swing 制作绘画工具。我在右侧有一个面板,显示所有颜色并让用户在它们之间进行选择。我正在尝试在当前所选颜色的按钮周围显示一个边框。
事实上,当我选择颜色时,我在按钮周围创建了一个永久边框。
我正在努力解决的问题是临时设置边界。我的意思是当用户按下另一个按钮时不再使用该颜色时,我希望它消失。这是我的代码的样子
final JButton blueKnapp = new JButton();
blueKnapp.setBackground(Color.BLUE);
blueKnapp.setSize(20, 30 );
this.add(blueKnapp);
blueKnapp.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
blueKnapp.setBorder(new LineBorder(Color.BLACK, 3));
parent.changeColor(Color.BLUE);
}
});
正如 Andrew Thompson 所指出的,覆盖 paint()
方法是不好的做法,应该使用 paintComponent()
方法来完成。
同样,仅使用焦点绘画可以更好地完成同样的工作。
您可以覆盖按钮的 paintComponent-method 并添加按钮焦点检查。如果它有焦点,则将边框设置为绘制,否则将其设置为不绘制。 可能看起来像这样:
JButton blueKnapp = new JButton()
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
this.setBorderPainted(this.hasFocus());
}
};
blueKnapp.addActionListener((evt) -> {
// set the border to either black or blue randomly.
// replace this with your "color picker color" probably.
blueKnapp.setBorder(new LineBorder(Math.random() < 0.5 ? Color.BLACK : Color.BLUE, 3));
});