日期:2014-05-20  浏览次数:20705 次

swing编程时,其中的组件打不开
各位Java大牛,麻烦帮我看一下这个问题,我在做一个计算器的时候,写了一个界面类CalFrame,本想先用main方法去调用一下,看一下界面的效果,但是怎么其中的按钮和编辑条组件去打不开,这是我的代码:
package xlh.crazy.test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
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.JPanel;
import javax.swing.JTextField;


public class CalFrame extends JFrame{
private JTextField jtext = null;
String[] mOp = {"MC", "MR", "MS", "M+"};
private String[] rOp = { "Back", "CE", "C" };
// 用一个数组保存数字与其它操作符
private String[] nOp = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",
"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
// M操作标志按钮
private JButton button = null;
// 业务逻辑类
private CalService service = new CalService();
private ActionListener actionListener = null;
// 设置panel的宽
private final int PRE_WIDTH = 470;
// 设置panel的高
private final int PRE_HEIGHT = 250;

/**
 * 默认构造器
 */
public CalFrame() {
super();
initialize();
}


//void initialize(),初始化计算器界面。
public void initialize() {
this.setTitle("计算器");
this.setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout(10,1));
panel.add(getTextField(),BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(PRE_WIDTH,PRE_HEIGHT));

JButton[] mButt = getMButton();
JPanel panel1 = new JPanel();
panel1.setLayout(new GridLayout(5,2,0,5));
for(JButton b:mButt)
panel1.add(b);

JButton[] rButt = getRButton();
JPanel panel2 = new JPanel();
panel2.setLayout(new BorderLayout(1,5));
JPanel panel21 = new JPanel();
panel21.setLayout(new GridLayout(1,3,3,3));
for(JButton r:rButt)
panel21.add(r);
JButton[] nButt = getNButton();
JPanel panel22 = new JPanel();
panel22.setLayout(new GridLayout(4,5,3,5));
for(JButton n:nButt)
panel22.add(n);
panel2.add(panel22, BorderLayout.NORTH);
panel2.add(panel21, BorderLayout.CENTER);
panel.add(panel1, BorderLayout.WEST);
panel.add(panel2, BorderLayout.CENTER);
this.add(panel);
//this.setVisible(true);




}
//如果动作监听器为空,则创建一个,并返回,如果不为空,直接返回。
public ActionListener getActionListener(){
if(actionListener == null)
{
actionListener = new ActionListener(){


@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
String result = null;

try {
result = service.callMethod(cmd,jtext.getText());
} catch (Exception e1) {
System.out.println(e1.getMessage());
//e1.printStackTrace();
}

if(cmd.indexOf("MC")==0){
button.setText("");
}else if(cmd.indexOf("M")==0&&service.getStore()>0){
button.setText("M");
}
if(result!=null){
jtext.setText(result);
}
}

};

}
return actionListener;
}
//初始化输入框
public JTextField getTextField(){
// JTextField textfield = new JTextField();
// textfield.setEditable(false);
// //textfield.setHorizontalAlignment(JTextField.LEFT);
// return textfield;
if (jtext == null) {
// 设置默认值为0
jtext = new JTextField("0");
// 设置为不可编辑
jtext.setEditable(false);
// 设置背景为白色
jtext.setBackground(Color.white);
}
return jtext;

}
//获得计算器的存储操作键
public JButton[] getMButton(){
JButton[] result = new JButton[mOp.length+1];
result[0] = getButton();
for(int i = 0; i < mOp.length; i++)
{
JButton b = new JButton(mOp[i]);
b.addActionListener(getActionListener());
b.setForeground(Color.red);
result[i+1] = b;
}
return result;
}
private JButton getButton() {
JButton tempButton = new JButton();
//tempButton.setB
tempButton.setBorderPainted(false);

return tempButton;
}


//获得计算器的结果操作键
public JButton[] getRButton(){
JButton[] result = new JButton[this.rOp.length];
for(int i = 0; i < rOp.length; i++)
{
JButton jb = new JButton(rOp[i]);
jb.addActionListener(getActionListener());
jb.setForeground(Color.red);
result[i] = jb;