import java.util.*;
import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;
public class LoanJFrame extends JFrame implements ActionListener 
{
private JTextField text_money,text_rate,text_year;
private JSpinner spin_year,spin_month;
private JButton button;
private JTable table;

public LoanJFrame()
{
super("银行贷款按月还本付息的计算");
this.setBounds(300,240,800,400);
this.setBackground(Color.lightGray);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel panel=new JPanel();
this.getContentPane().add(panel,"North");
panel.add(new JLabel("贷款金额"));
text_money=new JTextField("100000",6);
panel.add(text_money);

panel.add(new JLabel("元  贷款利率"));
text_rate=new JTextField("0.5025",6);
panel.add(text_rate);
panel.add(new JLabel("%/月  贷款年限"));
text_year=new JTextField("5",3);
panel.add(text_year);

panel.add(new JLabel("年  起始年月"));
Calendar today=Calendar.getInstance();
int year=today.get(Calendar.YEAR);
int nextmonth=today.get(Calendar.MONTH)+1;
nextmonth=nextmonth%12+1;
if(nextmonth==1)
year++;
spin_year=new JSpinner();
spin_year.setValue(year);
panel.add(spin_year);
panel.add(new JLabel("年"));
spin_month=new JSpinner(new SpinnerNumberModel(nextmonth,1,12,1));

panel.add(spin_month);
panel.add(new JLabel("月"));
button=new JButton("计算");
panel.add(button);
button.addActionListener(this);
// actionPerformed(null);
this.getContentPane().add(new JScrollPane(table));
this.setVisible(true);
}

public void actionPerformed(ActionEvent e)
{
String titles[]={"年月","本金金额(元)","月还本金(元)","月还利息(元","月还本息(元)"};
int months=Integer.parseInt(text_year.getText())*12;
Object datas[][]=new Object[months][5];
int year=Integer.parseInt(""+spin_year.getValue());
int mon=Integer.parseInt(""+spin_month.getValue());
double leavings=Double.parseDouble(""+text_money.getText());
double pay=leavings/months;
double rate=Double.parseDouble(""+text_rate.getText());
for(int i=0;i<months;i++)
{
datas[i][0]=year+"年"+mon+"月";
datas[i][1]=String.format("%9.2f",leavings);
datas[i][2]=String.format("%9.2f",pay);
datas[i][3]=String.format("%9.2f",leavings*rate*0.01);
datas[i][4]=String.format("%9.2f",pay+leavings*rate*0.01);
if(mon==12)
year++;
mon=mon%12+1;
leavings-=pay;
}
table=new JTable(datas,titles);
}

public static void main(String arg[])
{
new LoanJFrame();
}
}
我检查不出问题,难道我的Java系统库遭病毒破坏了?(是不是想太多?)

解决方案 »

  1.   

     是swing吧?你在界面看下 button 的事件  是不是你后台的那个事件
      

  2.   

    button.addActionListener(this); 
      

  3.   

    想太多了。你那个button要add到父容器中:package com.withiter.csdn.test;import java.util.*;
    import java.awt.Color;
    import java.awt.event.*;
    import javax.swing.*;
    public class LoanJFrame extends JFrame implements ActionListener 
    {
        private JTextField text_money,text_rate,text_year;
        private JSpinner spin_year,spin_month;
        private JButton button;
        private JTable table;
         
        public LoanJFrame()
        {
            super("银行贷款按月还本付息的计算");
            this.setBounds(300,240,800,400);
            this.setBackground(Color.lightGray);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            JPanel panel=new JPanel();
            this.getContentPane().add(panel,"North");
            panel.add(new JLabel("贷款金额"));
            text_money=new JTextField("100000",6);
            panel.add(text_money);
             
            panel.add(new JLabel("元  贷款利率"));
            text_rate=new JTextField("0.5025",6);
            panel.add(text_rate);
            panel.add(new JLabel("%/月  贷款年限"));
            text_year=new JTextField("5",3);
            panel.add(text_year);
             
            panel.add(new JLabel("年  起始年月"));
            Calendar today=Calendar.getInstance();
            int year=today.get(Calendar.YEAR);
            int nextmonth=today.get(Calendar.MONTH)+1;
            nextmonth=nextmonth%12+1;
            if(nextmonth==1)
                year++;
            spin_year=new JSpinner();
            spin_year.setValue(year);
            panel.add(spin_year);
            panel.add(new JLabel("年"));
            spin_month=new JSpinner(new SpinnerNumberModel(nextmonth,1,12,1));
             
            panel.add(spin_month);
            panel.add(new JLabel("月"));
            button=new JButton("计算");
            panel.add(button);
            button.addActionListener(this);
    //        actionPerformed(null);
            this.getContentPane().add(new JScrollPane(table));
            this.getContentPane().add(button);
            this.setVisible(true);
        }
         
        public void actionPerformed(ActionEvent e)
        {
        
         System.out.println("button clicked");
            String titles[]={"年月","本金金额(元)","月还本金(元)","月还利息(元","月还本息(元)"};
            int months=Integer.parseInt(text_year.getText())*12;
            Object datas[][]=new Object[months][5];
            int year=Integer.parseInt(""+spin_year.getValue());
            int mon=Integer.parseInt(""+spin_month.getValue());
            double leavings=Double.parseDouble(""+text_money.getText());
            double pay=leavings/months;
            double rate=Double.parseDouble(""+text_rate.getText());
            for(int i=0;i<months;i++)
            {
                datas[i][0]=year+"年"+mon+"月";
                datas[i][1]=String.format("%9.2f",leavings);
                datas[i][2]=String.format("%9.2f",pay);
                datas[i][3]=String.format("%9.2f",leavings*rate*0.01);
                datas[i][4]=String.format("%9.2f",pay+leavings*rate*0.01);
                if(mon==12)
                    year++;
                mon=mon%12+1;
                leavings-=pay;
            }
            table=new JTable(datas,titles);
        }
         
        public static void main(String arg[])
        {
            new LoanJFrame();
        }
    }
      

  4.   


    import java.util.*;
    import java.awt.Color;
    import java.awt.event.*;
    import javax.swing.*;public class LoanJFrame extends JFrame implements ActionListener {
    private JTextField text_money, text_rate, text_year;
    private JSpinner spin_year, spin_month;
    private JButton button;
    private JTable table;
    private JPanel panel = new JPanel(); public LoanJFrame() {
    super("银行贷款按月还本付息的计算");
    this.setBounds(300, 240, 800, 400);
    this.setBackground(Color.lightGray);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    this.getContentPane().add(panel, "North");
    panel.add(new JLabel("贷款金额"));
    text_money = new JTextField("100000", 6);
    panel.add(text_money); panel.add(new JLabel("元  贷款利率"));
    text_rate = new JTextField("0.5025", 6);
    panel.add(text_rate);
    panel.add(new JLabel("%/月  贷款年限"));
    text_year = new JTextField("5", 3);
    panel.add(text_year); panel.add(new JLabel("年  起始年月"));
    Calendar today = Calendar.getInstance();
    int year = today.get(Calendar.YEAR);
    int nextmonth = today.get(Calendar.MONTH) + 1;
    nextmonth = nextmonth % 12 + 1;
    if (nextmonth == 1)
    year++;
    spin_year = new JSpinner();
    spin_year.setValue(year);
    panel.add(spin_year);
    panel.add(new JLabel("年"));
    spin_month = new JSpinner(new SpinnerNumberModel(nextmonth, 1, 12, 1)); panel.add(spin_month);
    panel.add(new JLabel("月"));
    button = new JButton("计算");
    panel.add(button);
    button.addActionListener(this);
    // actionPerformed(null);
    this.getContentPane().add(new JScrollPane(table));
    this.setVisible(true);
    } public void actionPerformed(ActionEvent e) {
    String titles[] = { "年月", "本金金额(元)", "月还本金(元)", "月还利息(元", "月还本息(元)" };
    int months = Integer.parseInt(text_year.getText()) * 12;
    Object datas[][] = new Object[months][5];
    int year = Integer.parseInt("" + spin_year.getValue());
    int mon = Integer.parseInt("" + spin_month.getValue());
    double leavings = Double.parseDouble("" + text_money.getText());
    double pay = leavings / months;
    double rate = Double.parseDouble("" + text_rate.getText());
    for (int i = 0; i < months; i++) {
    datas[i][0] = year + "年" + mon + "月";
    datas[i][1] = String.format("%9.2f", leavings);
    datas[i][2] = String.format("%9.2f", pay);
    datas[i][3] = String.format("%9.2f", leavings * rate * 0.01);
    datas[i][4] = String.format("%9.2f", pay + leavings * rate * 0.01);
    if (mon == 12)
    year++;
    mon = mon % 12 + 1;
    leavings -= pay;
    }
    table = new JTable(datas, titles);
    panel.add(table);
    panel.updateUI();
    } public static void main(String arg[]) {
    new LoanJFrame();
    }
    }
      

  5.   

    问题已解决:
    第11行添加:
    private JScrollPane scroll;
    49、50两行改为:
    scroll=new JScrollPane(table);
    this.getContentPane().add(scroll);
    actionPerformed(null);
    76行后面添加一行:
    scroll.setViewportView(table);程序运行界面: