我正在尝试使用GUI界面创建计算器。下面的代码旨在执行此操作,但只创建一个可以键入的空白区域。这有什么问题?
public class CalculatorMain extends Calculator_ui
{
public static void main(String[] args)
{
Calculator_ui n=new Calculator_ui();
n.ui();
}//main
}//class
从这一点开始是一个新的Java类
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Calculator_ui implements ActionListener
{
JFrame frame=new JFrame("Calculator");
JPanel panel=new JPanel(new FlowLayout());
JTextArea text=new JTextArea(5,20);
JButton but1=new JButton("1");
JButton but2=new JButton("2");
JButton but3=new JButton("3");
JButton but4=new JButton("4");
JButton but5=new JButton("5");
JButton but6=new JButton("6");
JButton but7=new JButton("7");
JButton but8=new JButton("8");
JButton but9=new JButton("9");
JButton but0=new JButton("0");
JButton butadd=new JButton("+");
JButton butsub=new JButton("-");
JButton butmulti=new JButton("*");
JButton butdiv=new JButton("/");
JButton buteq=new JButton("=");
JButton butclear=new JButton("C");
Double number1,number2,result;
int addc=0,subc=0,multic=0,divc=0;
public void ui()
{
frame.setVisible(true);
frame.setSize(250,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.add(text);
panel.add(but1);
panel.add(but2);
panel.add(but3);
panel.add(but4);
panel.add(but5);
panel.add(but6);
panel.add(but7);
panel.add(but8);
panel.add(but9);
panel.add(but0);
panel.add(butadd);
panel.add(butsub);
panel.add(butmulti);
panel.add(butdiv);
panel.add(buteq);
panel.add(butclear);
but1.addActionListener(this);
but2.addActionListener(this);
but3.addActionListener(this);
but4.addActionListener(this);
but5.addActionListener(this);
but6.addActionListener(this);
but7.addActionListener(this);
but8.addActionListener(this);
but9.addActionListener(this);
but0.addActionListener(this);
butadd.addActionListener(this);
butsub.addActionListener(this);
butmulti.addActionListener(this);
butdiv.addActionListener(this);
buteq.addActionListener(this);
butclear.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object source=e.getSource();
if(source==butclear)
{
number1=0.0;
number2=0.0;
text.setText("");
}
if(source==but1)
{
text.append("1");
}
if(source==but2)
{
text.append("2");
}
if(source==but3)
{
text.append("3");
}
if(source==but4)
{
text.append("4");
}
if(source==but5)
{
text.append("5");
}
if(source==but6)
{
text.append("6");
}
if(source==but7)
{
text.append("7");
}
if(source==but8)
{
text.append("8");
}
if(source==but9)
{
text.append("9");
}
if(source==but0)
{
text.append("0");
}
if(source==butadd)
{
number1=number_reader();
text.setText("");
addc=1;
subc=0;
multic=0;
divc=0;
}
if(source==butsub)
{
number1=number_reader();
text.setText("");
addc=0;
subc=1;
multic=0;
divc=0;
}
if(source==butmulti)
{
number1=number_reader();
text.setText("");
addc=0;
subc=0;
multic=1;
divc=0;
}
if(source==butdiv)
{
number1=number_reader();
text.setText("");
addc=0;
subc=0;
multic=0;
divc=1;
}
if(source==buteq)
{
number2=number_reader();
if(addc>0)
{
result=number1+number2;
text.setText(Double.toString(result));
}
if(subc>0)
{
result=number1-number2;
text.setText(Double.toString(result));
}
if(multic>0)
{
result=number1*number2;
text.setText(Double.toString(result));
}
if(divc>0)
{
result=number1/number2;
text.setText(Double.toString(result));
}
}
}
public double number_reader()
{
Double num1;
String s;
s=text.getText();
num1=Double.valueOf(s);
return num1;
}
public static void main(String[] args)
{
}//main
}//class
答案 0 :(得分:0)
您的代码中没有text.setText(<value>);
。我不确定append
函数是否正常工作。
答案 1 :(得分:0)
替换
frame.add(text);
通过
panel.add(text);
答案 2 :(得分:0)
问题是你使用的是边框布局的JFrame默认布局来添加面板和文本,默认情况下它会将组件添加到中心(如果添加多个组件,它们会隐藏其他组件),你可以在顶部添加一个,在中心添加一个:
frame.add(panel, BorderLayout.SOUTH);
frame.add(text, BorderLayout.CENTER);
您可以查看A Visual Guide to Layout Managers中存在哪些布局。当然,请参阅Creating a GUI With JFC/Swing中有关GUI的oracle官方教程。
此外,您的按钮被放置在流程布局中,因此它们将是一个接一个。也许您可以使用GridBagLayout将其定位为真正的计算器。
如果不执行主要方法,则不需要为所有类添加主方法。