Java 从多个单元格中删除值
在excel中,可以删除多个选定单元格的值,如何使用JTable实现这一点 在此示例代码中,仅删除一个单元格中的值 选择多个单元格 只有一个单元格中的值被删除,而且在按下删除按钮后,它也会进入编辑模式,我不想这样做,因为它没有在excel中执行此操作。 SSCCEJava 从多个单元格中删除值,java,swing,jtable,Java,Swing,Jtable,在excel中,可以删除多个选定单元格的值,如何使用JTable实现这一点 在此示例代码中,仅删除一个单元格中的值 选择多个单元格 只有一个单元格中的值被删除,而且在按下删除按钮后,它也会进入编辑模式,我不想这样做,因为它没有在excel中执行此操作。 SSCCE import java.awt.BorderLayout; import java.awt.Component; import java.awt.EventQueue; import java.awt.event.KeyEvent
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.JTextComponent;
import java.util.EventObject;
public class table extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTable table;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
table frame = new table();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public table() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(2)
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE)
);
table = new JTable(){
/**
*
*/
private static final long serialVersionUID = 1L;
public boolean editCellAt(int row, int column, EventObject e){
boolean result = super.editCellAt(row, column, e);
final Component editor = getEditorComponent();
if (editor == null || !(editor instanceof JTextComponent)) {
return result;
}
if (e instanceof KeyEvent) {
((JTextComponent)editor).selectAll();
}
return result;
}
};
table.setModel(new 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, 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},
{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, 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},
{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, 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},
{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, 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},
{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, 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},
{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, null, null, null}
},
new String[] {
"New column 1", "New column 2", "New column 3", "New column 4", "New column 5", "New column 6"
}
));
table.setCellSelectionEnabled(true);
scrollPane.setViewportView(table);
new PegarExcel(table);
contentPane.setLayout(gl_contentPane);
}
}
//*********************************************************************************************************
//Clase que se encarga del pegado
//*********************************************************************************************************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.datatransfer.*;
import java.util.*;
import java.io.IOException;
//----------------------------------------------------------------------------------------------------------------------
public class PegarExcel implements ActionListener{
private String rowstring,value;
private Clipboard system;
private StringSelection stringSelection,stsel;
private JTable jTable1 ;
//----------------------------------------------------------------------------------------------------------------------
public PegarExcel(JTable myJTable)
{
jTable1 = myJTable;
KeyStroke paste = KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK,false);
jTable1.registerKeyboardAction(this,"Paste",paste,JComponent.WHEN_FOCUSED);
system = Toolkit.getDefaultToolkit().getSystemClipboard();
}
//----------------------------------------------------------------------------------------------------------------------
public JTable getJTable() {
return jTable1;
}
//----------------------------------------------------------------------------------------------------------------------
public void setJTable(JTable jTable1) {
this.jTable1=jTable1;
}
//----------------------------------------------------------------------------------------------------------------------
void showErrorMessage(String msg){
JOptionPane.showMessageDialog(null, msg,msg,JOptionPane.ERROR_MESSAGE);
}
//----------------------------------------------------------------------------------------------------------------------
void pasteAction(){
system = Toolkit.getDefaultToolkit().getSystemClipboard();
try{
String data= (String)system.getData(DataFlavor.stringFlavor);
if(data==null) {
showErrorMessage("No data on clipboard");
return;
}
int selectCol=jTable1.getSelectedColumn();
int selectRow=jTable1.getSelectedRow();
if(selectCol<0||selectRow<0) {
showErrorMessage("Please Select cell");
return;
}
//devuelve clipboard contenido
StringTokenizer st,stTmp;
st=new StringTokenizer(data,"\n");
int pasteRows=st.countTokens ();
st=new StringTokenizer(st.nextToken ().trim (),"\t");
int pasteCols=st.countTokens ();
int marginCols=jTable1.getColumnCount()-selectCol;
int marginRows=jTable1.getRowCount()-selectRow;
//revisa espacio disponible
if(marginCols<pasteCols || marginRows<pasteRows){
//showErrorMessage("La tabla no posee el espacio suficiente para pegar los datos");
//return;
}
st=new StringTokenizer (data,"\n");
int rowCount=0,colCount;
//copia a la tabla
while(st.hasMoreTokens()){
stTmp=new StringTokenizer (st.nextToken (),"\t");
colCount=0;
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
System.out.println("model.getRowCount():"+model.getRowCount());
System.out.println("rowCount+selectRow:"+(rowCount+selectRow));
System.out.println("pasteRows:"+(pasteRows));
System.out.println("marginRows:"+(marginRows));
System.out.println("rowCount:"+rowCount);
if(rowCount+selectRow>model.getRowCount()-1){
if(0==model.getRowCount())
model.addRow(new Object[]{"","","",1,"MB",10000, true,true,"","",""});
else
model.addRow(new Object[]{model.getValueAt(model.getRowCount()-1, 0),"","",1,"MB", 10000, true,true,"","",""});
}
while(stTmp.hasMoreTokens ()){
String columnClassName =jTable1.getColumnClass(colCount+selectCol).getName();
if("java.lang.String"==columnClassName)
jTable1.setValueAt(stTmp.nextToken(),rowCount+selectRow,colCount+selectCol);
else if("java.lang.Integer"==columnClassName)
jTable1.setValueAt(Integer.parseInt(stTmp.nextToken()),rowCount+selectRow,colCount+selectCol);
else if("java.lang.Boolean"==columnClassName){
boolean bool = Boolean.parseBoolean(stTmp.nextToken());
jTable1.setValueAt(bool,rowCount+selectRow,colCount+selectCol);
}
else
jTable1.setValueAt(stTmp.nextToken(),rowCount+selectRow,colCount+selectCol);
System.out.println("columnClassName: "+columnClassName);
//jTable1.setValueAt(stTmp.nextToken(),rowCount+selectRow,colCount+selectCol);
colCount++;
}
rowCount++;
}
}
catch(UnsupportedFlavorException uf){
System.out.println ("uf="+uf.getMessage ());
}
catch(IOException io){
System.out.println ("io="+io.getMessage ());
}
}
//----------------------------------------------------------------------------------------------------------------------
public void actionPerformed(ActionEvent e){
if(e.getActionCommand ().compareTo ("Paste")==0){
pasteAction();
return;
}
}
}
导入java.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.EventQueue;
导入java.awt.event.KeyEvent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.border.EmptyBorder;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.text.JTextComponent;
导入java.util.EventObject;
公共类表扩展了JFrame{
私有静态最终长serialVersionUID=1L;
私有JPanel内容窗格;
专用JTable表;
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
表框=新表();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共表(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100450300);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
JScrollPane scrollPane=新的JScrollPane();
GroupLayout gl_contentPane=新的GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(2)
.addComponent(滚动窗格,GroupLayout.DEFAULT_SIZE,422,Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addComponent(滚动窗格,GroupLayout.DEFAULT\u大小,252,Short.MAX\u值)
);
表=新的JTable(){
/**
*
*/
私有静态最终长serialVersionUID=1L;
公共布尔editCellAt(int行、int列、EventObject e){
布尔结果=super.editCellAt(行、列、e);
最终组件编辑器=getEditorComponent();
if(编辑器==null | |!(JTextComponent的编辑器实例)){
返回结果;
}
if(e instanceof KeyEvent){
((JTextComponent)编辑器);
}
返回结果;
}
};
table.setModel(新的DefaultTableModel(
新对象[][]{
{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,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,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,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,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,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,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},
{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,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,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,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,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,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}
},
新字符串[]{
“新列1”、“新列2”、“新列3”、“新列4”、“新列5”、“新列6”
}
));
table.setCellSelectionE
InputMap im = table.getInputMap();
ActionMap am = table.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
am.put("delete", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("DeleteMe...");
}
});
InputMap im = jTable1.getInputMap();
ActionMap am = jTable1.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "delete");
am.put("delete", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
int[] columns = jTable1.getSelectedColumns();
int[] rows = jTable1.getSelectedRows();
for(int row:rows){
for(int column:columns){
jTable1.setValueAt(null,row,column);
}
}
}
});