vấn đề là các báo cáo nút là hoàn toàn mờ đục trong khi thực tế nó không phải là (do màu sắc một phần trong suốt)
but.setOpaque(false);
BTW: như bạn thấy tôi đã thay đổi tên trường để phù hợp với java đặt tên ước :-)
Sửa
arggghh .. nhỡ rằng, xin lỗi. Cần phải kiểm tra những gì chúng ta làm trong SwingX, từ đỉnh đầu của tôi, tôi sẽ nói rằng bạn cần phải ghi đè paintComponent và xử lý nền vẽ chính mình, như
/**
* @inherited <p>
*/
@Override
protected void paintComponent(Graphics g) {
if (!isOpaque() && getBackground().getAlpha() < 255) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponent(g);
}
đã không cố gắng, tuy nhiên, có thể "nhận được nhiều hơn đục" là trở lại một lần nữa với làm như vậy .. sẽ trở lại vào ngày mai
chỉnh sửa 2
okay, kiểm tra - mã thay đổi nội dung hoạt động chính xác. Vì vậy, trong bản tóm tắt: các thành phần với nền mờ
- phải báo cáo rằng họ không đục để không nhầm lẫn giữa cơ chế sơn mặc định
- phải tiến hành sơn nền và điền nó với màu nền tự (SwingX JXPanel fi không hỗ trợ rõ ràng cho một tài sản alpha)
thuận tiện cho bạn, đây là một Runnable nhỏ với sai/đúng nền side-by-side
public class TransparentButton {
public TransparentButton() {
JWindow incorrectOpaque = createWindow("incorrect opaque", true);
incorrectOpaque.setLocation(600, 600);
incorrectOpaque.setVisible(true);
JWindow correctOpaque = createWindow("correct opaque", false);
correctOpaque.setLocation(800, 600);
correctOpaque.setVisible(true);
}
private JButton createButton(final boolean opaque) {
JButton but = new JButton("Testing") {
/**
* @inherited <p>
* Overridden to take over background painting with
* transparent color.
*/
@Override
protected void paintComponent(Graphics g) {
if (!isOpaque() && getBackground().getAlpha() < 255) {
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponent(g);
}
};
but.setBackground(new Color(0, 0, 0, 100));
but.setForeground(new Color(70, 155, 255));
but.setOpaque(opaque);
return but;
}
private JWindow createWindow(String text, boolean opaque) {
JWindow window = new JWindow();
JButton but = createButton(opaque);
window.add(but);
window.add(new JLabel(""), BorderLayout.SOUTH);
window.setOpacity(0.5f);
window.setBackground(new Color(0, 0, 0, 0));
window.setSize(new Dimension(200, 100));
return window;
}
public static void main(String[] Args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TransparentButton();
}
});
}
@SuppressWarnings("unused")
private static final Logger LOG = Logger.getLogger(TransparentButton.class
.getName());
}
Để được trợ giúp tốt hơn sớm hơn, hãy đăng một [SSCCE] (http://pscode.org/sscce.html). –
Mua [Filthy Rich Clients] (http://filthyrichclients.org/) bởi Haase và Guy. Nó đi vào tất cả các chi tiết bạn cần để làm các thành phần trong suốt và sau đó một số. Trong tất cả một cuốn sách ** tuyệt vời ** cho các lập trình viên Java Swing. –