text.setEditable(false);// 得写到方法体中去,单独是不能存在的,你看来是写得头晕了哈
成都创新互联专注于青县网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供青县营销型网站建设,青县网站制作、青县网页设计、青县网站官网定制、重庆小程序开发服务,打造青县网络公司原创品牌,更为您提供青县网站排名全网营销落地服务。
第二个类那样是用不了text.setText();的
没有这个对象,你把它们写到同一个类中去就没问题了。
非要这么写,那你得再写个方法将text对象传递出来在第二个类中获取来使用……
你写得有点儿乱,我也不知道怎么改了!写一个太花时间,我这边给你一个吧!
你说按钮距离那就是你布局没有处理好!建议直接像下面给出的程序那样!也简单
出了问题了不怕,问题越多进步越快哈
有问题你可以加这个群进行提问:5358308,java world!(two)
给你一个计算器程序
//第一个类是GUI,两个类放两文件里去
import javax.swing.*;
import java.awt.Container;
import java.awt.event.*;
public class Calculate_GUI extends JFrame{
private JPanel p1;
private JButton keyButton[]=new JButton[16],signButton,clearButton,deleteButton;
private JTextField outputField;
private Container contentPane;
private boolean firstInput=true;
private Calculate_Model model=new Calculate_Model();
public Calculate_GUI(){
p1=new JPanel();
keyButton[0]=new JButton("1"); //创建各个按钮
keyButton[1]=new JButton("2");
keyButton[2]=new JButton("3");
keyButton[3]=new JButton("/");
keyButton[4]=new JButton("4");
keyButton[5]=new JButton("5");
keyButton[6]=new JButton("6");
keyButton[7]=new JButton("*");
keyButton[8]=new JButton("7");
keyButton[9]=new JButton("8");
keyButton[10]=new JButton("9");
keyButton[11]=new JButton("-");
keyButton[12]=new JButton("0");
keyButton[13]=new JButton(".");
keyButton[14]=new JButton("=");
keyButton[15]=new JButton("+");
clearButton=new JButton("c");
signButton=new JButton("+/-");
deleteButton=new JButton("←");
outputField=new JTextField(); //它允许编辑单行文本
outputField.setText("0");
outputField.setEditable(false); //指示此 TextComponent 是否应该为可编辑的
contentPane=this.getContentPane(); //返回此窗体的 contentPane 对象;
this.setSize(250,250);
p1.setLayout(new java.awt.GridLayout(4,5)); //创建具有4行5列的布局
for(int i=0;ikeyButton.length;i++) //在容器中画上按钮
{
if(i==4) p1.add(deleteButton);
if(i==8) p1.add(clearButton);
if(i==12) p1.add(signButton);
keyButton[i].setFont(new java.awt.Font("Dialog",3,15));//设置字体Dialog字体名,样式,大小
p1.add(keyButton[i]);
}
contentPane.add(outputField,java.awt.BorderLayout.NORTH);
contentPane.add(p1,java.awt.BorderLayout.CENTER);
this.show();
} //用于显示界面
public void registEvent() //注册各个事件
{
this.addWindowListener(new WindowAdapter() //窗口事件,窗口关闭里程序关闭
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
for(int i=0;ikeyButton.length;i++)
{
keyButton[i].addActionListener(new keyButtonHandler()); //为每一个按钮添加监听器
}
signButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
outputField.setText(String.valueOf(model.toSign(Double.parseDouble(outputField.getText()))));
}
});
deleteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
outputField.setText(model.backSpace(outputField.getText()));
if(outputField.getText().equals("0"))
firstInput=true;
}
});
clearButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
firstInput=true;
outputField.setText("0");
model.reset();
}
});
}
class keyButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
char actionCommand=ae.getActionCommand().charAt(0);
switch(actionCommand)
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '0':
case '.':
if(firstInput) //是否为首次输入
{
outputField.setText(String.valueOf(actionCommand));
firstInput=false;
}
else
outputField.setText(outputField.getText()+actionCommand);
break;
case '+':
case '-':
case '*':
case '/':
if(firstInput)
model.setOperate(actionCommand);
else
{
model.setOperateNumber(Double.parseDouble(outputField.getText()));
model.calculating();
model.setOperate(actionCommand);
outputField.setText(String.valueOf(model.getResult()));
firstInput=true;
}
break;
case '=':
if(firstInput)
{
model.calculating();
outputField.setText(String.valueOf(model.getResult()));
}
else
{
model.setOperateNumber(Double.parseDouble(outputField.getText()));
model.calculating();
outputField.setText(String.valueOf(model.getResult()));
firstInput=true;
}
}
}
}
public static void main(String args[])
{
new Calculate_GUI().registEvent();
}
}
/******************************************
*****计算的模块****************************/
public class Calculate_Model
{
private double result;
private double operateNumber;
private char operate;
public Calculate_Model() //构造方法进行初始化
{
result=0; //结果
operateNumber=0; //操作数
operate=' '; //操作符
}
public void setResult(double n) //设置结果,成员变量result是private的
{
result=n;
}
public void setOperate(char o) //设置操作符
{
operate=o;
}
public void setOperateNumber(double n) //设置操作数
{
operateNumber=n;
}
public double getResult() //获取结果
{
return result;
}
public void calculating() //计算过程
{
switch(operate)
{
case ' ':result=operateNumber;break; //分别对操作判断后进行相应操作
case '+':result+=operateNumber;break;
case '-':result-=operateNumber;break;
case '*':result*=operateNumber;break;
case '/':result/=operateNumber;break;
}
}
public void reset() //重设方法
{
result=0;
operateNumber=0;
operate=' ';
}
public double toSign(double n) //正负转化
{
return 0-(n-0);
}
public String backSpace(String n) //对backSpace设置
{
String reResult="0";
try
{
reResult=n.substring(0,n.length()-1); //从第一个开始取前n-1个
Double.parseDouble(reResult); //将其转化为Double型
}
catch(NumberFormatException e)
{
reResult="0";
}
return reResult;
}
}
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
/**
* 我的计算器。Cheshi 继承于 JFrame,是计算器的界面
c*/
public class Cheshi extends JFrame {
private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5);
private JTextField textbox = new JTextField("0");
private CalculatorCore core = new CalculatorCore();
private ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
String label = b.getText();
String result = core.process(label);
textbox.setText(result);
}
};
public Cheshi(String title) throws HeadlessException {
super(title); // 调用父类构造方法
setupFrame(); // 调整窗体属性
setupControls(); // 创建控件
}
private void setupControls() {
setupDisplayPanel(); // 创建文本面板
setupButtonsPanel(); // 创建按钮面板
}
// 创建按钮面板并添加按钮
private void setupButtonsPanel() {
JPanel panel = new JPanel();
panel.setBorder(border);
panel.setLayout(new GridLayout(4, 5, 3, 3));
createButtons(panel, new String[]{
"7", "8", "9", "+", "C",
"4", "5", "6", "-", "CE",
"1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮
"0", ".", "=", "/", ""
});
this.add(panel, BorderLayout.CENTER);
}
/**
* 在指定的面板上创建按钮
*
* @param panel 要创建按钮的面板
* @param labels 按钮文字
*/
private void createButtons(JPanel panel, String[] labels) {
for (String label : labels) {
// 如果 label 为空,则表示创建一个空面板。否则创建一个按钮。
if (label.equals("")) {
panel.add(new JPanel());
} else {
JButton b = new JButton(label);
b.addActionListener(listener); // 为按钮添加侦听器
panel.add(b);
}
}
}
// 设置显示面板,用一个文本框来作为计算器的显示部分。
private void setupDisplayPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBorder(border);
setupTextbox();
panel.add(textbox, BorderLayout.CENTER);
this.add(panel, BorderLayout.NORTH);
}
// 调整文本框
private void setupTextbox() {
textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐
textbox.setEditable(false); // 文本框只读
textbox.setBackground(Color.white); // 文本框背景色为白色
}
// 调整窗体
private void setupFrame() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束
this.setLocation(100, 50); // 设置窗体显示在桌面上的位置
this.setSize(300, 200); // 设置窗体大小
this.setResizable(false); // 窗体大小固定
}
// 程序入口
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Cheshi frame = new Cheshi("我的计算器");
frame.setVisible(true); // 在桌面上显示窗体
}
}
/**
* 计算器核心逻辑。这个逻辑只能处理 1~2 个数的运算。
*/
class CalculatorCore {
private String displayText = "0"; // 要显示的文本
boolean reset = true;
private BigDecimal number1, number2;
private String operator;
private HashMapString, Operator operators = new HashMapString, Operator();
private HashMapString, Processor processors = new HashMapString, Processor();
CalculatorCore() {
setupOperators();
setupProcessors();
}
// 为每种命令添加处理方式
private void setupProcessors() {
processors.put("[0-9]", new Processor() {
public void calculate(String command) {
numberClicked(command);
}
});
processors.put("\\.", new Processor() {
public void calculate(String command) {
dotClicked();
}
});
processors.put("=", new Processor() {
public void calculate(String command) {
equalsClicked();
}
});
processors.put("[+\\-*/]", new Processor() {
public void calculate(String command) {
operatorClicked(command);
}
});
processors.put("C", new Processor() {
public void calculate(String command) {
clearClicked();
}
});
processors.put("CE", new Processor() {
public void calculate(String command) {
clearErrorClicked();
}
});
}
// 为每种 operator 添加处理方式
private void setupOperators() {
operators.put("+", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.add(number2);
}
});
operators.put("-", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.subtract(number2);
}
});
operators.put("*", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.multiply(number2);
}
});
operators.put("/", new Operator() {
public BigDecimal process(BigDecimal number1, BigDecimal number2) {
return number1.divide(number2, 30, RoundingMode.HALF_UP);
}
});
}
// 根据命令处理。这里的命令实际上就是按钮文本。
public String process(String command) {
for (String pattern : processors.keySet()) {
if (command.matches(pattern)) {
processors.get(pattern).calculate(command);
break;
}
}
return displayText;
}
// 当按下 CE 时
private void clearErrorClicked() {
if (operator == null) {
number1 = null;
} else {
number2 = null;
}
displayText = "0";
reset = true;
}
// 当按下 C 时,将计算器置为初始状态。
private void clearClicked() {
number1 = null;
number2 = null;
operator = null;
displayText = "0";
reset = true;
}
// 当按下 = 时
private void equalsClicked() {
calculateResult();
number1 = null;
number2 = null;
operator = null;
reset = true;
}
// 计算结果
private void calculateResult() {
number2 = new BigDecimal(displayText);
Operator oper = operators.get(operator);
if (oper != null) {
BigDecimal result = oper.process(number1, number2);
displayText = result.toString();
}
}
// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)
private void operatorClicked(String command) {
if (operator != null) {
calculateResult();
}
number1 = new BigDecimal(displayText);
operator = command;
reset = true;
}
// 当按下 . 时
private void dotClicked() {
if (displayText.indexOf(".") == -1) {
displayText += ".";
} else if (reset) {
displayText = "0.";
}
reset = false;
}
// 当按下 0-9 时
private void numberClicked(String command) {
if (reset) {
displayText = command;
} else {
displayText += command;
}
reset = false;
}
// 运算符处理接口
interface Operator {
BigDecimal process(BigDecimal number1, BigDecimal number2);
}
// 按钮处理接口
interface Processor {
void calculate(String command);
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
class Normal{
double i,j;
public Normal(double num1,double num2){
i=num1;
j=num2;
}
public double puls(){
return i+j;
}
public double subtract(){
return i-j;
}
public double multiply(){
return i*j;
}
public double divide(){
return i/j;
}
public double surpuls(){
return i%j;
}
}
class scientific extends Normal{
public scientific(int num1, int num2) {
super(num1, num2);
}
}
public class calc extends JFrame{
public static void main(String[] args) {
viewNormal VN= new viewNormal("normal");
}
}
class viewNormal extends JFrame implements ActionListener{
JPanel jp1 = new JPanel(new GridLayout(4,3,5,5));
JPanel jp2 = new JPanel(new GridLayout(5,1,5,5));
JLabel jl;
JButton[] jb;
JButton jbs,jbo,jba,jbb,jbc,jby;
StringBuffer sb = new StringBuffer();
Normal normal;
int dot=0;
double fnum=0;
double lnum=0;
double result;
String sign=null;
public viewNormal(String title){
setTitle(title);
setLayout(null);
setVisible(true);
setBounds(200,200,305,350);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jb= new JButton[12];
for(int i=0;i9;i++){
jb[i]=new JButton(""+(i+1));
jp1.add(jb[i]);
jb[i].addActionListener(this);
}
jb[9]=new JButton(".");
jb[10]=new JButton("0");
jb[11]=new JButton("=");
jb[9].addActionListener(this);
jb[10].addActionListener(this);
jb[11].addActionListener(this);
jp1.add(jb[9]);
jp1.add(jb[10]);
jp1.add(jb[11]);
jp1.setBounds(10, 100, 200, 200);
jbs= new JButton("+");jbo= new JButton("-");jba= new JButton("*");
jbb= new JButton("/");jby= new JButton("%");jbc= new JButton("C");
jbs.addActionListener(this);jbo.addActionListener(this);jba.addActionListener(this);
jbb.addActionListener(this);jby.addActionListener(this);jbc.addActionListener(this);
//jp2.add(jby);
jp2.add(jbs);jp2.add(jbo);jp2.add(jba);jp2.add(jbb);jp2.add(jbc);
jp2.setBounds(215, 100, 70, 200);
jl= new JLabel("0",JLabel.RIGHT);
jl.setFont(new Font("Batang",Font.BOLD, 20));
jl.setBorder(new LineBorder(Color.black,2));
jl.setBackground(Color.white);
jl.setBounds(10, 40, 275, 50);
jl.setOpaque(true);
add(jl);
add(jp1);
add(jp2);
}
//+
public void sum(){
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.puls();
result=fnum;
}
//-
private void sub() {
System.out.println(sb.toString());
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.subtract();
result=fnum;
}
//*
private void mul() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.multiply();
result=fnum;
}
// /
private void div() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.divide();
result=fnum;
}
//%
private void sur() {
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.surpuls();
result=fnum;
}
// =
private void same(){
if(sign.equals("+")){
sum();
}
if(sign.equals("-")){
sub();
}
if(sign.equals("*")){
mul();
}
if(sign.equals("/")){
div();
}
if(sign.equals("%")){
sur();
}
}
//result
public void Result(){
if(result%1!=0)
jl.setText(""+result);
else
{
int i=(int)result;
jl.setText(""+i);
}
}
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(sb.toString());
// 1~9
for(int i=0;i9;i++){
if(e.getSource()==jb[i]!sb.toString().equals("0")){
sb.append(jb[i].getText());
jl.setText(sb.toString());
}
else if(e.getSource()==jb[i]sb.toString().equals("0")){
int d=sb.length();
sb.delete(0, d);
sb.append(jb[i].getText());
jl.setText(sb.toString());
}
}
// 0
if(e.getSource()==jb[10]!sb.toString().equals("0")){
sb.append(jb[10].getText());
jl.setText(sb.toString());
}
// .
if(e.getSource()==jb[9]dot==0!sb.toString().equals("")){
dot++;
sb.append(jb[9].getText());
jl.setText(sb.toString());
}
// =
if(e.getSource()==jb[11]!sb.toString().equals("")){
same();
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
// +
if(e.getSource()==jbs!sb.toString().equals("")){
if(sign!="+"sign!=null)
same();
else
sum();
sign ="+";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//-
if(e.getSource()==jbo!sb.toString().equals("")){
if(fnum==0)
fnum=2*Double.parseDouble(sb.toString());
if(sign!="-"sign!=null)
same();
else
sub();
sign ="-";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//*
if(e.getSource()==jba!sb.toString().equals("")){
if(fnum==0)
fnum=1;
if(sign!="*"sign!=null)
same();
else
mul();
sign ="*";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
// /
if(e.getSource()==jbb!sb.toString().equals("")){
if(fnum==0)
fnum=Math.pow(Double.parseDouble(sb.toString()),2);
if(sign!="/"sign!=null)
same();
else
div();
sign ="/";
Result();
int d=sb.length();
sb.delete(0, d);
dot=0;
}
//%
// if(e.getSource()==jby!sb.toString().equals("")){
// if(fnum==0){
// fnum=Double.parseDouble(sb.toString());
// result=fnum;
// }
// else {
// if(sign!="%"sign!=null)
// same();
// else{
// lnum=Double.parseDouble(sb.toString());
// normal=new Normal(fnum,lnum);
// fnum=normal.surpuls();
// result=fnum;
// }
// }
// sign ="%";
// Result();
// int d=sb.length();
// sb.delete(0, d);
// dot=0;
// }
//clear
if(e.getSource()==jbc){
int d=sb.length();
sb.delete(0, d);
jl.setText("0");
dot=0;
fnum=0;
lnum=0;
sign=null;
}
}
}
class viewScientific extends viewNormal{
public viewScientific(String title){
super(title);
setBounds(200,200,800,500);
}
}
//等号以后输入符号用不了, String转 double 本来就有错误,你可以用我的扩展成科学型的。
// 我以前写的。。 你看看吧
package 娱乐;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseMotionListener;
import java.text.DecimalFormat;
import javax.swing.*;
public class 计数器_一般 extends JFrame implements ActionListener {
private JButton an[];
private JButton qingkong;
private JTextField k;
private JPanel rq1, rq2;
private String string[] = { "7", "8", "9", "/", "6", "5", "4", "*", "3",
"2", "1", "-", "0", ".", "=", "+" };
private String s = "", shu1 = "", shu2 = "", shu3 = "";
private static int fo = 0;
private boolean ff = true;
public 计数器_一般() {
Container c = getContentPane();
c.setLayout(new FlowLayout());
// c.setLayout(new GridLayout(2,1));
rq1 = new JPanel();
k = new JTextField(10);
qingkong = new JButton("C");
rq1.add(k);
rq1.add(qingkong);
rq2 = new JPanel();
rq2.setLayout(new GridLayout(4, 4, 3, 3));
an = new JButton[string.length];
for (int i = 0; i string.length; i++) {
an[i] = new JButton(string[i]);
an[i].addActionListener(this);
rq2.add(an[i]);
}
c.add(rq1);
c.add(rq2);
qingkong.addActionListener(this);
setSize(190, 200);
setVisible(true);
}
public static void main(String[] args) {
计数器_一般 s = new 计数器_一般();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
if (!(e.getSource() == an[3] || e.getSource() == an[7]
|| e.getSource() == an[11] || e.getSource() == an[13]
|| e.getSource() == an[14] || e.getSource() == an[15] || e
.getSource() == qingkong)) {
if (e.getSource() == an[12]) {
s += e.getActionCommand();
char a = s.charAt(0);
if (a == '0') {
s = "0.";
k.setText(s);
}
} else {
s += e.getActionCommand();
k.setText(s);
ff = true;
}
} else {
if (e.getSource() == qingkong) {
k.setText("");
fo = 0;
shu1 = "";
s = "";
}
if (e.getSource() == an[13]) {
String ss = s;
ss += e.getActionCommand();
char a = ss.charAt(0);
if (a == '.') {
s = "";
} else {
if (ss.matches("[0-9].")) {
s += e.getActionCommand();
k.setText(s);
}
}
}
if (ff) {
ff = false;
if (e.getSource() == an[3]) {
if (k.getText().equals(""))
;
else {
if (shu1.equals("")) {
shu1 = k.getText();
k.setText("/");
s = "";
fo = 3;
} else {
shu2 = k.getText();
jishu(fo, shu1, shu2);
fo = 3;
}
}
}
if (e.getSource() == an[7]) {
if (k.getText().equals(""))
;
else {
if (shu1.equals("")) {
shu1 = k.getText();
k.setText("*");
s = "";
fo = 7;
} else {
shu2 = k.getText();
jishu(fo, shu1, shu2);
fo = 7;
}
}
}
if (e.getSource() == an[11]) {
if (k.getText().equals(""))
;
else {
if (shu1.equals("")) {
shu1 = k.getText();
k.setText("-");
s = "";
fo = 11;
} else {
shu2 = k.getText();
jishu(fo, shu1, shu2);
fo = 11;
}
}
}
if (e.getSource() == an[15]) {
if (k.getText().equals(""))
;
else {
if (shu1.equals("")) {
shu1 = k.getText();
k.setText("+");
s = "";
fo = 15;
} else {
shu2 = k.getText();
jishu(fo, shu1, shu2);
fo = 15;
}
}
}
if (e.getSource() == an[14]) {
if (k.getText().equals("") || shu1.equals(""))
;
else {
shu2 = k.getText();
jishu(fo, shu1, shu2);
}
}
}
}
}
public void jishu(int fj, String s1, String s2) {
DecimalFormat twoDigits = new DecimalFormat("0.00");
double a, b;
a = Double.parseDouble(s1);
b = Double.parseDouble(s2);
switch (fj) {
case 3:
shu3 = twoDigits.format((double) (a / b));
k.setText(shu3);
break;
case 7:
shu3 = twoDigits.format((double) (a * b));
k.setText(shu3);
break;
case 11:
shu3 = twoDigits.format((double) (a - b));
k.setText(shu3);
break;
case 15:
shu3 = twoDigits.format((double) (a + b));
k.setText(shu3);
break;
}
s = "";
shu1 = shu3;
shu2 = "";
}
}