Java 如何通过单击鼠标获取jtable中特定列和特定行的值
嘿,我的程序卡住了。实际上我有一个jtable,每次鼠标点击jtable的行时,我都想选择特定行和特定列的值。。。 这是我正在使用的类:Java 如何通过单击鼠标获取jtable中特定列和特定行的值,java,swing,jtable,mouselistener,Java,Swing,Jtable,Mouselistener,嘿,我的程序卡住了。实际上我有一个jtable,每次鼠标点击jtable的行时,我都想选择特定行和特定列的值。。。 这是我正在使用的类: import java.awt.event.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.sql.*; import java
import java.awt.event.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.JFrame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class jtable extends JFrame implements MouseListener
{
PdfViewer3 pdfViewer3;
String value;
JTable table;
//Vector dataVector;
public jtable() throws ClassNotFoundException
{
ArrayList columnNames = new ArrayList();
ArrayList data = new ArrayList();
// Connect to an MySQL Database, run query, get result set
String url = "jdbc:mysql://localhost:3306/search_imgr_data";
String userid = "root";
String password = "root";
String sql = "SELECT * FROM mission_db limit 70060,5";
// Java SE 7 has try-with-resources
// This will ensure that the sql objects are closed when the program
// is finished with them
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection( url, userid, password );
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
// Get column names
for (int i = 1; i <= columns; i++)
{
columnNames.add( md.getColumnName(i) );
}
// Get row data
while (rs.next())
{
ArrayList row = new ArrayList(columns);
for (int i = 1; i <= columns; i++)
{
row.add( rs.getObject(i) );
}
data.add( row );
}
}
catch (SQLException e)
{
System.out.println( e.getMessage() );
}
// Create Vectors and copy over elements from ArrayLists to them
// Vector is deprecated but I am using them in this example to keep
// things simple - the best practice would be to create a custom defined
// class which inherits from the AbstractTableModel class
Vector columnNamesVector = new Vector();
Vector dataVector = new Vector();
for (int i = 0; i < data.size(); i++)
{
ArrayList subArray = (ArrayList)data.get(i);
Vector subVector = new Vector();
for (int j = 0; j < subArray.size(); j++)
{
subVector.add(subArray.get(j));
}
dataVector.add(subVector);
}
for (int i = 0; i < columnNames.size(); i++ )
columnNamesVector.add(columnNames.get(i));
// Create table with database data
table = new JTable(dataVector, columnNamesVector)
{
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object o = getValueAt(row, column);
if (o != null)
{
return o.getClass();
}
}
return Object.class;
}
public boolean isCellEditable(int rowIndex, int colIndex) {
return false;
}
};
table.addMouseListener(new MouseAdapter(){
public void MouseClicked(MouseEvent e) {
System.out.println("IN listener");
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(true);
if (e.getClickCount() != 0)
{
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
int column = 1;
value = (String)target.getValueAt(row, column);
//value= ((Vector)rowData.elementAt(row)).elementAt(column);
Thread runner = new Thread(){
public void run(){
//pdfViewer3 = new PdfViewer3();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
pdfViewer3.setVisible(true);}});
pdfViewer3.initComponents1(value);
}
};runner.start();
}
}
});
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
JPanel buttonPanel = new JPanel();
getContentPane().add( buttonPanel, BorderLayout.SOUTH );
}
public static void main(String[] args) throws ClassNotFoundException
{
jtable frame = new jtable();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
public void mousePressed(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void mouseReleased(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void mouseEntered(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void mouseExited(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void mouseClicked(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
导入java.awt.event.*;
导入java.awt.*;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.sql.*;
导入java.util.*;
导入javax.swing.*;
导入javax.swing.table.*;
导入javax.swing.JFrame;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
公共类jtable扩展JFrame实现MouseListener
{
PdfViewer3 PdfViewer3;
字符串值;
JTable表;
//向量数据向量;
public jtable()抛出ClassNotFoundException
{
ArrayList columnNames=新的ArrayList();
ArrayList数据=新的ArrayList();
//连接到MySQL数据库,运行查询,获取结果集
String url=“jdbc:mysql://localhost:3306/search_imgr_data";
字符串userid=“root”;
字符串password=“root”;
String sql=“从任务中选择*数据库限制70060,5”;
//JavaSE7已尝试使用资源
//这将确保在程序运行时关闭sql对象
//他们完了吗
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
Connection Connection=DriverManager.getConnection(url、用户ID、密码);
语句stmt=connection.createStatement();
结果集rs=stmt.executeQuery(sql);
ResultSetMetaData md=rs.getMetaData();
int columns=md.getColumnCount();
//获取列名
对于(int i=1;i
- 阅读Oracle教程,因为其中有一些错误
MouseEvents
在部分中描述得非常好,包括工作代码示例
为什么要将数据库中的数据读取到ArrayList中,然后将数据复制到向量中?只需将数据直接加载到向量中即可
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(true);
上面的代码看起来不正确。我会去掉它。至少is不应该在MouseListener中。如果这确实是您想要的行为,那么这些语句应该在创建表时执行,否则我猜当您在单击单元格后更改选择属性时,您将丢失t他最后选择了一个值
public void MouseClicked(MouseEvent e)
或者问题可能很简单,您在mouseClicked
方法上使用“M”。它应该是“M”。在重写方法时,您应该使用@Override注释,以确保不会出现键入错误
@Override
public void mouseClicked(MouseEvent e)
问题是,我没有在鼠标点击时获得用于另一个类的值。为了更快地获得更好的帮助,请发布一个(最小完整且可验证的示例)。