java GUI,在面板中排列按钮
如何正确显示按钮
这是我的密码:
import javax.swing.*;
import java.awt.*;
public class cal extends JFrame
{
private JLabel monthnym, monnym,tuesnym,wednym,thunym,frinym,satnym,sunnym;
private JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,
b19,b20,b21,b22,b23,b24,b25,b26,b27,b28,b29,b30;
private JPanel panel1, panel2, panel3,panel4;
public cal()
{
super("November");
Container c = getContentPane();
c.setLayout(new GridLayout(7,5));
panel1=new JPanel(new GridLayout(1,0));
monthnym=new JLabel("November 2013");
panel1.add(monthnym);
panel2=new JPanel(new GridLayout(1,7,2,2));
sunnym=new JLabel("SUN");
monnym=new JLabel("MON");
tuesnym=new JLabel("TUE");
wednym=new JLabel("WED");
thunym=new JLabel("THU");
frinym=new JLabel("FRI");
satnym=new JLabel("SAT");
panel2.add(sunnym);
panel2.add(monnym);
panel2.add(tuesnym);
panel2.add(wednym);
panel2.add(thunym);
panel2.add(frinym);
panel2.add(satnym);
panel3=new JPanel(new GridLayout(5,7,3,3));
b1=new JButton("1");
b2=new JButton("2");
b3=new JButton("3");
b4=new JButton("4");
b5=new JButton("5");
panel3.add(b1);
panel3.add(b2);
panel3.add(b3);
panel3.add(b4);
panel3.add(b5);
//panel4=new JPanel(new GridLayout(4,7,5,5));
c.add(panel1);
c.add(panel2);
c.add(panel3);
//c.add(panel4);
setSize(500,500);
show();
}
public static void main(String[] args) {
cal app = new cal();
}
}
我编辑了我的代码好几次,但是运气不好。 我认为(x,y)中有些东西,但我没有改变
这些按钮是30,我把它改成了5,因为我在发布这个问题时出错了
# 1 楼答案
试试这个:
及
# 2 楼答案
本质上,
GridLayout
是为它认为需要的东西保留空间,但是因为它想要的面积比你提供的面积大,所以它会压缩所有东西如果我将内容窗格的布局管理器从
c.setLayout(new GridLayout(7, 5));
更改为c.setLayout(new BorderLayout());
,我会得到我的第一个建议是使用更好的布局。您已经将代码分解为单独的组件,这是一个良好的开端,您可以为每个部分使用不同的布局管理器来生成更好的布局
您可能需要考虑将UI放置到一个^ {CD4>}中,如果它不适合于一个(合理的)屏幕……p>
在可能的情况下,还应该使用
JFrame#pack
来调整主框架的大小,而不是setSize
看看A Visual Guide to Layout Managers了解一些想法
接下来,我建议您生成一个维护基本内容的自定义组件,以便可以重用
我还鼓励您查看一下Initial Threads,并确保您的UI是在事件调度线程的上下文中构建的,以防止可能出现的问题
我还鼓励您将按钮放入数组或某种
List
中,而不是创建30个命名变量。。。伊姆霍# 3 楼答案
按照@MadProgrammer的建议,尝试对面板使用不同的布局管理器。我稍微修改一下你的代码。我为您的容器设置了^{} ,现在看起来更好了
也可以使用
pack()
代替setSize()
,使用setVisible(true)
代替不推荐的show()