public static void main(String[] args) { new JiSuanQi(); } } //监听,实现监听 class AAA implements ActionListener{ public void actionPerformed(ActionEvent e){ Object obj=e.getSource(); System.out.println(obj.toString()); } }
//运行不了 Exception in thread "main" java.lang.UnsatisfiedLinkError: getCreatedFontHandle at sun.font.FontManager.getCreatedFontHandle(Native Method) at sun.font.FontManager.setSameHandle(FontManager.java:429) at javax.swing.plaf.FontUIResource.<init>(FontUIResource.java:42) at javax.swing.plaf.metal.DefaultMetalTheme$FontDelegate.getFont(DefaultMetalTheme.java:230) at javax.swing.plaf.metal.DefaultMetalTheme.getFont(DefaultMetalTheme.java:184) at javax.swing.plaf.metal.DefaultMetalTheme.getUserTextFont(DefaultMetalTheme.java:168) at javax.swing.plaf.metal.MetalLookAndFeel$FontActiveValue.createValue(MetalLookAndFeel.java:1684) at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:200) at javax.swing.UIDefaults.get(UIDefaults.java:130) at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44) at javax.swing.UIDefaults.getFont(UIDefaults.java:350) at javax.swing.UIManager.getFont(UIManager.java:567) at javax.swing.plaf.basic.BasicTextUI.installDefaults(BasicTextUI.java:217) at javax.swing.plaf.basic.BasicTextUI.installUI(BasicTextUI.java:682) at javax.swing.plaf.basic.BasicTextFieldUI.installUI(BasicTextFieldUI.java:57) at javax.swing.JComponent.setUI(JComponent.java:653) at javax.swing.text.JTextComponent.setUI(JTextComponent.java:298) at javax.swing.text.JTextComponent.updateUI(JTextComponent.java:308) at javax.swing.text.JTextComponent.<init>(JTextComponent.java:282) at javax.swing.JTextField.<init>(JTextField.java:207) at javax.swing.JTextField.<init>(JTextField.java:174) at JiSuanQi.<init>(JiSuanQi.java:12) at JiSuanQi.main(JiSuanQi.java:55)
计算器可以用BorderLayout和GridLayout结合,外层用BorderLayout,数字键盘用GridLayout。自己试试吧,有了问题再来问。
* @(#)JiSuanQi.java
*空布局计算器
*
* @author
* @version 1.00 2007/10/24
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JiSuanQi extends JFrame{
JTextField t=new JTextField(20);
JButton[] b=new JButton[27];
String[] s={"Backspace","CE","C",
"MC","7","8","9","/","sqlt",
"MR","4","5","6","*","%",
"MS","1","2","3","-","1/x",
"M+","0","+/-",".","+","="
};
public JiSuanQi() {
this.setLayout(null);
this.add(t);
t.setBounds(10,10,400,20);
for(int i=0;i<27;i++){
b[i]=new JButton(s[i]);
b[i].addActionListener(new AAA());//注册监听
this.add(b[i]);
}
for(int i=0;i<3;i++){
b[i].setBounds(90+(60+50)*i,40,100,20);
}
int n=3;
for(int i=0;i<4;i++){
for(int j=0;j<6;j++){
if((n-3)%6==0){
b[n].setBounds(10,70+(25+5)*i,60,25);
}else{
b[n].setBounds(90+(60+5)*(j-1),70+(25+5)*i,60,25);
}
n++;
}
}
this.setSize(425,240);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new JiSuanQi();
}
}
//监听,实现监听
class AAA implements ActionListener{
public void actionPerformed(ActionEvent e){
Object obj=e.getSource();
System.out.println(obj.toString());
}
}
Exception in thread "main" java.lang.UnsatisfiedLinkError: getCreatedFontHandle
at sun.font.FontManager.getCreatedFontHandle(Native Method)
at sun.font.FontManager.setSameHandle(FontManager.java:429)
at javax.swing.plaf.FontUIResource.<init>(FontUIResource.java:42)
at javax.swing.plaf.metal.DefaultMetalTheme$FontDelegate.getFont(DefaultMetalTheme.java:230)
at javax.swing.plaf.metal.DefaultMetalTheme.getFont(DefaultMetalTheme.java:184)
at javax.swing.plaf.metal.DefaultMetalTheme.getUserTextFont(DefaultMetalTheme.java:168)
at javax.swing.plaf.metal.MetalLookAndFeel$FontActiveValue.createValue(MetalLookAndFeel.java:1684)
at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:200)
at javax.swing.UIDefaults.get(UIDefaults.java:130)
at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44)
at javax.swing.UIDefaults.getFont(UIDefaults.java:350)
at javax.swing.UIManager.getFont(UIManager.java:567)
at javax.swing.plaf.basic.BasicTextUI.installDefaults(BasicTextUI.java:217)
at javax.swing.plaf.basic.BasicTextUI.installUI(BasicTextUI.java:682)
at javax.swing.plaf.basic.BasicTextFieldUI.installUI(BasicTextFieldUI.java:57)
at javax.swing.JComponent.setUI(JComponent.java:653)
at javax.swing.text.JTextComponent.setUI(JTextComponent.java:298)
at javax.swing.text.JTextComponent.updateUI(JTextComponent.java:308)
at javax.swing.text.JTextComponent.<init>(JTextComponent.java:282)
at javax.swing.JTextField.<init>(JTextField.java:207)
at javax.swing.JTextField.<init>(JTextField.java:174)
at JiSuanQi.<init>(JiSuanQi.java:12)
at JiSuanQi.main(JiSuanQi.java:55)
还是用 BorderLayout 自己写,写多了就会知道怎么好写的
可以先从简单的布局开始,我以前也是这样的呀,现在也可以自己写了,太复杂的,可以想一下可不可以换一种设计的方法
我想没有必要跟自己过不去
/**
* @(#)JiSuanQi.java
*空布局计算器
*
* @author
* @version 1.00 2007/10/24
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JiSuanQi extends JFrame{
JTextField t=new JTextField(20);
JButton[] b=new JButton[27];
String[] s={"Backspace","CE","C",
"MC","7","8","9","/","sqlt",
"MR","4","5","6","*","%",
"MS","1","2","3","-","1/x",
"M+","0","+/-",".","+","="
};
public JiSuanQi() {
this.setLayout(null);
this.add(t);
t.setBounds(10,10,400,20);
for(int i=0;i<27;i++){
b[i]=new JButton(s[i]);
b[i].addActionListener(new AAA());//注册监听
this.add(b[i]);
}
for(int i=0;i<3;i++){
b[i].setBounds(90+(60+50)*i,40,100,20);
}
int n=3;
for(int i=0;i<4;i++){
for(int j=0;j<6;j++){
if((n-3)%6==0){
b[n].setBounds(10,70+(25+5)*i,60,25);
}else{
b[n].setBounds(90+(60+5)*(j-1),70+(25+5)*i,60,25);
}
n++;
}
}
this.setSize(425,240);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new JiSuanQi();
}
}
//监听,实现监听
class AAA implements ActionListener{
public void actionPerformed(ActionEvent e){
Object obj=e.getSource();
System.out.println(obj.toString());
}
}
import java.awt.*;
import java.awt.event.*;public class Calculator extends JFrame implements ActionListener {
char[] buttonLabels = {'7', '8', '9', '+', '4', '5', '6', '-', '1', '2', '3', '*', '0', '.', '=', '/'};
JTextField output;
public Calculator() {
super("计算器");
JPanel main = new JPanel() { public Insets getInsets() { return new Insets(4, 4, 4, 4); } };
main.setLayout(new BorderLayout(4, 4));
// 上半部分
JPanel top = new JPanel();
top.setLayout(new BorderLayout(4, 4));
output = new JTextField();
output.setHorizontalAlignment(JTextField.RIGHT);
JButton clear = new JButton("C");
clear.addActionListener(this);
top.add(output, BorderLayout.CENTER);
top.add(clear, BorderLayout.EAST);
main.add(top, BorderLayout.NORTH);
// 下半部分
JPanel bottom = new JPanel();
bottom.setLayout(new GridLayout(4, 4, 4, 4));
for (int i=0; i<buttonLabels.length; i++) {
JButton btn = new JButton(Character.toString(buttonLabels[i]));
btn.addActionListener(this);
bottom.add(btn);
}
main.add(bottom, BorderLayout.CENTER);
setContentPane(main);
pack();
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
char c = ((JButton)e.getSource()).getText().charAt(0);
if (c == 'C') output.setText("");
else output.setText(output.getText() + c);
}
public static void main(String[] args) {
new Calculator().setVisible(true);
}
}