import javax.swing.text.AttributeSet; |
import javax.swing.text.BadLocationException; |
import javax.swing.text.PlainDocument; |
|
public class MyDocument extends PlainDocument{ |
int maxLength = 20 ; |
public MyDocument( int newMaxLength){ |
super (); |
maxLength = newMaxLength; |
} |
public MyDocument(){ |
this ( 20 ); |
} |
public void insertString( int offset,String str,AttributeSet a) throws BadLocationException{ |
if (getLength()+str.length()>maxLength){ |
return ; |
} |
else { |
super .insertString(offset,str,a); |
|
} |
} |
} |
import java.awt.Color; |
import java.awt.Container; |
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.JMenu; |
import javax.swing.JMenuBar; |
import javax.swing.JMenuItem; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
import javax.swing.JTextField; |
|
public class CounterFrame extends JFrame implements ActionListener { |
|
private static final long serialVersionUID = 1L; |
//获得内容面板 |
private Container con=getContentPane(); |
//创建菜单栏,菜单及菜单项 |
private JMenuBar menuBar= new JMenuBar(); |
private JMenu viewmenu= new JMenu( "查看(V)" ); |
private JMenu helpmenu= new JMenu( "帮助(H)" ); |
private JMenuItem general = new JMenuItem( "标准型(T)" , 'T' ); |
private JMenuItem color = new JMenuItem( "个性型(C)" , 'C' ); |
private JMenuItem about= new JMenuItem( "关于(A)" , 'A' ); |
//创建一个容量为30个字符的文本框 |
private JTextField textField= new JTextField( 30 ); |
//创建JLabel |
private JLabel label= new JLabel(); |
//创建计算器的各种按钮 |
private JButton[] button= new JButton[ 27 ]; |
private String[] buttonstr={ "退格" , "CE" , "C" , "MC" , "7" , "8" , "9" , "/" , "sqrt" , |
"MR" , "4" , "5" , "6" , "*" , "%" , "MS" , "1" , "2" , "3" , "-" , "1/x" , |
"M+" , "0" , "+/-" , "." , "+" , "=" }; |
//创建各种面板 |
private JPanel panel= new JPanel(); |
private JPanel childPanel= new JPanel(); |
private JPanel childPanel1= new JPanel(); |
private JPanel childPanel2= new JPanel(); |
private JPanel childPanel3= new JPanel(); |
private JPanel childPanel4= new JPanel(); |
private JPanel childPanel5= new JPanel(); |
private JPanel childPanel6= new JPanel(); |
//创建布局管理器 |
private GridLayout gridLayout= new GridLayout( 6 , 1 , 6 , 6 ); |
private GridLayout gridLayout1= new GridLayout( 1 , 3 , 6 , 6 ); |
private GridLayout gridLayout2= new GridLayout( 1 , 6 , 6 , 6 ); |
|
boolean tem= true ; //标识0 |
double cache= 0 ; //存储器 |
boolean temd= true ; //标识小数点 |
boolean temm= false ; //标识M+ |
boolean plus= false ; //标识加 |
boolean subtract= false ; //标识减 |
boolean mul= false ; //标识乘 |
boolean div= false ; //标识除 |
boolean rem= false ; //百分号 |
|
|
public CounterFrame(){ |
viewmenu.setMnemonic( 'V' ); |
viewmenu.add(general); |
general.addActionListener( new ActionListener(){ |
|
@Override |
public void actionPerformed(ActionEvent e) { |
childPanel.setBackground(Color.red); |
childPanel1.setBackground(Color.red); |
childPanel2.setBackground(Color.red); |
childPanel3.setBackground(Color.red); |
childPanel4.setBackground(Color.red); |
childPanel5.setBackground(Color.red); |
childPanel6.setBackground(Color.red); |
panel.setBackground(Color.red); |
} |
|
}); |
viewmenu.add(color); |
color.addActionListener( new ActionListener(){ |
|
@Override |
public void actionPerformed(ActionEvent e) { |
childPanel.setBackground(Color.blue); |
childPanel1.setBackground(Color.cyan); |
childPanel2.setBackground(Color.black); |
childPanel3.setBackground(Color.darkGray); |
childPanel4.setBackground(Color.green); |
childPanel5.setBackground(Color.lightGray); |
childPanel6.setBackground(Color.orange); |
panel.setBackground(Color.red); |
|
|
|
} |
|
}); |
helpmenu.setMnemonic( 'H' ); |
helpmenu.add(about); |
about.addActionListener( new ActionListener(){ |
|
@Override |
public void actionPerformed(ActionEvent e) { |
JOptionPane.showMessageDialog(CounterFrame. this , "孤风侠尘计算器1.0 作者:wustrive_2008" , |
" " ,JOptionPane.INFORMATION_MESSAGE); |
} |
|
}); |
|
menuBar.add(viewmenu); |
menuBar.add(helpmenu); |
this .setJMenuBar(menuBar); |
|
for ( int i= 0 ;i< 27 ;i++){ |
button[i]= new JButton(buttonstr[i]); |
button[i].addActionListener( this ); |
} |
|
panel.setLayout(gridLayout); |
panel.add(childPanel1); |
childPanel1.add(label); |
childPanel1.add(textField); |
label.setBounds( 10 , 10 , 10 , 10 ); |
textField.setEditable( false ); |
textField.setDocument( new MyDocument()); |
textField.setText( "0" ); |
textField.setBackground(Color.WHITE); |
textField.setHorizontalAlignment(JTextField.RIGHT); //设置文字从右边开始显示 |
|
panel.add(childPanel2); |
childPanel2.setLayout(gridLayout1); |
childPanel2.add(button[ 0 ]); |
childPanel2.add(button[ 1 ]); |
childPanel2.add(button[ 2 ]); |
|
panel.add(childPanel3); |
childPanel3.setLayout(gridLayout2); |
childPanel3.add(button[ 3 ]); |
childPanel3.add(button[ 4 ]); |
childPanel3.add(button[ 5 ]); |
childPanel3.add(button[ 6 ]); |
childPanel3.add(button[ 7 ]); |
childPanel3.add(button[ 8 ]); |
|
panel.add(childPanel4); |
childPanel4.setLayout(gridLayout2); |
childPanel4.add(button[ 9 ]); |
childPanel4.add(button[ 10 ]); |
childPanel4.add(button[ 11 ]); |
childPanel4.add(button[ 12 ]); |
childPanel4.add(button[ 13 ]); |
childPanel4.add(button[ 14 ]); |
|
panel.add(childPanel5); |
childPanel5.setLayout(gridLayout2); |
childPanel5.add(button[ 15 ]); |
childPanel5.add(button[ 16 ]); |
childPanel5.add(button[ 17 ]); |
childPanel5.add(button[ 18 ]); |
childPanel5.add(button[ 19 ]); |
childPanel5.add(button[ 20 ]); |
|
panel.add(childPanel6); |
childPanel6.setLayout(gridLayout2); |
childPanel6.add(button[ 21 ]); |
childPanel6.add(button[ 22 ]); |
childPanel6.add(button[ 23 ]); |
childPanel6.add(button[ 24 ]); |
childPanel6.add(button[ 25 ]); |
childPanel6.add(button[ 26 ]); |
|
|
childPanel.add(panel); |
con.add(childPanel); |
|
|
this .setResizable( false ); |
this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
this .setBounds( 400 , 300 , 400 , 300 ); |
this .setTitle( "孤风侠尘计算器" ); |
this .setVisible( true ); |
|
} |
|
//按钮事件处理 |
@Override |
public void actionPerformed(ActionEvent e) { |
if (e.getSource()==button[ 4 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 4 ]); |
} |
else { |
textField.setText(buttonstr[ 4 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 5 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 5 ]); |
} |
else { |
textField.setText(buttonstr[ 5 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 6 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 6 ]); |
} |
else { |
textField.setText(buttonstr[ 6 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 10 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 10 ]); |
} |
else { |
textField.setText(buttonstr[ 10 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 11 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 11 ]); |
} |
else { |
textField.setText(buttonstr[ 11 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 12 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 12 ]); |
} |
else { |
textField.setText(buttonstr[ 12 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 16 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 16 ]); |
} |
else { |
textField.setText(buttonstr[ 16 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 17 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 17 ]); |
} |
else { |
textField.setText(buttonstr[ 17 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 18 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 18 ]); |
} |
else { |
textField.setText(buttonstr[ 18 ]); |
tem= false ; |
} |
} |
if (e.getSource()==button[ 22 ]){ |
if (tem== false ){ |
textField.setText(textField.getText()+buttonstr[ 22 ]); |
} |
else { |
textField.setText(buttonstr[ 22 ]); |
//tem=false; |
} |
} |
if (e.getSource()==button[ 0 ]){ |
if (textField.getText().length()> 1 ){ |
textField.setText(textField.getText().substring( 0 ,textField.getText().length()- 1 )); |
} |
else { |
textField.setText( "0" ); |
tem= true ; |
} |
} |
//CE键:清除当前显示的数据 |
if (e.getSource()==button[ 1 ]){ |
textField.setText( "0" ); |
tem= true ; |
tem= true ; |
temd= true ; |
temm= false ; |
plus= false ; |
subtract= false ; |
mul= false ; |
div= false ; |
rem= false ; |
|
|
} |
|
//C键:清除所有数据 |
if (e.getSource()==button[ 2 ]){ |
textField.setText( "0" ); |
cache= 0 ; |
tem= true ; |
tem= true ; |
cache= 0 ; |
temd= true ; |
temm= false ; |
plus= false ; |
subtract= false ; |
mul= false ; |
div= false ; |
rem= false ; |
|
} |
|
//MR键:将存于存储器中的数据显示出来 |
if (e.getSource()==button[ 9 ]){ |
textField.setText( "" +cache+ "" ); |
} |
//MC键:清除存储器中数据 |
if (e.getSource()==button[ 3 ]){ |
cache= 0 ; |
label.setText( "" ); |
} |
|
|
//MS键:将显示的数据存储在存储器中 |
if (e.getSource()==button[ 15 ]){ |
cache=Double.parseDouble(textField.getText()); |
} |
|
//M+键:将显示的数据与存储器中的数据相加并进行存储 |
if (e.getSource()==button[ 21 ]){ |
label.setText( "M" ); |
cache=cache+Double.parseDouble(textField.getText()); |
temm= true ; |
|
} |
//处理小数点 |
if (e.getSource()==button[ 24 ]){ |
if (tem== false &&temd== true &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
textField.setText(textField.getText()+ "." ); |
temd= false ; |
} |
} |
//处理1/x |
if (e.getSource()==button[ 20 ]){ |
if (temd== true &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
textField.setText( "" + 1 /Double.parseDouble(textField.getText())+ "" ); |
tem= true ; |
} |
} |
//处理+/- |
if (e.getSource()==button[ 23 ]){ |
if (temd== true &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
Double dou=Double.parseDouble(textField.getText()); |
dou=-dou; |
textField.setText( "" +dou+ "" ); |
|
} |
} |
//除法 |
if (e.getSource()==button[ 7 ]){ |
if (tem== false &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
textField.setText(textField.getText()+ "/" ); |
div= true ; |
} |
} |
//乘法 |
if (e.getSource()==button[ 13 ]){ |
if (tem== false &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
textField.setText(textField.getText()+ "*" ); |
mul= true ; |
} |
} |
//百分数表示 |
if (e.getSource()==button[ 14 ]){ |
if ((plus== true &&subtract== false &&mul== false &&div== false )||(plus== false &&subtract== true &&mul== false &&div== false )|| |
(plus== false &&subtract== false &&mul== true &&div== false )||(plus== false &&subtract== false &&mul== false &&div== true )){ |
if (plus== true ){ |
int i=textField.getText().indexOf( "+" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
textField.setText( "" +(Double.parseDouble(substr1)+Double.parseDouble(substr1)*Double.parseDouble(substr2)/ 100 )+ "" ); |
} |
if (subtract== true ){ |
int i=textField.getText().indexOf( "-" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
textField.setText( "" +(Double.parseDouble(substr1)-Double.parseDouble(substr1)*Double.parseDouble(substr2)/ 100 )+ "" ); |
} |
if (mul== true ){ |
int i=textField.getText().indexOf( "*" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
textField.setText( "" +(Double.parseDouble(substr1)*(Double.parseDouble(substr1)*Double.parseDouble(substr2)/ 100 ))+ "" ); |
} |
if (subtract== true ){ |
int i=textField.getText().indexOf( "/" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
textField.setText( "" +(Double.parseDouble(substr1)/(Double.parseDouble(substr1)*Double.parseDouble(substr2)/ 100 ))+ "" ); |
} |
} |
|
|
} |
//加法 |
if (e.getSource()==button[ 25 ]){ |
if (tem== false &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
textField.setText(textField.getText()+ "+" ); |
plus= true ; |
} |
} |
//减法 |
if (e.getSource()==button[ 19 ]){ |
if (tem== false &&plus== false &&subtract== false &&mul== false &&rem== false &&div== false ){ |
textField.setText(textField.getText()+ "-" ); |
subtract= true ; |
} |
} |
//等于 |
if (e.getSource()==button[ 26 ]){ |
if (plus== true ){ |
int i=textField.getText().indexOf( "+" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
if (substr2.length()== 0 ){ |
textField.setText( "" +substr1+ "" ); |
} |
else { |
double result=Double.parseDouble(substr1)+Integer.parseInt(substr2); |
textField.setText( "" +result+ "" ); |
} |
|
plus= false ; |
tem= true ; |
} |
if (subtract== true ){ |
int i=textField.getText().indexOf( "-" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
if (substr2.length()== 0 ){ |
textField.setText( "" +substr1+ "" ); |
} |
else { |
double result=Double.parseDouble(substr1)-Integer.parseInt(substr2); |
textField.setText( "" +result+ "" ); |
} |
|
subtract= false ; |
tem= true ; |
} |
if (mul== true ){ |
int i=textField.getText().indexOf( "*" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
if (substr2.length()== 0 ){ |
textField.setText( "" +substr1+ "" ); |
} |
else { |
double result=Double.parseDouble(substr1)*Integer.parseInt(substr2); |
textField.setText( "" +result+ "" ); |
} |
|
mul= false ; |
tem= true ; |
} |
if (div== true ){ |
int i=textField.getText().indexOf( "/" ); |
String substr1=textField.getText().substring( 0 ,i); |
String substr2=textField.getText().substring(i+ 1 ,textField.getText().length()); |
if (substr2.length()== 0 ){ |
textField.setText( "" +substr1+ "" ); |
} |
else if (Double.parseDouble(substr2)== 0 ){ |
textField.setText( "除数不能为零" ); |
} |
else { |
double result=Double.parseDouble(substr1)/Double.parseDouble(substr2); |
textField.setText( "" +result+ "" ); |
} |
|
div= false ; |
tem= true ; |
} |
} |
//求平方根 |
if (e.getSource()==button[ 8 ]){ |
if (plus== false &&subtract== false &&mul== false &&rem== false &&div== false &&tem== false ){ |
textField.setText( "" +Math.sqrt(Double.parseDouble(textField.getText()))+ "" ); |
tem= true ; |
} |
|
} |
} |
|
|
} //源代码片段来自云代码http://yuncode.net |
package Experience5; |
import java.awt.BorderLayout; |
import java.awt.Component; |
import java.awt.GridBagConstraints; |
import java.awt.GridBagLayout; |
import java.awt.GridLayout; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import javax.swing.*; |
public class SimpleCalculator extends JFrame implements ActionListener{ |
JTextField jText; |
Boolean state= false ; |
double firstOperator,secondOperator; |
int operate; |
int count= 0 ; |
|
//控件的定义 |
JPanel jUpPanel; |
JPanel jDownPanel; |
GridBagLayout gbLayout; |
GridBagConstraints gbConstraints; |
String[] jButNames={ "7" , "8" , "9" , "/" , "4" , "5" , "6" , "*" , "1" , "2" , "3" , "-" , "0" , "." , "=" , "+" }; |
JButton[] jButs = new JButton[ 16 ]; |
|
public static void main(String args[]) |
{ |
SimpleCalculator calculator= new SimpleCalculator(); |
} |
|
public SimpleCalculator() |
{ |
super ( "A Simple Calculator" ); |
|
//窗体的设定 |
this .setSize( 400 , 300 ); |
this .setDefaultCloseOperation(EXIT_ON_CLOSE); |
//this.pack(); |
this .setVisible( true ); |
|
//框架的定义 |
jUpPanel= new JPanel(); |
jDownPanel= new JPanel(); |
gbLayout= new GridBagLayout(); |
gbConstraints= new GridBagConstraints(); |
this .getContentPane().setLayout(gbLayout); |
|
gbConstraints.weightx = 1 ; |
gbConstraints.weighty = 0 ; |
gbConstraints.fill = GridBagConstraints.BOTH; |
gbConstraints.gridx= 0 ; |
gbConstraints.gridy= 0 ; |
gbConstraints.gridheight= 1 ; |
gbConstraints.gridwidth= 4 ; |
gbLayout.setConstraints(jUpPanel, gbConstraints); |
this .getContentPane().add(jUpPanel); |
gbConstraints.weighty = 1 ; |
gbConstraints.gridx= 0 ; |
gbConstraints.gridy= 1 ; |
gbConstraints.gridheight= 4 ; |
gbConstraints.gridwidth= 4 ; |
gbLayout.setConstraints(jDownPanel, gbConstraints); |
this .getContentPane().add(jDownPanel); |
/* |
gbConstraints.weightx = 1; |
gbConstraints.weighty = 0; |
gbConstraints.fill = GridBagConstraints.BOTH; |
addComponent(jUpPanel, gbLayout, gbConstraints, 0, 0, 4, 1); |
gbConstraints.weighty = 1; |
addComponent(jDownPanel, gbLayout, gbConstraints, 1, 0, 4, 4); |
this.getContentPane().setLayout(gbLayout); |
*/ |
|
//jUpPanel内容的填充 |
jText= new JTextField(); |
jText.setHorizontalAlignment(JTextField.RIGHT); |
jText.setEnabled( false ); |
jText.setText( "本计算器支持连续操作,即1+3-4+5=这样的操作" ); |
jUpPanel.setLayout( new BorderLayout()); |
jUpPanel.add(jText); |
|
//jDownPanel内容的填充 |
jDownPanel.setLayout( new GridLayout( 4 , 4 )); |
for ( int i= 0 ;i< 16 ;i++) |
{ |
jButs[i]= new JButton(jButNames[i]); |
jButs[i].addActionListener( this ); |
jButs[i].setActionCommand(jButs[i].getName()); |
jDownPanel.add(jButs[i]); |
} |
|
} |
@Override |
public void actionPerformed(ActionEvent e) { |
// TODO Auto-generated method stub |
|
if (e.getSource()==jButs[ 3 ]||e.getSource()==jButs[ 7 ]||e.getSource()==jButs[ 11 ]||e.getSource()==jButs[ 15 ]) |
{ |
double temp= 0.0 ; |
count++; |
try |
{ |
temp=Double.parseDouble(jText.getText()); |
} |
catch (Exception ex) |
{ |
ex.printStackTrace(); |
JOptionPane.showMessageDialog((Component) e.getSource(), "第一个操作数不正确" ); |
System.exit( 0 ); |
} |
if (count> 1 ) |
{ |
if (operate== 1 ) |
temp=firstOperator/temp; |
else if (operate== 2 ) |
temp=firstOperator*temp; |
else if (operate== 3 ) |
temp=firstOperator-temp; |
else |
temp=firstOperator+temp; |
jText.setText(Double.toString(temp)); |
state= false ; |
} |
else |
{ |
jText.setText( "" ); |
} |
if (e.getSource()==jButs[ 3 ]) |
operate= 1 ; |
else if (e.getSource()==jButs[ 7 ]) |
operate= 2 ; |
else if (e.getSource()==jButs[ 11 ]) |
operate= 3 ; |
else |
operate= 4 ; |
firstOperator=temp; |
} |
else if (e.getSource()==jButs[ 14 ]) |
{ |
double answer; |
count= 0 ; |
try |
{ |
secondOperator=Double.parseDouble(jText.getText()); |
} |
catch (Exception ex) |
{ |
ex.printStackTrace(); |
JOptionPane.showMessageDialog((Component) e.getSource(), "第二个操作数不正确" ); |
System.exit( 0 ); |
} |
|
if (operate== 1 ) |
answer=firstOperator/secondOperator; |
else if (operate== 2 ) |
answer=firstOperator*secondOperator; |
else if (operate== 3 ) |
answer=firstOperator-secondOperator; |
else |
answer=firstOperator+secondOperator; |
jText.setText(Double.toString(answer)); |
state= false ; |
} |
else |
{ |
if (state) |
jText.setText(jText.getText()+e.getActionCommand()); |
else |
{ |
state= true ; |
jText.setText(e.getActionCommand()); |
|
} |
} |
} |
|
/* |
private void addComponent(Component c, GridBagLayout g, |
GridBagConstraints gc, int row, int column, int width, int height) { |
gc.gridx = column; |
gc.gridy = row; |
gc.gridwidth = width; |
gc.gridheight = height; |
g.setConstraints(c, gc); |
add(c); |
} |
*/ |
|
} |
//源代码片段来自云代码http://yuncode.net |
|
|
初级程序员
by: 来了老弟 发表于:2018-12-26 09:15:25 顶(0) | 踩(0) 回复
e
回复评论