首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing小程序组件是不可逆转的,直到与

Swing小程序组件是不可逆转的,直到与
EN

Stack Overflow用户
提问于 2011-02-18 23:54:34
回答 4查看 2.4K关注 0票数 2

我正在尝试制作一个带有简单登录屏幕的小程序,如果我使用普通组件,它可以正常工作,但如果我使用swing组件,对象将不会显示,直到它被点击。我将使用常规组件,但我需要一个屏蔽的密码字段(如果有非swing版本,请让我知道)。

我试着在左上角得到一个垂直的位置。

代码语言:javascript
复制
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,项目不会显示,直到我与它们交互(点击文本字段,鼠标移到按钮上,我无法让标签显示),如果我使用普通版本,我会得到围绕标签的丑陋的灰色背景。

有没有人能帮我指出我做错了什么,才能让一切正常工作。

编辑:将小程序更改为JApplet不能解决问题。

EDIT2:增加了其他方法。

EDIT3:光标现在开始出现在用户名框中,但在与交互之前,所有内容都是不可见的。使用所有最新的建议更新代码。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-19 06:11:50

您在没有执行任何操作的情况下覆盖了paint方法。这会导致根本不绘制applet的后代。

在Swing中,您通常不应该重写paint()方法,而应该只重写paintComponent()方法(并且通常会在某个地方调用super.paintComponent(...) )。

在您的applet中,看起来您根本不需要paint方法,只需删除它即可。

票数 2
EN

Stack Overflow用户

发布于 2011-02-19 00:06:13

代码语言:javascript
复制
public class RdpApplet extends Applet {
   JButton Connect;

不要把Swing和AWT混为一谈。使用JApplet。

票数 2
EN

Stack Overflow用户

发布于 2011-02-18 23:59:23

也许,当您添加完所有内容后,在其中抛出一个validate();

http://download.oracle.com/javase/6/docs/api/java/awt/Container.html#validate%28%29

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5043457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档