在JFrame上放两个组件,一个是table,一个是txtNo.我意思是想在txtNo中输入一个值,当txtNo失去焦点的时候,修改table所选择行的第0列的值,table的model是自定义的,用vTable来保存表格的值. MyTableModel myTbMode = new MyTableModel( vCols , vTable);
JTable table = new JTable( myTbMode ); private void txtPeoNoFocusLost(java.awt.event.FocusEvent evt) {
( (String[]) vTable.elementAt(table.getSelectedRow()) )[0] = txtNo.getText();
}
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
//表格的选择事件;
//把焦点从txtNo移到table时候,先会触发这个事件,而且table的当前所 选择的行也变了.
}
}
);
结果,当焦点在txtNo上的时候,假如此时table的当前选中的行是第1行,接着用鼠标点击table的第二行,按我的设想,这时候是table的第1行第0列的值修改成txtNo的值.当是,调试时候发现,table的行选择事件valueChanged先于txtNo的FocusLost事件发生,table的当前选中的行变成了第2行,然后再发生txtNo的FocusLost事件,这时候在txtNoFocusLost事件中就无法修改table最开始选中的第1行的值了.
不知道哪位仁兄有解决的方法.
JTable table = new JTable( myTbMode ); private void txtPeoNoFocusLost(java.awt.event.FocusEvent evt) {
( (String[]) vTable.elementAt(table.getSelectedRow()) )[0] = txtNo.getText();
}
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
//表格的选择事件;
//把焦点从txtNo移到table时候,先会触发这个事件,而且table的当前所 选择的行也变了.
}
}
);
结果,当焦点在txtNo上的时候,假如此时table的当前选中的行是第1行,接着用鼠标点击table的第二行,按我的设想,这时候是table的第1行第0列的值修改成txtNo的值.当是,调试时候发现,table的行选择事件valueChanged先于txtNo的FocusLost事件发生,table的当前选中的行变成了第2行,然后再发生txtNo的FocusLost事件,这时候在txtNoFocusLost事件中就无法修改table最开始选中的第1行的值了.
不知道哪位仁兄有解决的方法.
/*
* frmTest.java
*
* Created on 2006年4月1日, 下午1:32
*//**
*
* @author hicen
*/
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.event.TableModelListener;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;public class frmTest extends javax.swing.JFrame {
Vector vTable = new Vector();
Vector vCols = new Vector( );
MyTableModel myTbMode = new MyTableModel( vCols , vTable);
/** Creates new form frmTest */
public frmTest() {
vCols.add("序号");
vCols.add( "工号" );
vCols.add( "姓名" );
initComponents();
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
//表格的选择事件;
tableSelRowEvent( e.getFirstIndex(),e.getLastIndex() );
}
}
);
}
private void tableSelRowEvent(int intFirstRow, int intLastRow)
{
//当表格有行选择时候,会触发这个;
txtNo.setText( (( String[]) vTable.elementAt(table.getSelectedRow()) )[1] );
txtName.setText( ((String[])vTable.elementAt(table.getSelectedRow()))[2] );
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
table = new javax.swing.JTable();
txtNo = new javax.swing.JTextField();
txtName = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
btnAddTableRow = new javax.swing.JButton(); getContentPane().setLayout(null); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
table.setModel(myTbMode);
jScrollPane1.setViewportView(table); getContentPane().add(jScrollPane1);
jScrollPane1.setBounds(20, 120, 210, 220); txtNo.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(java.awt.event.FocusEvent evt) {
txtNoFocusLost(evt);
}
}); getContentPane().add(txtNo);
txtNo.setBounds(70, 20, 160, 21); txtName.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(java.awt.event.FocusEvent evt) {
txtNameFocusLost(evt);
}
}); getContentPane().add(txtName);
txtName.setBounds(70, 60, 160, 21); jLabel1.setText("\u5de5\u53f7");
getContentPane().add(jLabel1);
jLabel1.setBounds(20, 20, 24, 15); jLabel2.setText("\u59d3\u540d");
getContentPane().add(jLabel2);
jLabel2.setBounds(20, 60, 24, 15); btnAddTableRow.setText("\u589e\u52a0\u8868\u683c\u884c");
btnAddTableRow.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddTableRowActionPerformed(evt);
}
}); getContentPane().add(btnAddTableRow);
btnAddTableRow.setBounds(10, 90, 100, 25); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-241)/2, (screenSize.height-359)/2, 241, 359);
}// </editor-fold> private void txtNameFocusLost(java.awt.event.FocusEvent evt) {
// TODO add your handling code her
if( table.getSelectedRow() > -1)
( (String[]) vTable.elementAt(table.getSelectedRow()) )[2] = txtName.getText();
} private void btnAddTableRowActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String[] strFields = new String[22];
strFields[0] = vTable.size() + "";
vTable.add(strFields);
table.updateUI();
table.setRowSelectionInterval( vTable.size()-1,vTable.size()-1 );
} private void txtNoFocusLost(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
if( table.getSelectedRow() > -1)
( (String[]) vTable.elementAt(table.getSelectedRow()) )[1] = txtNo.getText();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new frmTest().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btnAddTableRow;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable table;
private javax.swing.JTextField txtName;
private javax.swing.JTextField txtNo;
// End of variables declaration
}
class MyTableModel extends AbstractTableModel
{
private Vector columnNames;
private Vector vRows;
MyTableModel( Vector vCols , Vector vtbRows)
{
super();
columnNames = vCols;
vRows = vtbRows;
}
public int getColumnCount()
{
return columnNames.size();
} public int getRowCount()
{
if (vRows != null)
{
return getTableValues().size();
}
else
return 0;
}
public Class getColumnClass(int arg0)
{
return super.getClass();
} public Object getValueAt(int row, int col)
{
if (getTableValues() != null)
{
String aaa[]=( String[]) getTableValues().elementAt(row);
return aaa[col];
}
else
return null;
} public void addTableModelListener(TableModelListener arg0)
{
// TODO 自动生成方法存根
} public String getColumnName(int col)
{
return columnNames.elementAt(col).toString();
} public void removeTableModelListener(TableModelListener arg0)
{
// TODO 自动生成方法存根
} public Vector getTableValues()
{
if (vRows == null)
{
vRows= new Vector();
}
return vRows;
} public void setTableValues(Vector object)
{
vRows= object;
} public boolean isCellEditable(int row, int col)
{
return false;
} public void setValueAt(Object value, int row, int col)
{
}
}
if(e.getValueIsAdjusting())
{
return;
}