如何设置按钮的大小? (摇摆)
How can I set size of button? (Swing)
我想用计算器中的按钮 "Equal" 填充右下角。
现在这个按钮只填充了这个 space 的 1/4。我试过用
setSize
或 setPreferedSize
,但所有尝试都失败了。我真的
不熟悉Swing。
我该怎么办?我应该调整什么?
public class Calculator implements ActionListener{
JPanel windowContent;
JTextField displayField;
JButton[] button = new JButton[10];
JButton buttonPoint;
JButton buttonEqual;
JButton buttonPlus;
JButton buttonMinus;
JButton buttonMultiply;
JButton buttonDivide;
JButton buttonClean;
JPanel p1;
JPanel p2;
JPanel p3;
int temp;
double firstNum;
double secondNum;
String operation;
ArrayList<String> mathOperation;
Calculator(){
temp = 0;
windowContent= new JPanel();
BorderLayout bl= new BorderLayout();
windowContent.setLayout(bl);
displayField = new JTextField(30);
displayField.setText("");
windowContent.add("North", displayField);
for(int i = 0; i < 10; i++) {
button[i] = new JButton(""+i);
button[i].addActionListener(this);
}
buttonPoint= new JButton(".");
buttonEqual= new JButton("=");
buttonEqual.setSize(80, 80);
buttonPlus= new JButton("+");
buttonMinus= new JButton("-");
buttonMultiply= new JButton("*");
buttonDivide= new JButton("/");
buttonClean = new JButton("C");
buttonEqual.setSize(100,200);
buttonPoint.addActionListener(this);
buttonEqual.addActionListener(this);
buttonPlus.addActionListener(this);
buttonMinus.addActionListener(this);
buttonMultiply.addActionListener(this);
buttonDivide.addActionListener(this);
buttonClean.addActionListener(this);
p1=new JPanel();
GridLayout gl= new GridLayout(4,3);
p1.setLayout(gl);
for(int i = 1; i <= 10; i++) {
if(i==10)
p1.add(button[0]);
else
p1.add(button[i]);
}
p1.add(buttonPoint);
p1.add(buttonClean);
windowContent.add("Center",p1);
p2= new JPanel();
p2.setLayout(gl);
p2.add(buttonMinus);
p2.add(buttonPlus);
p2.add(buttonDivide);
p2.add(buttonMultiply);
p2.add(buttonEqual);
windowContent.add("East",p2);
JFrame frame= new JFrame("Calculator");
frame.setContentPane(windowContent);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args){
Calculator calc= new Calculator();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == button[0])
displayField.setText(displayField.getText() + "0");
if(e.getSource() == button[1])
displayField.setText(displayField.getText() + "1");
if(e.getSource() == button[2])
displayField.setText(displayField.getText() + "2");
if(e.getSource() == button[3])
displayField.setText(displayField.getText() + "3");
if(e.getSource() == button[4])
displayField.setText(displayField.getText() + "4");
if(e.getSource() == button[5])
displayField.setText(displayField.getText() + "5");
if(e.getSource() == button[6])
displayField.setText(displayField.getText() + "6");
if(e.getSource() == button[7])
displayField.setText(displayField.getText() + "7");
if(e.getSource() == button[8])
displayField.setText(displayField.getText() + "8");
if(e.getSource() == button[9])
displayField.setText(displayField.getText() + "9");
if(e.getSource() == buttonPlus)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "+";
}
if(e.getSource() == buttonMinus)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "-";
}
if(e.getSource() == buttonMultiply)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "*";
}
if(e.getSource() == buttonDivide)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "/";
}
if(e.getSource() == buttonEqual)
{
secondNum = Double.parseDouble(displayField.getText());
if(operation == "+")
displayField.setText(firstNum+secondNum+"");
if(operation == "-")
displayField.setText(firstNum-secondNum+"");
if(operation == "*")
displayField.setText(firstNum*secondNum+"");
if(operation == "/")
displayField.setText(firstNum/secondNum+"");
}
if(e.getSource() == buttonClean)
{
String tmp = displayField.getText();
String temp = tmp.substring(0, tmp.length() -1);
displayField.setText(temp);
}
}
public double result(ArrayList s)
{
double res =0;
for(int i =0; i< s.size(); i++)
{
if(s.get(i).equals("+"))
{
res = Double.parseDouble(mathOperation.get(i-1)) + Double.parseDouble(mathOperation.get(i+1));
}
}
return res;
}
}
GridLayout
不支持这个。您必须使用其他布局管理器。标准库里有GridBagLayout
,但是不太好理解
我建议MigLayout
。我使用 UI 的时间不长,但请记住它非常简单并且允许创建复杂的 UI.
我们必须使用 Gridbag layout .
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestFrame extends JFrame {
public TestFrame() {
GridBagLayout gridBagLayout = new GridBagLayout();
getContentPane().setLayout(gridBagLayout);
JButton btn1 = new JButton("1");
GridBagConstraints gbc_btn1 = new GridBagConstraints();
gbc_btn1.insets = new Insets(0, 0, 5, 5);
gbc_btn1.gridx = 0;
gbc_btn1.gridy = 0;
getContentPane().add(btn1, gbc_btn1);
JButton btn2 = new JButton("2");
GridBagConstraints gbc_btn2 = new GridBagConstraints();
gbc_btn2.insets = new Insets(0, 0, 5, 0);
gbc_btn2.gridx = 1;
gbc_btn2.gridy = 0;
getContentPane().add(btn2, gbc_btn2);
JButton btn3 = new JButton("3");
GridBagConstraints gbc_btn3 = new GridBagConstraints();
gbc_btn3.gridwidth = 2;
gbc_btn3.fill = GridBagConstraints.HORIZONTAL;
gbc_btn3.insets = new Insets(0, 0, 0, 5);
gbc_btn3.gridx = 0;
gbc_btn3.gridy = 1;
getContentPane().add(btn3, gbc_btn3);
}
}
作为附加信息,如果您正在使用 eclipse,请尝试 window builder 用于 GUI 创建目的。
这个:
可以这样实现..
windowContent.add(p1, BorderLayout.CENTER);
p2 = new JPanel();
p2.setLayout(new GridLayout(0,2));
p2.add(buttonMinus);
p2.add(buttonPlus);
p2.add(buttonDivide);
p2.add(buttonMultiply);
//p2.add(buttonEqual); // Oops.. slight correction here!
//windowContent.add("East", p2);
JPanel pEast = new JPanel(new GridLayout(0, 1));
windowContent.add(pEast, BorderLayout.EAST);
pEast.add(p2);
pEast.add(buttonEqual);
请注意,它也可以通过其他各种方式实现,包括使用单个 GridBagLayout
。
另请参阅此 calculator example。它使用 ScriptEngine
来评估文本字段中的表达式。
我想用计算器中的按钮 "Equal" 填充右下角。
现在这个按钮只填充了这个 space 的 1/4。我试过用
setSize
或 setPreferedSize
,但所有尝试都失败了。我真的
不熟悉Swing。
我该怎么办?我应该调整什么?
public class Calculator implements ActionListener{
JPanel windowContent;
JTextField displayField;
JButton[] button = new JButton[10];
JButton buttonPoint;
JButton buttonEqual;
JButton buttonPlus;
JButton buttonMinus;
JButton buttonMultiply;
JButton buttonDivide;
JButton buttonClean;
JPanel p1;
JPanel p2;
JPanel p3;
int temp;
double firstNum;
double secondNum;
String operation;
ArrayList<String> mathOperation;
Calculator(){
temp = 0;
windowContent= new JPanel();
BorderLayout bl= new BorderLayout();
windowContent.setLayout(bl);
displayField = new JTextField(30);
displayField.setText("");
windowContent.add("North", displayField);
for(int i = 0; i < 10; i++) {
button[i] = new JButton(""+i);
button[i].addActionListener(this);
}
buttonPoint= new JButton(".");
buttonEqual= new JButton("=");
buttonEqual.setSize(80, 80);
buttonPlus= new JButton("+");
buttonMinus= new JButton("-");
buttonMultiply= new JButton("*");
buttonDivide= new JButton("/");
buttonClean = new JButton("C");
buttonEqual.setSize(100,200);
buttonPoint.addActionListener(this);
buttonEqual.addActionListener(this);
buttonPlus.addActionListener(this);
buttonMinus.addActionListener(this);
buttonMultiply.addActionListener(this);
buttonDivide.addActionListener(this);
buttonClean.addActionListener(this);
p1=new JPanel();
GridLayout gl= new GridLayout(4,3);
p1.setLayout(gl);
for(int i = 1; i <= 10; i++) {
if(i==10)
p1.add(button[0]);
else
p1.add(button[i]);
}
p1.add(buttonPoint);
p1.add(buttonClean);
windowContent.add("Center",p1);
p2= new JPanel();
p2.setLayout(gl);
p2.add(buttonMinus);
p2.add(buttonPlus);
p2.add(buttonDivide);
p2.add(buttonMultiply);
p2.add(buttonEqual);
windowContent.add("East",p2);
JFrame frame= new JFrame("Calculator");
frame.setContentPane(windowContent);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args){
Calculator calc= new Calculator();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == button[0])
displayField.setText(displayField.getText() + "0");
if(e.getSource() == button[1])
displayField.setText(displayField.getText() + "1");
if(e.getSource() == button[2])
displayField.setText(displayField.getText() + "2");
if(e.getSource() == button[3])
displayField.setText(displayField.getText() + "3");
if(e.getSource() == button[4])
displayField.setText(displayField.getText() + "4");
if(e.getSource() == button[5])
displayField.setText(displayField.getText() + "5");
if(e.getSource() == button[6])
displayField.setText(displayField.getText() + "6");
if(e.getSource() == button[7])
displayField.setText(displayField.getText() + "7");
if(e.getSource() == button[8])
displayField.setText(displayField.getText() + "8");
if(e.getSource() == button[9])
displayField.setText(displayField.getText() + "9");
if(e.getSource() == buttonPlus)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "+";
}
if(e.getSource() == buttonMinus)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "-";
}
if(e.getSource() == buttonMultiply)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "*";
}
if(e.getSource() == buttonDivide)
{
firstNum = Double.parseDouble(displayField.getText());
displayField.setText("");
operation = "/";
}
if(e.getSource() == buttonEqual)
{
secondNum = Double.parseDouble(displayField.getText());
if(operation == "+")
displayField.setText(firstNum+secondNum+"");
if(operation == "-")
displayField.setText(firstNum-secondNum+"");
if(operation == "*")
displayField.setText(firstNum*secondNum+"");
if(operation == "/")
displayField.setText(firstNum/secondNum+"");
}
if(e.getSource() == buttonClean)
{
String tmp = displayField.getText();
String temp = tmp.substring(0, tmp.length() -1);
displayField.setText(temp);
}
}
public double result(ArrayList s)
{
double res =0;
for(int i =0; i< s.size(); i++)
{
if(s.get(i).equals("+"))
{
res = Double.parseDouble(mathOperation.get(i-1)) + Double.parseDouble(mathOperation.get(i+1));
}
}
return res;
}
}
GridLayout
不支持这个。您必须使用其他布局管理器。标准库里有GridBagLayout
,但是不太好理解
我建议MigLayout
。我使用 UI 的时间不长,但请记住它非常简单并且允许创建复杂的 UI.
我们必须使用 Gridbag layout .
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
public class TestFrame extends JFrame {
public TestFrame() {
GridBagLayout gridBagLayout = new GridBagLayout();
getContentPane().setLayout(gridBagLayout);
JButton btn1 = new JButton("1");
GridBagConstraints gbc_btn1 = new GridBagConstraints();
gbc_btn1.insets = new Insets(0, 0, 5, 5);
gbc_btn1.gridx = 0;
gbc_btn1.gridy = 0;
getContentPane().add(btn1, gbc_btn1);
JButton btn2 = new JButton("2");
GridBagConstraints gbc_btn2 = new GridBagConstraints();
gbc_btn2.insets = new Insets(0, 0, 5, 0);
gbc_btn2.gridx = 1;
gbc_btn2.gridy = 0;
getContentPane().add(btn2, gbc_btn2);
JButton btn3 = new JButton("3");
GridBagConstraints gbc_btn3 = new GridBagConstraints();
gbc_btn3.gridwidth = 2;
gbc_btn3.fill = GridBagConstraints.HORIZONTAL;
gbc_btn3.insets = new Insets(0, 0, 0, 5);
gbc_btn3.gridx = 0;
gbc_btn3.gridy = 1;
getContentPane().add(btn3, gbc_btn3);
}
}
作为附加信息,如果您正在使用 eclipse,请尝试 window builder 用于 GUI 创建目的。
这个:
可以这样实现..
windowContent.add(p1, BorderLayout.CENTER);
p2 = new JPanel();
p2.setLayout(new GridLayout(0,2));
p2.add(buttonMinus);
p2.add(buttonPlus);
p2.add(buttonDivide);
p2.add(buttonMultiply);
//p2.add(buttonEqual); // Oops.. slight correction here!
//windowContent.add("East", p2);
JPanel pEast = new JPanel(new GridLayout(0, 1));
windowContent.add(pEast, BorderLayout.EAST);
pEast.add(p2);
pEast.add(buttonEqual);
请注意,它也可以通过其他各种方式实现,包括使用单个 GridBagLayout
。
另请参阅此 calculator example。它使用 ScriptEngine
来评估文本字段中的表达式。