按钮和文本字段的大小不遵循我的设置

时间:2014-03-27 20:46:55

标签: java swing layout-manager

我对Java很新。我设置了JButtonJTextField的大小,但看起来它并没有采用我的变量。有人会告诉我如何解决这个问题:无论我改变变量,它看起来都一样。提前谢谢。

这是我的代码:

private static int categoryButtonWidth= 140;
private static int categoryTextFieldWidth=260;
private static int categoryHight=40;

private void setCategoryPanel(){
 //set the color label category       

 JPanel panelCategory=new JPanel();      
  panelCategory.setLayout(new FlowLayout(FlowLayout.LEADING));       


 JButton btnCategory1=new JButton("    ");    
 btnCategory_1.setSize(new Dimension ( categoryButtonWidth, categoryHight));
 btnCategory_1.setBackground(Color.red);
 btnCategory_1.addActionListener(this);   
 panelCategory.add(btnCategory_1);

 JTextField txtCategory1 = new JTextField(20);
 txtCategory_1.setSize(new Dimension (categoryTextFieldWidth, categoryHight));   
 panelCategory.add(txtCategory_1);


 JButton btnCategory_2=new JButton("    ");
 btnCategory_2.setSize(new Dimension ( categoryButtonWidth, categoryHight));      
 btnCategory_2.setBackground(Color.YELLOW);   
 btnCategory_2.addActionListener(this);
 panelCategory.add(btnCategory_2);

 JTextField txtCategory2 = new JTextField(20);
 txtCategory2.setSize(new Dimension (categoryTextFieldWidth, categoryHight));   
 panelCategory.add(txtCategory2);    
 this.add(panelCategory,  BorderLayout.NORTH);
 }

3 个答案:

答案 0 :(得分:2)

根据经验,Java布局管理器将忽略任何组件的size属性。相反,布局管理器会根据最小和最大尺寸之间的任何位置调整组件的大小,而不管根据当前布局的“最佳”设置大小。如果您确实需要强制调整大小,请在组件上同时使用.setMaximumSize().setMinimumSize()将其强制为特定大小。

private void setCategoryPanel(){
    //set the color label category       

    JPanel panelCategory=new JPanel();      
     panelCategory.setLayout(new FlowLayout(FlowLayout.LEADING));       


    JButton btnCategory1=new JButton("    ");
    Dimension btnCategory_1_Dimension = new Dimension(categoryButtonWidth, categoryHight);
    btnCategory_1.setSize(btnCategory_1_Dimension);
    btnCategory_1.setMaximumSize(btnCategory_1_Dimension);
    btnCategory_1.setMinimumSize(btnCategory_1_Dimension);
    btnCategory_1.setBackground(Color.red);
    btnCategory_1.addActionListener(this);   
    panelCategory.add(btnCategory_1);

    JTextField txtCategory1 = new JTextField(20);
    Dimension txtCategory_1_Dimension = new Dimension (categoryTextFieldWidth, categoryHight);
    txtCategory_1.setSize(txtCategory_1_Dimension);  
    txtCategory_1.setMinimumSize(txtCategory_1_Dimension);
    txtCategory_1.setMaximumSize(txtCategory_1_Dimension);
    panelCategory.add(txtCategory_1);


    JButton btnCategory_2=new JButton("    ");
    Dimension btnCategory_2_Dimension = new Dimension(categoryButtonWidth, categoryHight);
    btnCategory_2.setSize(btnCategory_2_Dimension);
    btnCategory_2.setMaximumSize(btnCategory_2_Dimension);
    btnCategory_2.setMinimumSize(btnCategory_2_Dimension);
    btnCategory_2.setSize(new Dimension ( categoryButtonWidth, categoryHight));      
    btnCategory_2.setBackground(Color.YELLOW);   
    btnCategory_2.addActionListener(this);
    panelCategory.add(btnCategory_2);

    JTextField txtCategory2 = new JTextField(20);
    Dimension txtCategory_2_Dimension = new Dimension (categoryTextFieldWidth, categoryHight);
    txtCategory_2.setSize(txtCategory_1_Dimension);  
    txtCategory_2.setMinimumSize(txtCategory_1_Dimension);
    txtCategory_2.setMaximumSize(txtCategory_1_Dimension);   
    panelCategory.add(txtCategory2);    
    this.add(panelCategory,  BorderLayout.NORTH);
}

但这通常不赞成,因为布局经理应该最了解。通常在布局管理器中严格调整大小意味着设计不当并且错误地使用布局管理器。 Java Tutorial为布局管理器提供了一些很好的建议。让一个swing布局管理器为你提供你想要的结果会很令人沮丧,但是你最终会感谢你有一个程序可以根据用户的意愿正确调整大小,而不需要大小的像素要求,特别是当你认为你的程序在不同的系统上可能会有很大的不同,所有你在像素调整方面的努力都会在瞬间消失。

答案 1 :(得分:2)

有两种方法可以控制屏幕元素的位置和大小:

  1. 直接使用setSize()setLocation()
  2. 使用布局管理器。
  3. 一旦定义了布局管理器(在您的情况下),所有设置大小的尝试都将被作为老板的布局管理器覆盖。您可以将布局管理器设置为null并尝试自己操作尺寸,但我不建议您这样做。您应该更好地学习如何离开布局管理器并使其按照您的意愿完成工作。

答案 2 :(得分:2)

为了使文本字段更大,请为其提供大量列和大字体。要使按钮更大,请使用大字体或大图标。

对于其中任何一种,我们可以通过调用setMargin(Insets)在文字或图标周围添加更多空格


另见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是)。

一般提示

Java GUI可能必须在许多平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置或大小。要组织强大的GUI组件,而是使用布局管理器,或combinations of them 1 ,以及布局填充和& white space 2 的边框。