?? jtable.txt
字號:
如何通過雙擊jtable里的一行進(jìn)行刪除記錄
你可以監(jiān)聽雙擊事件,通過jtable.getSelectedRow()獲取選擇的行號,用defaulttabelmodel.removeRow(int i)刪除選擇的行。
package test.table;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class JTableTest extends JFrame {
class TableTableModel extends DefaultTableModel {
/**
*
*/
private static final long serialVersionUID = 679265889547674796L;
public final String[] COLUMN_NAMES = new String[] {"列0", "列1", "列2", "列3"};
public TableTableModel()
{
}
public int getColumnCount() {
return COLUMN_NAMES.length;
}
public String getColumnName(int columnIndex) {
return COLUMN_NAMES[columnIndex];
}
// 將Table設(shè)成只讀的
public boolean isCellEditable(int row,
int column)
{
return false;
}
}
private JTable table;
private int i = 0;
private int j = 0;
private int rowI = -1;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
JTableTest frame = new JTableTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public JTableTest() {
super();
setTitle("JTable Test");
getContentPane().setLayout(null);
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 28, 460, 271);
getContentPane().add(scrollPane);
table = new JTable();
table.setShowGrid(true);
table.addMouseListener(new UserMouseAdapter() {
/** *//**
* 鼠標(biāo)單擊事件
* @param e 事件源參數(shù)
*/
public void mouseSingleClicked(MouseEvent e){
//System.out.println("Single Clicked!");
rowI = table.rowAtPoint(e.getPoint());// 得到table的行號
if (rowI > -1)
System.out.println("單擊鼠標(biāo) "+((TableTableModel)table.getModel()).getValueAt(rowI, 0));
}
/** *//**
* 鼠標(biāo)雙擊事件
* @param e 事件源參數(shù)
*/
public void mouseDoubleClicked(MouseEvent e){
//System.out.println("Doublc Clicked!");
rowI = table.rowAtPoint(e.getPoint());// 得到table的行號
if (rowI > -1)
System.out.println("雙擊鼠標(biāo) "+((TableTableModel)table.getModel()).getValueAt(rowI, 0));
}
});
table.setModel(new TableTableModel());
scrollPane.setViewportView(table);
final JButton button = new JButton();
button.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
((TableTableModel)table.getModel()).addRow(new String[] {"行"+(i++),"含一","行2","行3"});
}
});
button.setText("添加一行");
button.setBounds(10, 308, 99, 23);
getContentPane().add(button);
final JButton button_1 = new JButton();
button_1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent arg0) {
((TableTableModel)table.getModel()).insertRow((rowI>=0?rowI:0),new String[] {"插入行"+(j++),"插入行1","插入行2","插入行3"});
}
});
button_1.setText("插入行");
button_1.setBounds(121, 308, 99, 23);
getContentPane().add(button_1);
}
}
//UserMouseAdapter.java
package test.table;
import java.awt.event.*;
/**
*用定時(shí)器延時(shí)單擊事件實(shí)現(xiàn)鼠標(biāo)雙擊事件,單擊和雙擊事件互不影響!
*/
public class UserMouseAdapter
extends java.awt.event.MouseAdapter {
private boolean flag=false;//用來判斷是否已經(jīng)執(zhí)行雙擊事件
private int clickNum=0;//用來判斷是否該執(zhí)行雙擊事件
public void mouseClicked(MouseEvent e) {
final MouseEvent me=e;//事件源
this.flag=false;//每次點(diǎn)擊鼠標(biāo)初始化雙擊事件執(zhí)行標(biāo)志為false
if (this.clickNum == 1) {//當(dāng)clickNum==1時(shí)執(zhí)行雙擊事件
this.mouseDoubleClicked(me);//執(zhí)行雙擊事件
this.clickNum=0;//初始化雙擊事件執(zhí)行標(biāo)志為0
this.flag=true;//雙擊事件已執(zhí)行,事件標(biāo)志為true
return;
}
//定義定時(shí)器
java.util.Timer timer=new java.util.Timer();
//定時(shí)器開始執(zhí)行,延時(shí)0.2秒后確定是否執(zhí)行單擊事件
timer.schedule(new java.util.TimerTask(){
private int n=0;//記錄定時(shí)器執(zhí)行次數(shù)
public void run() {
if(flag){//如果雙擊事件已經(jīng)執(zhí)行,那么直接取消單擊執(zhí)行
n=0;
clickNum=0;
this.cancel();
return;
}
if (n == 1) {//定時(shí)器等待0.2秒后,雙擊事件仍未發(fā)生,執(zhí)行單擊事件
mouseSingleClicked(me);//執(zhí)行單擊事件
flag = true;
clickNum=0;
n=0;
this.cancel();
return;
}
clickNum++;
n++;
}
},new java.util.Date(),200); // 設(shè)置延遲時(shí)間
}
/** *//**
* 鼠標(biāo)單擊事件
* @param e 事件源參數(shù)
*/
public void mouseSingleClicked(MouseEvent e){
//System.out.println("Single Clicked!");
}
/** *//**
* 鼠標(biāo)雙擊事件
* @param e 事件源參數(shù)
*/
public void mouseDoubleClicked(MouseEvent e){
//System.out.println("Doublc Clicked!");
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -