繁体   English   中英

如何使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方法,并添加对按钮焦点的检查。 如果具有焦点,则将边框设置为绘制,否则将其设置为不绘制。 可能看起来像这样:

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));
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM