Java Swing按钮使它们相等

时间:2014-02-20 15:22:30

标签: java swing

import javax.swing.*;
import java.awt.*;

public class MathsTutorProgram
{
    public static void main(String[]args)
    {
        JFrame a = new JFrame(); //Create a blank window
        JPanel panel = new JPanel(); //Create a panel

        //Buttons
        JLabel welcome = new JLabel("Welome to Maths Tutor!");
        JButton lessThan = new JButton ("<");
        JButton greaterThan = new JButton (">");
        JButton equals = new JButton ("=");
        JButton askMe = new JButton ("Ask me a question!");

        //panels
        panel.add(welcome);
        panel.add(lessThan);
        panel.add(greaterThan);
        panel.add(equals);
        panel.add(askMe);
        a.setContentPane(panel); //Use panel on Window

        //sets
        a.setTitle("Maths Tutor Program"); //Change window title
        a.setSize(300,200); //Change window size
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        a.setVisible(true);

        //Border layout + Location
        BorderLayout layout = new BorderLayout();
        panel.setLayout(layout);

        panel.add("North", welcome);
        panel.add("East", equals);
        panel.add("South", askMe);
        panel.add("West", lessThan);
        panel.add("Center", greaterThan);
    }
}

我有工作java swing。我的&lt ;,&gt;和=按钮的大小不同。
中心按钮'='大于东'&gt;'按钮和西按钮'&lt;'。 我是否必须使用gridlayout或者仍然可以使用boarderlayout制作三个相同大小的中间按钮? 无论窗口大小如何,如何使这三个按钮的大小相同?

更新

//Border layout + Location
    BorderLayout layout = new BorderLayout();
    panel.setLayout(layout);
    panel.add("North", welcome);
    panel.add("South", askMe);

    JPanel buttonPanel = new JPanel(new GridLayout(1,3));
    buttonPanel.add(lessThan);
    buttonPanel.add(equals);
    buttonPanel.add(greaterThan);
    panel.add(buttonPanel); 

修正了代码 无论窗口大小如何,东,西和中心按钮(&lt;,&gt;和=)被平均到相同的大小。

3 个答案:

答案 0 :(得分:1)

将三个按钮添加到一个面板。将该面板添加到中心。您使用的BorderLayout不符合您要添加的按钮的首选大小。所以他们被拉长了。但是,如果您使用默认JPanel将其添加到FlowLayout,则按钮的首选大小将。另外,setVisible(true)应该是你做的 last

    panel.add(welcome, BorderLayout.NORTH);
    panel.add(askMe, BorderLayout.SOUTH);
    JPanel centerPanel = new JPanel();
    centerPanel.add(lessThan);
    centerPanel.add(greaterThan);
    centerPanel.add(equals);
    JPanel justToCenterPanel = new JPanel(new GridBagLayout());
    justToCenterPanel.add(centerPanel);
    panel.add(justToCenterPanel, BorderLayout.CENTER);

另请注意,不推荐使用您正在使用的add方法。请改用add(component, BorderLayout.CENTER)

enter image description here

答案 1 :(得分:0)

编辑:注意到你使用了BorderLayout太晚了。在这种情况下,请参阅上面的peeskillet答案(https://stackoverflow.com/a/21912257

非常实用的解决方案就像

greaterThan.setPreferredSize(lessThan.getPreferredSize());
equals.setPreferredSize(lessThan.getPreferredSize());

使它们与lessThan按钮一样大(或使用手动创建的自定义大小Dimension)。但您还应该考虑其他LayoutManagers。默认值(FlowLayout)没有太大的灵活性。在此示例中,您可以将三个按钮添加到JPanel buttonPanel = new JPanel(new GridLayout(1,3));左右。

答案 2 :(得分:-2)

如果您使用Eclipse IDE, 添加WindowBuilder插件并选择绝对布局,然后根据需要设置布局。 WindowBuilder是拖放式ui组件插件。