0

我已经为此烦恼了 2 天。我有一个JTable从两个表中使用 SQL 生成的。

问题是我现在需要获得一个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;
    }
}

希望可以有人帮帮我。

提前致谢。

4

2 回答 2

1

尊重渲染器上设置的JTable工具提示文本。无需覆盖getToolTipText.JTable

使用您指定工具提示的渲染器。然而,我强烈建议您在渲染器中运行 SQL 查询,因为这会降低您的应用程序的速度。通常,数据库查询是在后台线程上完成的,结果会被输入到您的模型中,此时您会更新视图。有关更多信息,请参阅Swing 中的并发教程

于 2013-01-17T11:16:55.480 回答
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;
}
于 2013-01-17T08:52:43.150 回答