Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过单击鼠标获取jtable中特定列和特定行的值_Java_Swing_Jtable_Mouselistener - Fatal编程技术网

Java 如何通过单击鼠标获取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

嘿,我的程序卡住了。实际上我有一个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.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)

问题是,我没有在鼠标点击时获得用于另一个类的值。为了更快地获得更好的帮助,请发布一个(最小完整且可验证的示例)。