我正在尝试制作一个带有简单登录屏幕的小程序,如果我使用普通组件,它可以正常工作,但如果我使用 swing 组件,则对象在单击之前不会显示。我会使用常规组件,但我需要一个屏蔽密码字段(如果有非 Swing 版本,请告诉我)。
我正在尝试将垂直位置放置在左上角。
public class RdpApplet extends JApplet {
JButton Connect;
JTextField Username;
JPasswordField Password;
JLabel UsernameLabel;
JLabel PasswordLabel;
//(Snip)
public void paint(Graphics g){
}
public void start(){
}
public void stop(){
}
public void init(){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel panel = new JPanel (new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(2,5,1,1);
gbc.weightx = 1.0;
gbc.anchor = GridBagConstraints.WEST;
gbc.gridwidth = GridBagConstraints.REMAINDER;
UsernameLabel = new JLabel("Username:");
panel.add(UsernameLabel,gbc);
Username = new JTextField(15);
panel.add(Username,gbc);
PasswordLabel = new JLabel("Password:");
panel.add(PasswordLabel,gbc);
Password = new JPasswordField(15);
panel.add(Password,gbc);
Connect = new JButton("Connect");
panel.add(Connect,gbc);
gbc.weighty = 1.0;
gbc.anchor = gbc.NORTHWEST;
setLayout(new FlowLayout(FlowLayout.LEFT));
add(panel);
validate();
panel.validate();
}});
}
//(Snip)
}
如果我使用 JButton、JTextField 和 JLabel,则在与它们交互之前,这些项目不会显示(单击文本字段,将鼠标悬停在按钮上,我无法显示标签),并且如果我使用正常的版本我在标签周围看到难看的灰色背景。
任何人都可以帮我看看我做错了什么以使一切正常工作。
编辑: 从 Applet 更改为 JApplet 并没有解决问题。
编辑2: 添加了其他方法。
编辑3: 光标现在从用户名框中开始,但在交互之前所有内容仍然不可见。使用所有最新建议更新了代码。
最佳答案
您正在覆盖 paint
方法,而没有在其中执行任何操作。这会导致小程序的后代根本不会被绘制。
在 Swing 中,您通常应该从不覆盖 paint()
方法,仅覆盖 paintComponent()
方法(并且通常会调用 super.paintComponent(...)
某处。)
在你的小程序中,看起来你根本不需要paint方法,只需删除它即可。
关于java - Swing 小程序组件在与交互之前是不可见的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043457/