java中GUI出现的问题及解决方法

   记录学习过程中经历的点点滴滴,只为以后不犯重复的错误。
   好多次做完GUI界面时,发现一个很有趣的问题,要先调整窗口大小才会显示出组件,而不是立马显示出组件,于是乎google,才发现是在组件还未添加到面板前就将窗口(JFrame)设为可见(setVisible()),控件并不会引发重绘。解决方法很简单,只需要等所有组件都准备好以后才将JFrame的setVisible()设置为true。亦或是你很倔,非要在调用setVisible()之后添加组件,那么你也可以这样做:getContentPane().invalidate(); 
   顺便说另一个遇到的问题,在java.swing的JFrame中添加密码框和文本框组件没有全部显示。理由是JFrame的默认布局是BorderLayout,它会在BorderLayout.center位置以布满整个区域的形式显示最后一个添加上去的组件。不信用getLayout()看看JFrame的布局方式,一切将会真相大白。
   本次实验用到的源代码:


public class Xiaozujian extends JFrame {

	private JLabel loginl;
	private JLabel passwordl;
	private JTextField  login;
	private Container containter;
	private JTextArea  textarea;
	private JPasswordField  password;
	public Xiaozujian()
	{ 
		initFrame();
		init();
		//login.setText(""+getLayout());
		setVisible(true);//将这个方法放在后面,以至于所有组件立马能显示,是关键
	}
	public void initFrame()
	{
		setTitle("小组件");
		setSize(400,400);
	
		containter=getContentPane();
	//setBackground(Color.BLUE);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	}
	public void init()
	{
		loginl=new JLabel("登录名:");
		login=new JTextField(10);
		containter.add(loginl);
		containter.add(login);
		passwordl=new JLabel("密码:");
		password=new JPasswordField(10);
		containter.setLayout(new FlowLayout());//必须设置布局方式,否则不显示
		containter.add(passwordl);
		containter.add(password);
		textarea=new JTextArea(8,20);
		containter.add(new JScrollPane(textarea));
		password.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				textarea.append("登录名:"+login.getText()+"    "+"密码:"+password.getSelectedText());//getSelectedText()显示选中的
				textarea.append("\n");
		   }

		
		});
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Xiaozujian   x=new Xiaozujian ();
	}

}

尼玛,文字部分调整了后还是多出一条灰色的区域,灰常不理解,这让处女座的我怎么办

  

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值