如代码,但是鼠标点到table的cell里面,正行内容就被擦除了,怎么修改啊。
不想内容被抹掉。
package com.swing;import java.awt.BorderLayout;public class AbstractJTable extends JFrame {
private JTextField textField;
private JTextField textField_1; /**
 * Launch the application.
 */
TimeZone tz = TimeZone.getTimeZone("GMT+8");
Locale loc = Locale.CHINA;
Calendar cal = Calendar.getInstance(tz, loc);
Calendar first = Calendar.getInstance();
int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
private JTable table;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AbstractJTable frame = new AbstractJTable();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
 * Create the frame.
 */
public AbstractJTable() {
first.set(cal.YEAR, cal.MONTH, 1);
final int begin = first.get(Calendar.DAY_OF_WEEK);
//-------------------------------------------------------------------------------------//
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);

JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);

JMenu menu = new JMenu("New menu");
menuBar.add(menu);

JMenu menu_1 = new JMenu("New menu");
menu.add(menu_1);

JMenuItem menuItem = new JMenuItem("New menu item");
menu_1.add(menuItem);

JMenuItem menuItem_1 = new JMenuItem("New menu item");
menu_1.add(menuItem_1);

JMenu menu_2 = new JMenu("New menu");
menuBar.add(menu_2);

JMenuItem menuItem_2 = new JMenuItem("New menu item");
menu_2.add(menuItem_2);
getContentPane().setLayout(new BorderLayout(0, 0));

/*
    TableModel dataModel = new AbstractTableModel() {
         public int getColumnCount() { return 10; }
         public int getRowCount() { return 10;}
         public Object getValueAt(int row, int col) { return new Integer(row*col); }
     };
     JTable table = new JTable(dataModel);
     JScrollPane scrollpane = new JScrollPane(table);
 */

TableModel tm = new AbstractTableModel(){
int count = 1;
public int getColumnCount() { return 7; }
public int getRowCount() { return 5;}
public Object getValueAt(int row, int col) { 
String result = null;
if((row==0)&&(col<begin)){
result = null;
}else if(count<days+1){
result = count+"";
count++;
}else {
result = null;
}
return result; 
}
public boolean isCellEditable(int row, int col){
return true;
}
};

table = new JTable(tm);
table.setBorder(new LineBorder(new Color(0, 0, 0)));
getContentPane().add(table, BorderLayout.CENTER);

JTree tree = new JTree();
getContentPane().add(tree, BorderLayout.WEST);

JToolBar toolBar = new JToolBar();
getContentPane().add(toolBar, BorderLayout.NORTH);

textField = new JTextField();
getContentPane().add(textField, BorderLayout.EAST);
textField.setColumns(10);

JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.SOUTH);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

textField_1 = new JTextField();
panel.add(textField_1);
textField_1.setColumns(10);
textField_1.setText(days+"");

JButton button = new JButton("New button");
panel.add(button);

JButton button_1 = new JButton("New button");
panel.add(button_1);

JComboBox comboBox = new JComboBox();
panel.add(comboBox); }}

解决方案 »

  1.   

    把TableModel的逻辑改一下:
    TableModel tm=new AbstractTableModel(){
    //int count = 1;
    public int getColumnCount(){
    return 7;
    } public int getRowCount(){
    return 5;
    } public Object getValueAt(int row,int col){
    String result=null;
    if((row == 0) && (col < begin)){
    result=null;
    }
    //else if(count<days+1){
                   //     result = count+"";
                    //    count++;
    else if(row*7+col-begin < days){
    result=row*7+col-begin+1 + "";
    }
    else{
    result=null;
    }
    return result;
    } // public void setValueAt(Object aValue, int rowIndex, int
    // columnIndex);
    public boolean isCellEditable(int row,int col){
    return true;
    }
    };
      

  2.   

    也就是说要把AbstractTableModel的其他方法也public实现
    我回来再试验下吧,感谢楼上两位。
    swing的table感觉有点难,但是他的mvc思想很有意思。
    分给楼上两位,我先退散