透明的JButton

Ren*_*hya 42 java swing jbutton

是否可以使JButton透明(包括边框)而不是文本?我扩展了swing的JButton并覆盖了这个:

@Override
public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g.create();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0));
    super.paint(g2);
    g2.dispose();
}
Run Code Online (Sandbox Code Playgroud)

但它使一切都透明,包括文本.谢谢.

cam*_*ckr 107

button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);
Run Code Online (Sandbox Code Playgroud)

  • 哎呀,我的答案看起来和你的一样. (2认同)
  • *“`setOpaque`救了我的命”*实际上@Birdy,这是不必要的(至少在我刚才在Windows上测试的五个PLAF中)。**正是`setContentAreaFilled`使按钮BG消失。**请参阅[此代码](/sf/answers/760358371/)作为示例。抱歉,我介入(检查手表)有点晚了,但它只是作为今天问题的重复引起了我的注意。 (2认同)

jjn*_*guy 11

以下应该做的伎俩.

public class PlainJButton extends JButton {

    public PlainJButton (String text){
        super(text);
        setBorder(null);
        setBorderPainted(false);
        setContentAreaFilled(false);
        setOpaque(false);
    }

    // sample test method
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel pane = new JPanel();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pane.add(new PlainJButton("HI!!!!"));
        frame.add(pane);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)