5

これは、table_jobをフィルタリングして、キーワードに一致する行を見つける目的で使用されるtryブロックです。ただし、テーブルモデルが変更されると、正しい行インデックスを取得するのに苦労します。フィルタリングされた結果に最初ではない行が表示されている場合でも、常に最初の行が選択されます。

で何かできることは理解していますが、テーブルの内容を次のように表示するメソッドのandブロックORで、fireTableDataChanged()これを行う方法と場所がわかりません。trycatchsetLabelText(). JLabel

try 
{
    sql = "SELECT Job.jobID as 'Job ID', Employer.name as'Company', Job.title as 'Role', Job.description as  'Description', Job.type as 'Type', Job.benefits as 'Benefits', Job.closing as 'Closing Date' FROM Job INNER JOIN Employer ON Job.employerID=Employer.employerID ORDER BY Employer.name";
    pst = conn.prepareStatement(sql);
    rs = pst.executeQuery();
    TableModel model = DbUtils.resultSetToTableModel(rs);
    table_job.setModel(model);
    final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    table_job.setRowSorter(sorter);               
    searchJob.addActionListener(new ActionListener()
    {

        public void actionPerformed(ActionEvent e) 
        {
            String text = keyword.getText(); 
            if (text.length() == 0) 
            {
                sorter.setRowFilter(null);
            } 
            else 
            {
                sorter.setRowFilter(RowFilter.regexFilter(text));
            }
        }             
    });
}
catch (Exception e) 
{
    e.printStackTrace();                
}

private void setLabelText() 
{
    try 
    {
        String table_click0 = (table_job.getModel().getValueAt(
                row, 0).toString());
        String sqlSt = "SELECT Employer.name, * FROM Job INNER JOIN Employer ON Job.employerID = Employer.employerID WHERE jobID='"+table_click0+"' ";
        //rest of code to Label text...
    }

String table_click0 = (table_job.getModel().getValueAt(row, 0).toString());、更新された選択された行ではなく、間違った行を取得しています。これをどのように考慮に入れることができますか?

4

2 に答える 2

9

おそらく、を使用して、「行」の値をモデルのインデックス値に変換する必要があります(row値が「ビュー」の観点から取得される場合)convertRowIndexToModel。だから交換するだけ

String table_click0 = (table_job.getModel().getValueAt(row, 0).toString());

String table_click0 = table_job.getModel().getValueAt(table_job.
                          convertRowIndexToModel(row), 0).toString());
于 2013-01-13T18:23:21.697 に答える
0

クイックフィックス:フィルターされたリストで実際の行を取得する方法

int row=getjTable().getSelectedRow();
if (getjTable().getRowSorter()!=null) {
    row = getjTable().getRowSorter().convertRowIndexToModel(row);
}
于 2016-09-28T15:12:10.100 に答える