14. 59. 5. 设置表格里的值 Set table value

14. 59. 5. 设置表格里的值 Set table value_第1张图片

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;


public class SetValueAtToSetValue extends JFrame{
	public SetValueAtToSetValue(){
		final AbstractTableModel model = new MyModel();
		final JTable table = new JTable(model);
		getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
		model.setValueAt(new Integer(1), 0, 0);//设置第一个单元格为1
		
		JButton button = new JButton("增加选择的单元格的值");
		getContentPane().add(button,BorderLayout.SOUTH);
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {	
				int row = table.getSelectedRow();
				//将视图中位于 viewColumnIndex 的列索引映射到表模型中的列索引。返回模型中的对应列索引。
				//如果 viewColumnIndex 小于 0,则返回 viewColumnIndex。 convert:转换
				int col = table.convertColumnIndexToModel(table.getSelectedColumn());
				int currentValue = ((Integer)model.getValueAt(row, col)).intValue();//当前的值转成int
				model.setValueAt(new Integer(currentValue + 1), row, col);//每次加1
			}	
		});
		setSize(300,150);
	}

	public static void main(String[] args) {
		SetValueAtToSetValue ex2 = new SetValueAtToSetValue();
		ex2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ex2.setVisible(true);
		int[][] table = {new int[3],new int[3],new int[3]};
		System.out.println("" + table[0].length);
		System.out.println(new int[3].toString());
	}

}

class MyModel extends AbstractTableModel{//继承一个
	private int[][] table = {new int[3],new int[3],new int[3]};
	//System.out.println(table);
	public MyModel(){
		for(int i = 0; i < 3; i++){
			for(int j = 0; j < 3; j++){
				table[i][j] = i*j;
			}
		}
		/*这个for循环初始值为这样,但表格显示第一列第一行的值会为1,是因为上面setValueAt方法
		 * 000
		 * 012
		 * 024
		 */
	}

	public int getColumnCount() {
		return table.length;
	}

	public int getRowCount() {
		return table[0].length;
	}

	public Object getValueAt(int r, int c) {
		return new Integer(table[r][c]);
	}
	
	public void setValueAt(Object obj,int r, int c){
		table[r][c] = ((Integer)obj).intValue();
		fireTableCellUpdated(r,c);//通知表结构 单元格被更改
	}
	
}



你可能感兴趣的:(14. 59. 5. 设置表格里的值 Set table value)