我正在尝试使用简单的登录屏幕创建一个applet,如果我使用普通组件它可以正常工作但是如果我使用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并没有解决问题。
EDIT2: 添加了其他方法。
EDIT3: 光标现在从用户名框开始,但在与之交互之前,所有内容仍然不可见。更新了包含所有最新建议的代码。
答案 0 :(得分:2)
public class RdpApplet extends Applet {
JButton Connect;
不要将Swing与AWT混合使用。使用JApplet。
答案 1 :(得分:2)
你正在覆盖paint
方法而不做任何事情。这导致小程序的后代根本没有被绘制。
在Swing中,您通常永远不会覆盖paint()
方法,只覆盖paintComponent()
方法(通常会在某处调用super.paintComponent(...)
。)
在您的小程序中,您似乎根本不需要绘制方法,只需将其删除即可。
答案 2 :(得分:1)
也许,当你完成添加所有内容后,在其中抛出一个validate();
?
http://download.oracle.com/javase/6/docs/api/java/awt/Container.html#validate%28%29
答案 3 :(得分:1)
在EDT上没有调用Applet.init()
。因此,您需要在SwingUtilities.invokeLater()
中包含Swing组件的构造,以确保它们在EDT上运行。
public void init() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// Init code goes here
}});
}