java - 如何为java jtable创建鼠标双监听器

标签 java swing netbeans jtable mouse-listeners

我有 java jtable,我想在它上面使用鼠标双击事件,我有很多代码可以将监听器粘贴到表中,无法将其粘贴到我的代码中,并且厌倦了阅读这里的数十个监听器代码和在那里,我是 Java 的新手,需要更多耐心和简单的直接帮助,stack 内部的一些专业人士不会给出或负担得起这些基本问题,由于过去曾多次尝试对某些问题进行解释,我也有同样的感觉对我来说暗淡的代码我只是作为帮助而投入的?!希望这次我会幸运! 最后,堆栈中所有可用的监听器代码都与设计者带来的表一起工作,而不与代码创建的表一起工作,不知道为什么这可能是我的主要问题。

  public  class JFband  extends javax.swing.JFrame  {
    Connection con1;
    Statement stmt1;
    ResultSet rs1;
    Connection con;
    Statement stmt;
    ResultSet rs;
    String fLag;
    DefaultTableModel tableModel;
    static String Bno;

            JTable  jTnameSearch = new JTable(tableModel);
     private TableRowSorter<TableModel> rowSorter
            = new TableRowSorter<>();


    // declare sorter to sort JTable data based on jTsearch Box field entry 


    public JFband() {

      this.setLayout(null);
     // here is the code with error :

      jTnameSearch.addMouseListener(new MouseAdapter(){ 
     @Override
     public void mouseClicked(MouseEvent e){
      if (e.getClickCount() == 2){
      JOptionPane.showMessageDialog(null, "the double click code is working");

        }
      }
     } );

      }

       }

     // listener for my jTable 

     @SuppressWarnings("unchecked")
     // <editor-fold defaultstate="collapsed"   desc="Generated                            Code">                          



    public  void LoadTable(){
                try {
            String host1= "jdbc:derby://localhost:1527/accountingsystem";
            String uName1="adamin";
            String uPass1="1234a1234b";
            String sql1;
            con1=DriverManager.getConnection(host1,uName1 ,uPass1);
            //String sql ="select * from log where password= jTuser.getText()  " ;
         if (fLag.equals("search"))
            sql1="select  band_name,band_no ,band_type from band order by band_no ";
           else
            sql1="select  band_name,band_no ,band_type from band where band_name='" +filterText.getText()+ "' order by band_no ";
            stmt1=con1.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            rs=stmt1.executeQuery(sql1);
            int jCounter=0; 
            while (rs.next()){ jCounter++;
            }
  if (jCounter==0) 
     return;
         rs.beforeFirst();
                String[]   columnnames = {"اسم الحساب","رقم الحساب","نوع الحساب"};
               String Data[][]=new String[jCounter][3];
                  int j=0;
           while (rs.next()) {
        //    JOptionPane.showMessageDialog(null,  i+"فاصل   "+ jCounter);
               Data[j][0]=rs.getString("band_name"); 
           Data[j][1]=  rs.getString("band_no");
     Data[j][2]=  rs.getString("band_type");
              ++j;
                        }    
                    //   DefaultTableModel tableModel;
            tableModel = new DefaultTableModel(Data,columnnames);
           jTnameSearch = new JTable(tableModel) {   // القوس هذا جديد اضيف لعمل شرط عدم امكانية الكتابة 
               // في الجدول اصبح خمسة سطر 
            public boolean isCellEditable(int row, int col)  
            {  
         return false;  
            }  
        };
        //  انتهت دالة منع الكتابة 
           //only single selection mode
           jTnameSearch.setSelectionMode(0);
          rowSorter  = new TableRowSorter<>(jTnameSearch.getModel());
               jTnameSearch.setRowSorter(rowSorter);
                        jSpane3.setViewportView(jTnameSearch);
            jTnameSearch.setFillsViewportHeight(true);
            //jTnameSearch.setAutoCreateRowSorter(true); // enable sort and filter
              jPsearch.setVisible(true);
            jPanel2.setVisible(false);
            filterText.requestFocus();
            rs.close();
            fLag="text";
                 }

        catch (SQLException ex) {
            System.out.println(ex);
    }
    }

   }

最佳答案

我做了一个附加到 jtable 的点击事件:

    int ClickCount=0,selectedTodelete=-1;

    private void JTArticleJPAddArrticleMouseClicked(java.awt.event.MouseEvent evt) {                                                    

    if (ClickCount==1) {
        // your double click section code here
                 return;
    }else{
            if (selectedTodelete==JTArticleJPAddArrticle.getSelectedRow()) {
                ClickCount++;
              //here we are checking that the event is on the same row (double click on the same row)
        }else{

                ClickCount=0;
                selectedTodelete=JTArticleJPAddArrticle.getSelectedRow();
                // the new cell selected
        }

    }

    //one click event code here
}                                                   

我在任何地方制作双击事件的方式对我来说非常有用

表实例化代码可能会帮助您理解为什么不适合您

JTArticleJPAddArrticle = new javax.swing.JTable();

JTArticleJPAddArrticle.setBackground(new java.awt.Color(204, 204, 255));

JTArticleJPAddArrticle.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
    "Reference","Libellé","Marque","Type","Prix d'achat","Prix de vente","Quantité","Total","Etat"
   }
){
boolean[] canEdit = new boolean [] {
    false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
    }
 });



 JTArticleJPAddArrticle.addMouseListener(new java.awt.event.MouseAdapter() {
   public void mouseClicked(java.awt.event.MouseEvent evt) {
        JTArticleJPAddArrticleMouseClicked(evt);// that a function called in the event mouseClicked
   }
 });

      jScrollPane8.setViewportView(JTArticleJPAddArrticle);

关于java - 如何为java jtable创建鼠标双监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688518/

相关文章:

java - Java 和 PHP 的简单解密/加密

java - 检查现有文本时自定义控制台 nullPointerException

java - 在设计选项卡中双击对象后删除 Netbeans 自动生成的代码

java - 在 jframe 中显示 jpanel 的图形界面

java - 列出的哪个 .jar 包含类 'com.twitter.finagle.stats.ExceptionStatsHandler' ?

java - cookie 在 Internet Explorer 中不起作用

java - 为什么不能共享 BoxLayout 而 FlowLayout 可以?

java - 如何在 Netbeans 表单编辑器中更改方法签名?

java - 相反的方法不执行任何堆栈操作

java - 我有一个包含菜单项属性的类。我需要填充三个 JList。我怎样才能这样做呢?