有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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,因为我在发布这个问题时出错了


共 (3) 个答案

  1. # 1 楼答案

    试试这个:

    c.setLayout(new GridLayout(3,5));
    

    panel3=new JPanel(new GridLayout(1,7,1,1));
    
  2. # 2 楼答案

    本质上,GridLayout是为它认为需要的东西保留空间,但是因为它想要的面积比你提供的面积大,所以它会压缩所有东西

    如果我将内容窗格的布局管理器从c.setLayout(new GridLayout(7, 5));更改为c.setLayout(new BorderLayout());,我会得到

    enter image description here

    我的第一个建议是使用更好的布局。您已经将代码分解为单独的组件,这是一个良好的开端,您可以为每个部分使用不同的布局管理器来生成更好的布局

    您可能需要考虑将UI放置到一个^ {CD4>}中,如果它不适合于一个(合理的)屏幕……p>

    在可能的情况下,还应该使用JFrame#pack来调整主框架的大小,而不是setSize

    看看A Visual Guide to Layout Managers了解一些想法

    接下来,我建议您生成一个维护基本内容的自定义组件,以便可以重用

    我还鼓励您查看一下Initial Threads,并确保您的UI是在事件调度线程的上下文中构建的,以防止可能出现的问题

    我还鼓励您将按钮放入数组或某种List中,而不是创建30个命名变量。。。伊姆霍

  3. # 3 楼答案

    按照@MadProgrammer的建议,尝试对面板使用不同的布局管理器。我稍微修改一下你的代码。我为您的容器设置了^{},现在看起来更好了

    public class Form extends JFrame {
    
        private JLabel monthnym, monnym, tuesnym, wednym, thunym, frinym, satnym,
                sunnym;
        private JPanel panel1, panel2, panel3;
    
        public Form() {
            super("November");
            Container c = getContentPane();
            c.setLayout(new GridBagLayout());
            panel1 = new JPanel(new GridLayout(1, 0));
            monthnym = new JLabel("November 2013");
            panel1.add(monthnym);
    
            panel2 = new JPanel(new GridLayout(1, 0));
            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));
            for(int i =0;i<30;i++){
                JButton b = new JButton(""+i);
                panel3.add(b);
            }
    
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.insets = new Insets(5, 5, 5, 5);
            gbc.fill = GridBagConstraints.BOTH;
            gbc.gridy =0;
            c.add(panel1,gbc);
            gbc.gridy++;
            c.add(panel2,gbc);
            gbc.gridy++;
            c.add(panel3,gbc);
            pack();
            setVisible(true);
        }
    
        public static void main(String[] args) {
            Form app = new Form();
        }
    
     }
    

    enter image description here

    也可以使用pack()代替setSize(),使用setVisible(true)代替不推荐的show()