62,616
社区成员
发帖
与我相关
我的任务
分享
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Insets;
import javax.swing.JTable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.EventObject;
import javax.swing.AbstractAction;
import javax.swing.AbstractCellEditor;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
public class NewJFrame21 extends javax.swing.JFrame {
/** Creates new form NewJFrame21 */
public NewJFrame21() {
initComponents();
}
// @SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable() {
private KeyListener ketListener = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
e.setSource(jTable1);
jTable1.dispatchEvent(e);
}
}
};
};
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
AbstractAction moveForward = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
int rowCount = jTable1.getRowCount();
int colCount = jTable1.getColumnCount();
int selRow = jTable1.getSelectedRow();
int selCol = jTable1.getSelectedColumn();
int yingdonggeshu = 0;
do {
yingdonggeshu = yingdonggeshu + 1;
if (selCol == colCount - 1) {
if (selRow == rowCount - 1) {
selCol = -1;
selRow = 0;
} else {
selCol = -1;
selRow++;
}
}
} while ((jTable1.getModel().isCellEditable(selRow, selCol
+ yingdonggeshu)) == false);
jTable1.changeSelection(selRow, selCol + yingdonggeshu, false,
false);
jTable1.editCellAt(selRow, selCol + yingdonggeshu);
}
};
jTable1
.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
{ null, null, null, null, null, null, null,
null, null },
{ null, null, null, null, null, null, null,
null, null },
{ null, null, null, null, null, null, null,
null, null } }, new String[] { "能编辑1",
"Title 2", "能编辑3", "标题 4", "标题 5", "标题 6",
"标题 15", "标题 18", "能编辑" }) {
boolean[] canEdit = new boolean[] { true, false, true,
false, false, true, false, false, true };
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
});
jTable1.setColumnSelectionAllowed(true);
jTable1.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
"moveForward");
jTable1.getActionMap().put("moveForward", moveForward);
FilePathCellEditor f1 = new FilePathCellEditor();
TableColumn sportColumn = jTable1.getColumnModel().getColumn(0);
// System.out.print(sportColumn)
sportColumn.setCellEditor(f1);
jScrollPane1.setViewportView(jTable1);
jTable1.getColumnModel().getSelectionModel().setSelectionMode(
javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
jTable1.getColumnModel().getColumn(0).setResizable(false);
jTable1.getColumnModel().getColumn(1).setResizable(false);
jTable1.getColumnModel().getColumn(2).setResizable(false);
jTable1.getColumnModel().getColumn(3).setResizable(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addContainerGap().addComponent(
jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,
452, Short.MAX_VALUE).addGap(314, 314, 314)));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addComponent(jScrollPane1,
javax.swing.GroupLayout.DEFAULT_SIZE, 275,
Short.MAX_VALUE).addGap(25, 25, 25)));
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame21().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
}
class FilePathCellEditor extends AbstractCellEditor implements TableCellEditor {
JPanel panel = new JPanel(new BorderLayout());
JTextField tf = new JTextField();
JButton btn = new JButton("...");
JFileChooser fileChooser = null;
private KeyListener l = null;
public FilePathCellEditor() {
panel.add(tf, BorderLayout.CENTER);
panel.add(btn, BorderLayout.EAST);
tf.grabFocus();
btn.setMargin(new Insets(0, 0, 0, 0));
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (fileChooser == null) {
fileChooser = new JFileChooser();
}
int r = fileChooser.showOpenDialog(panel);
if (r == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
tf.setText(file.getPath());
}
}
});
tf.setBorder(null);
}
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
return ((MouseEvent) anEvent).getClickCount() >= 2;
}
return true;
}
public Object getCellEditorValue() {
return tf.getText();
}
public Component getTableCellEditorComponent(final JTable table,
Object value, boolean isSelected, int row, int column) {
tf.setText(value == null ? "" : value.toString());
KeyAdapter l = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
e.setSource(table);
table.dispatchEvent(e);
}
}
};
btn.addKeyListener(l);
this.l = l;
return panel;
}
@Override
public boolean stopCellEditing() {
if (l != null) {
btn.removeKeyListener(l);
l = null;
}
return super.stopCellEditing();
}
}