//你的布局太紧凑了,看着眼疼,试试这个清爽的吧,选中 *** 作行进行 *** 作
package comhxfmore;
import javaawtBorderLayout;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaawteventMouseAdapter;
import javaawteventMouseEvent;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJLabel;
import javaxswingJPanel;
import javaxswingJScrollPane;
import javaxswingJTable;
import javaxswingJTextField;
import javaxswingListSelectionModel;
import javaxswingtableDefaultTableModel;
//维护表格
public class JTableDefaultTableModelTest extends JFrame{
private DefaultTableModel tableModel; //表格模型对象
private JTable table;
private JTextField aTextField;
private JTextField bTextField;
public JTableDefaultTableModelTest()
{
super();
setTitle("表格");
setBounds(100,100,500,400);
setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
String[] columnNames = {"A","B"}; //列名
String [][]tableVales={{"A1","B1"},{"A2","B2"},{"A3","B3"},{"A4","B4"},{"A5","B5"}}; //数据
tableModel = new DefaultTableModel(tableVales,columnNames);
table = new JTable(tableModel);
JScrollPane scrollPane = new JScrollPane(table); //支持滚动
getContentPane()add(scrollPane,BorderLayoutCENTER);
//jdk16
//排序:
//tablesetRowSorter(new TableRowSorter(tableModel));
tablesetSelectionMode(ListSelectionModelSINGLE_SELECTION); //单选
tableaddMouseListener(new MouseAdapter(){ //鼠标事件
public void mouseClicked(MouseEvent e){
int selectedRow = tablegetSelectedRow(); //获得选中行索引
Object oa = tableModelgetValueAt(selectedRow, 0);
Object ob = tableModelgetValueAt(selectedRow, 1);
aTextFieldsetText(oatoString()); //给文本框赋值
bTextFieldsetText(obtoString());
}
});
scrollPanesetViewportView(table);
final JPanel panel = new JPanel();
getContentPane()add(panel,BorderLayoutSOUTH);
paneladd(new JLabel("A: "));
aTextField = new JTextField("A4",10);
paneladd(aTextField);
paneladd(new JLabel("B: "));
bTextField = new JTextField("B4",10);
paneladd(bTextField);
final JButton addButton = new JButton("添加"); //添加按钮
addButtonaddActionListener(new ActionListener(){//添加事件
public void actionPerformed(ActionEvent e){
String []rowValues = {aTextFieldgetText(),bTextFieldgetText()};
tableModeladdRow(rowValues); //添加一行
int rowCount = tablegetRowCount() +1; //行数加上1
aTextFieldsetText("A"+rowCount);
bTextFieldsetText("B"+rowCount);
}
});
paneladd(addButton);
final JButton updateButton = new JButton("修改"); //修改按钮
updateButtonaddActionListener(new ActionListener(){//添加事件
public void actionPerformed(ActionEvent e){
int selectedRow = tablegetSelectedRow();//获得选中行的索引
if(selectedRow!= -1) //是否存在选中行
{
//修改指定的值:
tableModelsetValueAt(aTextFieldgetText(), selectedRow, 0);
tableModelsetValueAt(bTextFieldgetText(), selectedRow, 1);
//tablesetValueAt(arg0, arg1, arg2)
}
}
});
paneladd(updateButton);
final JButton delButton = new JButton("删除");
delButtonaddActionListener(new ActionListener(){//添加事件
public void actionPerformed(ActionEvent e){
int selectedRow = tablegetSelectedRow();//获得选中行的索引
if(selectedRow!=-1) //存在选中行
{
tableModelremoveRow(selectedRow); //删除行
}
}
});
paneladd(delButton);
}
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
JTableDefaultTableModelTest jTableDefaultTableModelTest = new JTableDefaultTableModelTest();
jTableDefaultTableModelTestsetVisible(true);
}
}
具体的编写太麻烦了,而且我也没有编译工具,所以没法弄。
我说方法
第一次单击是选择一行数据,这里我们可以得到被选择数据的行,那么就能拿到它里面的值。
第二次单击可以d出jTable2表,将第一次得到的数据传给jTable2即可。
只是这个方法只能传一行值
JTabel 获取表格中选中的数据, 那么有可以考虑使用下面两种方法来实现
方法一:ListSelectionListener 来获取用户在表格里选中的数据是最方便和最优的
因为: 支持单选, 也支持多行, 支持键盘上下移动进行选择
方法二: MouseListener 当鼠标点击某行数据后,输出该数据 ,可以实现
不推荐使用MouseListener来获取表格选中数据:
1 不够灵敏, 偶尔会失效, 比如刚打开窗口后 ,有时候迅速点击table MouseListener 就可能不会有反应
2 用户选中多行, 比如拖动或者键盘上下移动进行选择时,那么在MouseListener里获取多行比较麻烦不仅仅需要实现鼠标点击 ,还得需要实现拖动鼠标,释放鼠标 等多个方法,如果完善一点还需要实现键盘事件的方法
参考代码如下
import javaawt;import javaawtevent;
import javaxswing;
import javaxswingevent;
public class TableDemo extends JFrame {
String[] names = { "姓名", "等级" };
String[][] data = { { "张三", "A" }, { "李四", "B" }, { "王五", "C" } };
public TableDemo() {
JTable table = new JTable(data, names);
JScrollPane jsp = new JScrollPane(table);
add(jsp);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 推荐
tablegetSelectionModel()addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!egetValueIsAdjusting()) {
//支持拖动多选
int[] rows = tablegetSelectedRows();
// int[] cols = tablegetSelectedColumns();//选中的列
for (int i : rows) {
Systemoutprintln("#方法一:\t" + tablegetValueAt(i, 0) + "\t" + tablegetValueAt(i, 1));
}
//支持单选
// int row=tablegetSelectedRow();//选中行
// //int col=tablegetSelectedColumn();//选中列
// Systemoutprintln("方法一:"+tablegetValueAt(row, 0)+"\t"+tablegetValueAt(row, 1));
}
}
});
tableaddMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//单选
int row = tablerowAtPoint(egetPoint());// 选中行
// int col =tablecolumnAtPoint(egetPoint());//选中列
Systemoutprintln("方法二:\t" + tablegetValueAt(row, 0) + "\t" + tablegetValueAt(row, 1));
}
});
}
public static void main(String[] args) {
EventQueueinvokeLater(new Runnable() {
public void run() {
new TableDemo()setVisible(true);
}
});
}
}
以上就是关于关于Java Swing 中JTable的问题,高手指教!全部的内容,包括:关于Java Swing 中JTable的问题,高手指教!、java中的jTable问题(java,swing,jtable)、JAVA点击Jtable表格如何将点击的那一行数据分别输出出来等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)