【发布时间】:2015-05-18 17:03:01
【问题描述】:
我的 JFrame 上有一个 JLabel 和一个带有图片背景的 JFrame。问题是虽然我的 JLabel 是不透明的,但它仍然有一个令人讨厌的灰色背景。
这是我的代码:
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainFrame extends JFrame {
private JTextField username;
private JPasswordField password;
private JLabel passwordLbl;
private JLabel usernameLbl;
private GridBagConstraints gc;
public MainFrame() {
username = new JTextField(10);
password = new JPasswordField(10);
passwordLbl = new JLabel("Password: ");
usernameLbl = new JLabel("Username: ");
usernameLbl.setOpaque(true);
passwordLbl.setOpaque(true);
setLayout(new GridBagLayout());
gc = new GridBagConstraints();
gc.weightx = 1;
gc.weighty = 1;
gc.gridx = 1;
gc.gridy = 0;
add(username, gc);
gc.gridx = 1;
gc.gridy = 1;
add(password, gc);
gc.gridx = 0;
gc.gridy = 0;
add(usernameLbl, gc);
gc.gridx = 0;
gc.gridy = 1;
add(passwordLbl, gc);
setSize(400, 600);
setLocation(400, 50);
setUndecorated(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void paint(Graphics arg0) {
Image img = getToolkit().getImage("pics/blue_and_red.jpg");
arg0.drawImage(img, 0, 0, getWidth(), getHeight(), this);
username.repaint();
password.repaint();
usernameLbl.setOpaque(true);
usernameLbl.repaint();
passwordLbl.repaint();
}
}
提前致谢。
【问题讨论】:
-
嗯.... 让它 non - 不透明。严重地。或者更好的是,甚至不要将 opaque 设置为 false,因为 non-opaque 是默认设置。
-
默认情况下它不起作用,它是非不透明的。
-
因为你的paint方法都搞砸了。哎呀。
-
不要在绘画时加载图像,而是在类的构建过程中加载一次。并且不要从绘画中调用 repaint
-
@HovercraftFullOfEels 令人沮丧的是,人们还没有准备好听取智者的建议;)
标签: java swing graphics transparency jlabel