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 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.
0 Stimmen
@camickr es kommt von eine andere Seite .