Java Can';不要让计算器JApplet GUI以有序的方式显示按钮

Java Can';不要让计算器JApplet GUI以有序的方式显示按钮,java,swing,applet,awt,Java,Swing,Applet,Awt,我一直试图让我的JApplet以有序的方式显示计算器小程序所需的所有按钮,但我似乎无法让它们都具有相同的大小,并且显示在彼此的正下方。我应该使用不同的布局还是改变整个设计?提前谢谢 import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout;

我一直试图让我的JApplet以有序的方式显示计算器小程序所需的所有按钮,但我似乎无法让它们都具有相同的大小,并且显示在彼此的正下方。我应该使用不同的布局还是改变整个设计?提前谢谢

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyCalc extends JApplet implements ActionListener{

/**
 * 
 */
protected static final long serialVersionUID = 3169756252830354073L;

private JMenuBar menuBar = new JMenuBar();
private JMenu edit = new JMenu("Edit");
private JMenu view = new JMenu("View");
private JMenu help = new JMenu("Help");

//Instantiated all JPanels used in this Applet
private JPanel[] rows = {new JPanel(), new JPanel(), new JPanel(), 
        new JPanel(), new JPanel(), new JPanel(), new JPanel()};

JTextField calc = new JTextField(1);

private JButton[] buttons = {new JButton("Backspace"), new JButton("CE"), new JButton("C"), 
        new JButton("MC"), new JButton("7"), new JButton("8"), new JButton("9"), 
        new JButton("/"), new JButton("sqrt"), new JButton("MR"), new JButton("4"), 
        new JButton("5"), new JButton("6"), new JButton("*"), new JButton("%"), 
        new JButton("MS"), new JButton("1"), new JButton("2"), new JButton("3"), 
        new JButton("-"), new JButton("1/x"), new JButton("M+"), new JButton("0"), 
        new JButton("+/-"), new JButton("."), new JButton("+"), new JButton("=")};

public void actionPerformed(ActionEvent e) {

    if(e.getSource() == buttons[0])
    {

    }

}

public void init()
{
    setName("Calculator Applet");
    menuBar.add(edit);
    menuBar.add(view);
    menuBar.add(help);
    setJMenuBar(menuBar);

    rows[0].setLayout(new BoxLayout(rows[0], BoxLayout.Y_AXIS));
    getContentPane();
    add(rows[0]);
    setSize(300, 200);

    calc.setText("0.");
    calc.setHorizontalAlignment(JTextField.RIGHT);

    for(int i = 0; i < 3; i++)
    {
        rows[2].add(buttons[i]);
    }

    for(int i = 3; i < 9; i++)
    {
        rows[3].add(buttons[i]);
    }

    for(int i = 9; i < 15; i++)
    {
        rows[4].add(buttons[i]);
    }

    for(int i = 15; i < 21; i++)
    {
        rows[5].add(buttons[i]);
    }

    for(int i = 21; i < 26; i++)
    {
        rows[6].add(buttons[i]);
    }

    rows[1].add(calc);
    rows[1].setLayout(new GridLayout());
    rows[2].setLayout(new GridLayout());
    rows[0].add(rows[1]);
    rows[0].add(rows[2]);

    for(int i = 3; i < 7; i++)
    {
        rows[0].add(rows[i]);
        rows[i].setLayout(new FlowLayout(FlowLayout.CENTER));
    }

}
导入java.awt.FlowLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.BoxLayout;
导入javax.swing.JApplet;
导入javax.swing.JButton;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
公共类MyCalc扩展JApplet实现ActionListener{
/**
* 
*/
受保护的静态最终长serialVersionUID=3169756252830354073L;
private JMenuBar menuBar=new JMenuBar();
私有JMenu edit=新JMenu(“编辑”);
私有JMenu视图=新JMenu(“视图”);
私有JMenu帮助=新JMenu(“帮助”);
//实例化此小程序中使用的所有JPanel
private JPanel[]行={new JPanel(),new JPanel(),new JPanel(),
new JPanel(),new JPanel(),new JPanel(),new JPanel()};
JTextField calc=新的JTextField(1);
私有JButton[]按钮={new JButton(“Backspace”)、new JButton(“CE”)、new JButton(“C”),
新纽扣(“MC”)、新纽扣(“7”)、新纽扣(“8”)、新纽扣(“9”),
新纽扣(“/”)、新纽扣(“sqrt”)、新纽扣(“MR”)、新纽扣(“4”),
新按钮(“5”)、新按钮(“6”)、新按钮(“*”)和新按钮(“%”),
新按钮(“MS”)、新按钮(“1”)、新按钮(“2”)、新按钮(“3”),
新按钮(“-”),新按钮(“1/x”),新按钮(“M+”),新按钮(“0”),
新的JButton(“+/-”),新的JButton(“.”),新的JButton(“+”),新的JButton(“=”)};
已执行的公共无效操作(操作事件e){
如果(例如getSource()==按钮[0])
{
}
}
公共void init()
{
setName(“计算器小程序”);
菜单栏。添加(编辑);
菜单栏。添加(视图);
菜单栏。添加(帮助);
setJMenuBar(菜单栏);
行[0].setLayout(新的BoxLayout(行[0],BoxLayout.Y_轴));
getContentPane();
添加(行[0]);
设置大小(300200);
计算设置文本(“0”);
calc.setHorizontalAlignment(JTextField.RIGHT);
对于(int i=0;i<3;i++)
{
行[2]。添加(按钮[i]);
}
对于(int i=3;i<9;i++)
{
行[3]。添加(按钮[i]);
}
对于(int i=9;i<15;i++)
{
行[4]。添加(按钮[i]);
}
对于(int i=15;i<21;i++)
{
行[5]。添加(按钮[i]);
}
对于(int i=21;i<26;i++)
{
行[6]。添加(按钮[i]);
}
行[1]。添加(计算);
行[1].setLayout(新的GridLayout());
行[2].setLayout(新的GridLayout());
行[0]。添加(行[1]);
行[0]。添加(行[2]);
对于(int i=3;i<7;i++)
{
行[0]。添加(行[i]);
行[i].setLayout(新的FlowLayout(FlowLayout.CENTER));
}
}
“但我似乎无法让它们都具有相同的大小,并显示在彼此的正下方。”

通常,这会突出显示
GridLayout
。与其使用两个
BoxLayout
(一个垂直,一个水平),只需使用
GridLayout(4,6)
(用于数字按钮)。请记住,按钮的大小将是最大按钮(即sqrt)的大小

此外,我还建议不要像现在这样将面板保存在数组中。很难按照添加所有内容的流程进行操作。请为面板(以及所有组件)指定有意义的名称,这些名称都是自文档化的

有关布局管理器的一般知识,请查看

我重构了您的代码,使其能够作为小程序或独立框架运行。我还将所有组件包装在一个面板中,并将内容窗格的布局管理器设置为
GridBagLayout
,因此,如果调整框架的大小,一切都会变得一团糟

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class MyCalc extends JApplet implements ActionListener {

    /**
 * 
 */
    protected static final long serialVersionUID = 3169756252830354073L;

    private JMenuBar menuBar = new JMenuBar();
    private JMenu edit = new JMenu("Edit");
    private JMenu view = new JMenu("View");
    private JMenu help = new JMenu("Help");

    // Instantiated all JPanels used in this Applet
    //private JPanel[] rows = { new JPanel(), new JPanel(), new JPanel(),
    //      new JPanel(), new JPanel(), new JPanel(), new JPanel() };

    JTextField calc = new JTextField(1);

    private JButton[] buttons = { new JButton("Backspace"), new JButton("CE"),
            new JButton("C"), new JButton("MC"), new JButton("7"),
            new JButton("8"), new JButton("9"), new JButton("/"),
            new JButton("sqrt"), new JButton("MR"), new JButton("4"),
            new JButton("5"), new JButton("6"), new JButton("*"),
            new JButton("%"), new JButton("MS"), new JButton("1"),
            new JButton("2"), new JButton("3"), new JButton("-"),
            new JButton("1/x"), new JButton("M+"), new JButton("0"),
            new JButton("+/-"), new JButton("."), new JButton("+"),
            new JButton("=") };

    public void actionPerformed(ActionEvent e) {

        if (e.getSource() == buttons[0]) {

        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                JFrame frame = new JFrame();
                MyCalc calc = new MyCalc();
                calc.init();
                frame.add(calc);
                frame.pack();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public void init() {
        setName("Calculator Applet");
        menuBar.add(edit);
        menuBar.add(view);
        menuBar.add(help);
        setJMenuBar(menuBar);

        Container contentPane = getContentPane();

        calc.setText("0.");
        calc.setHorizontalAlignment(JTextField.RIGHT);
        JPanel topButtonPanel = new JPanel(new GridLayout(1, 0));
        for (int i = 0; i < 3; i++) {
            topButtonPanel.add(buttons[i]);
        }

        JPanel numberButtonPanel = new JPanel(new GridLayout(4, 6));
        for (int i = 3; i < 26; i++) {
            numberButtonPanel.add(buttons[i]);
        }

        JPanel centerWrapper = new JPanel(new BorderLayout());
        centerWrapper.add(calc, BorderLayout.PAGE_START);
        centerWrapper.add(topButtonPanel);
        centerWrapper.add(numberButtonPanel, BorderLayout.PAGE_END);

        contentPane.setLayout(new GridBagLayout());
        contentPane.add(centerWrapper);
    }
}
导入java.awt.BorderLayout;
导入java.awt.Container;
导入java.awt.GridBagLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JApplet;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SwingUtilities;
公共类MyCalc扩展JApplet实现ActionListener{
/**
* 
*/
受保护的静态最终长serialVersionUID=3169756252830354073L;
private JMenuBar menuBar=new JMenuBar();
私有JMenu edit=新JMenu(“编辑”);
私有JMenu视图=新JMenu(“视图”);
私有JMenu帮助=新JMenu(“帮助”);
//实例化此小程序中使用的所有JPanel
//private JPanel[]行={new JPanel(),new JPanel(),new JPanel(),
//new JPanel(),new JPanel(),new JPanel(),new JPanel()};
JTextField calc=新的JTextField(1);
私有JButton[]按钮={new JButton(“Backspace”)、new JButton(“CE”),
新按钮(“C”)、新按钮(“MC”)、新按钮(“7”),
新钮扣(“8”)、新钮扣(“9”)、新钮扣(“/”),
新纽扣(“sqrt”)、新纽扣(“MR”)、新纽扣(“4”),
新按钮(“5”)、新按钮(“6”)、新按钮(“*”),
新按钮(“%”)、新按钮(“MS”)、新按钮(“1”),
新按钮(“2”)、新按钮(“3”)、新按钮(“-”),
新按钮(“1/x”)、新按钮(“M+”、新按钮(“0”),
新按钮(“+/-”),新按钮(“.”),新按钮(“+”,
新的JButton(“=”)};
已执行的公共无效操作(操作事件e){
如果(例如getSource()==按钮[0]){
}
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame=新JFrame();
MyCalc calc=新的MyCalc();
计算初始值();
框架。添加(计算);