46 Stimmen

Transparente JButton

Ist es möglich, eine JButton transparent zu machen (einschließlich der Grenze), aber nicht der Text? Ich erweitere den JButton von Swing und überschreibe dies:

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

aber es macht alles transparent, auch den Text. Danke.

0 Stimmen

Sie wollen also grundsätzlich eine JButton ohne Text?

8 Stimmen

Ich glaube, er will den JButton nur mit dem Text.

11 Stimmen

Benutzerdefiniertes Malen (falls erforderlich) erfolgt durch Überschreiben der paintComponent()-Methode, nicht der paint()-Methode.

129voto

camickr Punkte 315810
button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);

2 Stimmen

Ups, meine Antwort sieht genauso aus wie Ihre.

1 Stimmen

SetOpaque hat mir das Leben gerettet :)

1 Stimmen

button.setBorderPainted(false); kann weggelassen werden, wenn wir eine Linie um die Schaltfläche herum wünschen

13voto

jjnguy Punkte 132790

Das Folgende sollte genügen.

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

1voto

DSF.Inc Punkte 2243

Der Benutzer Ihres Programms kann Ihren Button nicht als Schaltfläche zitieren. Er kann es für ein Label halten. Also ist meine Lösung halb transparent mit erscheinendem und verschwindendem Rand.

Dieser Code ist verbessert, verbesserte Codes, besser, bessere Leistung, schöner, pro-fit.

import java.awt.Color;
import static java.awt.Color.blue;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

class Test extends JFrame {

    Test() {
        setLayout(null);

        JButton testButton = new JButton("Test_Button");
        testButton.setBounds(200, 200, 200, 20);
        testButton.setOpaque(false); // Must add
        testButton.setContentAreaFilled(false); // No fill
        testButton.setFocusable(false); // I'd like to set focusable false to the button.
        testButton.setBorderPainted(true); // I'd like to enable it.
        testButton.setBorder(null); // Border (No border for now)
        add(testButton);

        testButton.addMouseListener(new MouseAdapter(){
            @Override
            public void mouseEntered(MouseEvent e){
                testButton.setBorder(BorderFactory.createLineBorder(blue, 2,true));
                //When enter we can not know our mouse successfully entered to the button. So I'd like to add Border
            }
            @Override
            public void mouseExited(MouseEvent e){
                testButton.setBorder(null);
                //When mouse exits no border.
            }
        });

        // For a half of transparent I'd like a add JPanel behind JButton
        JPanel backPanel = new JPanel();
        backPanel.setBounds(testButton.getBounds()); // Same to buttons bounds.
        backPanel.setBackground(new Color(0, 0, 0, 50)); // Background with transeparent
        add(backPanel);

        JLabel icon = new JLabel();
        icon.setBounds(0, 0, 3840, 2160);
        icon.setIcon(new ImageIcon(getClass().getResource("wallpaper_16105238065ffea49e5ec9d2.04136813.jpeg")));
        add(icon);
        //Background image for test up it.

        testButton.addActionListener((ActionEvent e) -> {
            testButton.setBorder(null); // When mouse clicked border will dissaprear.
            System.out.println("Button clicked!");
            //For check the button works correctly.
        });

        setSize(800, 500);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Test();
    }
}

Mein Output

0 Stimmen

Sie können halb transparent durch ein JPanel verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X