2013-01-17 51 views
0

我一直在這個問題上玩了2天。我有一個JTable正在使用兩個表中的SQL生成。從sql的JTable工具提示?

事情是我現在需要得到一個Mouseover工具提示工作,從一個表的具體信息。它不工作。

public class Ausgabe extends JPanel { 

    public JPanel panel1; 
    private Point hintCell; 

    Main j; 

    MA ali = new MA(); 

    public Ausgabe(Main j) { 
     this.j = j; 

    } 

    public void createDefault(){ 
     panel1 = new JPanel(); 
     panel1.setLayout(null); 

     JLabel lblDieseMitarbeiterSind = new JLabel("Diese Mitarbeiter sind Heute abwesend."); 
     lblDieseMitarbeiterSind.setBounds(10, 11, 239, 14); 
     panel1.add(lblDieseMitarbeiterSind); 

     panel1.add(getHeute()); 
    } 
    public JTable getHeute(){ 

      DBconnect verbinden = new DBconnect(); 
      verbinden.erstelleVerbindung(); 

      JTable Habwesend=new JTable(); 
      Habwesend.setBounds(10, 30, 200, 400); 
      Habwesend.setEnabled(false); 
      DefaultTableModel dm=new DefaultTableModel(); 

      try { 
      ResultSet rs= verbinden.sqlStatement.executeQuery("select Vor, Nach from MA_Tabelle where MA_ID in (select distinct MA_ID from AB_Spanne where(Date() >= Start and Date() <= Ende)) "); 
      ResultSetMetaData rsmd=rs.getMetaData(); 
      //Coding to get columns- 
      int cols=rsmd.getColumnCount(); 
      String c[]=new String[cols]; 
      for(int i=0;i<cols;i++){ 
       c[i]=rsmd.getColumnName(i+1); 
       for (int k = 0; k < c.length; k++) { 
        dm.addColumn(c[k]); 
       } 


      } 
      Object row[]=new Object[cols]; 
      while(rs.next()){ 
       for(int i=0;i<cols;i++){ 
         row[i]=rs.getString(i+1); 
        } 
       dm.addRow(row); 

      } 

      Habwesend.setModel(dm); 
      Habwesend.setToolTipText(getToolTipText((MouseEvent) verbinden.sqlStatement.executeQuery("select Start, Ende from AB_Spanne where MA_ID = "+rs))); 
      verbinden.schliesseVerbindung(); 


      }catch(SQLException e){ 
       System.out.println("this failed"); 
       System.out.print(e); 
      } 
      return Habwesend; 
     } 

    public String result() { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

希望有人能幫助我。

在此先感謝。

回答

1

在您的代碼中,您爲整個表設置了單個工具提示文本,因此它對於所有單元格都是相同的。

相反,使用來自JTable導出自定義表類和覆蓋的方法

@Override 
public String getToolTipText(MouseEvent e) { 
    Point where = e.getPoint(); 
    int column = columnAtPoint(where); 
    int row = rowAtPoint(where); 

    // now run your SQL to get the tooltip text 
    ... 
    return tooltip; 
} 
+0

感謝您的快速回復,我會盡力使其工作。我只是學習java,所以我必須弄清楚你的意思;) – Maawii

+0

+1,但我會建議在一個查詢中獲取所有工具提示,並將它們存儲在模型的某處,而不是每次查詢getToolTipText ()' –

1

JTable方面的工具提示文本的渲染器設置。無需覆蓋JTablegetToolTipText

使用指定工具提示的渲染器。然而,我非常沮喪地在渲染器中運行SQL查詢,因爲這會降低應用程序的運行速度。通常情況下,數據庫查詢是在後臺線程上完成的,並將結果輸入到模型中,然後更新視圖。請參閱Concurrency in Swing教程以獲取更多信息