JFrame中的最后一个按钮是否设置为背景?

时间:2014-05-28 20:28:44

标签: java swing jframe jbutton

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


public class Test extends JFrame { 
    private static final long serialVersionUID = 1L; 

    public Test() { 
        super("A test"); 
        setSize(360,300);//Size of JFrame 
        setResizable(false); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
        setVisible(true);//Sets if its visible. 

        JButton num1 = new JButton("1");//Set the JButton name 
        JButton num2 = new JButton("2"); 
        JButton num3 = new JButton("3"); 

        num1.setBounds(80,70,50,50); 
        num2.setBounds(130,70,50,50); 
        num3.setBounds(180,70,50,50); 

        add(num1); 
        add(num2); 
        add(num3); 
    } 
    public static void main (String[] args) { 
        new Test().setVisible(true); 
    } 
}

这里将num3按钮设置为背景,我希望按钮对齐。这可能是一个微不足道的错误,我不确定,因为我刚开始使用JFrame。谢谢。

button3

3 个答案:

答案 0 :(得分:2)

问题

基本上,有三个部分导致了这个问题...

  1. JFrame默认使用BorderLayout。这意味着只管理添加到五个可用布局位置中任何一个的最后一个组件
  2. 在向框架添加任何内容之前调用setVisible(true)
  3. 您可以在按钮上拨打setBounds
  4. 因为组件通常按z顺序绘制(通常按FIFO顺序),并且由于代码中的优化,最后一个按钮由框架的BorderLayout控制,但另外两个按钮维护

    之前设定的界限

    非常有趣的问题

    将(S)

    1. 使用适当的布局管理器,可能是FlowLayoutGridBagLayout
    2. 尽可能地致电setVisible
    3. 查看Laying Out Components Within a Container了解详情

答案 1 :(得分:1)

这是因为布局管理器。请检查以下代码。

我使用另一个JPanel来放置所有按钮。我设置面板,因为它将有1行和3列对象。

import java.awt.GridLayout;
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel;


public class Test extends JFrame { 
    private static final long serialVersionUID = 1L; 


JPanel buttonPanel;

public Test() { 
    super("A test"); 
    setSize(360,300);//Size of JFrame 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setVisible(true);//Sets if its visible. 
    setLayout(null);

    buttonPanel = new JPanel(new GridLayout(1, 3));
    buttonPanel.setBounds(80, 70, 150, 50);
    JButton num1 = new JButton("1");//Set the JButton name 
    JButton num2 = new JButton("2"); 
    JButton num3 = new JButton("3"); 

    buttonPanel.add(num1); 
    buttonPanel.add(num2); 
    buttonPanel.add(num3); 

    add(buttonPanel);
} 


 public static void main (String[] args) { 
        new Test().setVisible(true); 
    } 
}

答案 2 :(得分:0)

好吧,永远不要使用原始放置,也不要使用布局管理器。 This is your Bible

你可以使用一些布局技巧来做到这一点。例如这一个:

首先导入布局类。

import java.awt.GridLayout;
import java.awt.BorderLayout;

通过在框架的构造函数中复制框架,使框架成为BorderLayout框架。

setLayout(new BorderLayout());

然后创建另一个JPanel并使其成为GridLayout JPanel:

JPanel panel = new JPanel(new GridLayout(1,3));
panel.add(num1);
panel.add(num2);
panel.add(num3);

参数1和3表示"正好使用1行和3列将小部件放入此JPanel"。

最后在框架的中心添加最后一个面板:

add(panel,BorderLayout.CENTER);

通过这种方式,您无法处理尺寸或精确位置,仍能按照自己的意愿行事......

(测试它复制" Test"构造函数中的所有代码)