新手菜鸟提问,关于JButton的一些思考 ...

weidu23 2013-05-07 09:51:04
先不多说,发个代码:


import javax.swing.*;
public class test {
public static void main(String [] args)
{
JFrame jf = new JFrame();
//自定义的jf的坐标和大小,保证jf一直在屏幕中央,且大小为屏幕一半大,我屏幕1280*760,好像吧
Coord_And_Size._profun_DefaultCenterAndHalf(jf);
jf.setVisible(true);
JPanel jp = new JPanel();
jf.add(jp);
JButton jb = new JButton();
jb.setSize(300, 200);//这里jb设置了大小
jp.add(jb);
}
}


注意: 这里jb设置了大小,而且设置的好大哦 !!!
但是,却没有改变一丝丝的jb大小,为什么 ?

此时,再看一个代码

import javax.swing.*;
public class test {
public static void main(String [] args)
{
JFrame jf = new JFrame();
//自定义的jf的坐标和大小,保证jf一直在屏幕中央,且大小为屏幕一半大,我屏幕1280*760,好像吧
Coord_And_Size._profun_DefaultCenterAndHalf(jf);
jf.setVisible(true);
JButton jb = new JButton("第二次");
jf.add(jb);
}
}


和上一个代码不一样,我没有在jf(即JFrame)中放入jp(即JPanel),直接把jb(即JButton)放入jf,
我没有设置jb大小,jb却占领了整个屏幕,为什么?

问:
两种不同的情况,搞得我好烦,可弄不出个所以然来,求教了,各位!
...全文
183 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weidu23 2013-05-08
  • 打赏
  • 举报
回复
引用 6 楼 qbz_96 的回复:
jp.setLayout(null);
要先将jpanel的布局管理器设置为Null,然后你就可以设置JButton的大小了,可以试试!
这额的确,谢了
weidu23 2013-05-08
  • 打赏
  • 举报
回复
引用 7 楼 zhang5059 的回复:
布局管理器,就是管理你的布局的,在布局管理器不是null的情况下你对你的控件进行的某些的操作会被他(布局管理器)给覆盖的,有个方倒是可是设置大小 getPreferredSize() 这个方法可以完成你的需求。
懂了
weidu23 2013-05-08
  • 打赏
  • 举报
回复
引用 5 楼 kiritor 的回复:
1、FlowLayout自动控制控件的大小和位置 2、貌似是有点困难呢
谢谢
weidu23 2013-05-07
  • 打赏
  • 举报
回复
引用 1 楼 kiritor 的回复:
布局情况的影响而已,后一种情况JFrame的布局方式貌似默认的方位布局 (东、南、西、北、center)默认是居中的,控件会盛满 至于具体什么情况,楼主还是得去了解下Swing的布局
JFrame默认布局为BorderLayout,JPanel默认为FlowLayout . 如果说jf的确是填满的话 ... jp里面添加jb (即:jp.add(jb) )改变不了jb的大小,我就想不通了,问题在这里 . 可否解释下,解我疑惑 ? 【注:上面代码中Coord_And_Size._profun_DefaultCenterAndHalf(jf)是我自定义的,这步代码看官可自行改掉】
LCore 2013-05-07
  • 打赏
  • 举报
回复
引用 楼主 weidu23 的回复:
先不多说,发个代码:

import javax.swing.*;
public class test {
	public	static	void	main(String [] args)
	{
		JFrame jf = new JFrame();
                //自定义的jf的坐标和大小,保证jf一直在屏幕中央,且大小为屏幕一半大,我屏幕1280*760,好像吧
		Coord_And_Size._profun_DefaultCenterAndHalf(jf);
		jf.setVisible(true);
		JPanel	jp	=	new	JPanel();
		jf.add(jp);
		JButton jb = new JButton();
		jb.setSize(300, 200);//这里jb设置了大小
		jp.add(jb);
	}
}
注意: 这里jb设置了大小,而且设置的好大哦 !!! 但是,却没有改变一丝丝的jb大小,为什么 ? 此时,再看一个代码

import javax.swing.*;
public class test {
	public	static	void	main(String [] args)
	{
		JFrame jf = new JFrame();
                //自定义的jf的坐标和大小,保证jf一直在屏幕中央,且大小为屏幕一半大,我屏幕1280*760,好像吧
		Coord_And_Size._profun_DefaultCenterAndHalf(jf);
		jf.setVisible(true);
		JButton jb = new JButton("第二次");
		jf.add(jb);
	}
}
和上一个代码不一样,我没有在jf(即JFrame)中放入jp(即JPanel),直接把jb(即JButton)放入jf, 我没有设置jb大小,jb却占领了整个屏幕,为什么? 问: 两种不同的情况,搞得我好烦,可弄不出个所以然来,求教了,各位!
布局情况的影响而已,后一种情况JFrame的布局方式貌似默认的方位布局 (东、南、西、北、center)默认是居中的,控件会盛满 至于具体什么情况,楼主还是得去了解下Swing的布局
书断华 2013-05-07
  • 打赏
  • 举报
回复
布局管理器,就是管理你的布局的,在布局管理器不是null的情况下你对你的控件进行的某些的操作会被他(布局管理器)给覆盖的,有个方倒是可是设置大小 getPreferredSize() 这个方法可以完成你的需求。
qbz_96 2013-05-07
  • 打赏
  • 举报
回复
jp.setLayout(null);
要先将jpanel的布局管理器设置为Null,然后你就可以设置JButton的大小了,可以试试!
LCore 2013-05-07
  • 打赏
  • 举报
回复
1、FlowLayout自动控制控件的大小和位置 2、貌似是有点困难呢
weidu23 2013-05-07
  • 打赏
  • 举报
回复
引用 3 楼 kiritor 的回复:
你要设置jbutton的大小的话,jpanel的布局应该设为null 之后对jbutton设定大小,并且指定其坐标的位置(相对jpanel)
呵呵,这样解决倒是不错 。 不过,我还是有两个疑惑: 1、为什么在FlowLayout里面没办法setSize() ? 2、由于swing是带有布局管理的Componenet,所以用布局管理器应该比 绝对布局 好点, 那么我非要在JPanel里面设置jb大小而不改变JPanel,有否可行的思路呢? 求解惑 ... 提前先谢谢你 ...
LCore 2013-05-07
  • 打赏
  • 举报
回复
你要设置jbutton的大小的话,jpanel的布局应该设为null
之后对jbutton设定大小,并且指定其坐标的位置(相对jpanel)
package com.kiritor;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyFrame extends JFrame {

private JPanel jPanel ;
private JButton button ;
public MyFrame() {
jPanel = new JPanel();
button = new JButton("按钮");
jPanel.setLayout(null);//要对控件设置大小,父容器布局方式为null
jPanel.add(button);
button.setBounds(60,10,80,40);//button的坐标和大小
this.add(jPanel);
this.setSize(200, 100);
this.setLocationRelativeTo(null);//center
this.setVisible(true);


}
public static void main(String[] args) {
new MyFrame();
}

}



62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧