0

課金ソフトウェアを作成しています。JTableのitems列に入力された値と一致するデータベースのアイテム名を表示したいと思います。これを実現するために、KeyListenerを追加しました。最初のキーに対してのみ、keypressedイベントがトリガーされることを除いて、すべてが正常に機能します。エンターキーを押してもう一度入力すると、もう一度トリガーされます。列に継続的に入力されるすべてのキーに対してキーイベントがトリガーされるようにしたいのですが、誰かが私を助けてくれますか?

コードスニペットを提供します...DBのアイテムをitableで表示したい...

     public void keyPressed(KeyEvent e) {
        rows=table.getSelectedRow();
        cols=table.getSelectedColumn();
        if(cols==2){
           String code=(String)table.getValueAt(rows, cols);

           Statement stmt = null;
           ResultSet rs = null;

           for (int i =model1.getRowCount();i>0; i--) {
              model1.removeRow(i-1);
            }
            table.changeSelection(rows,cols, false, false);

           itable.setVisible(true);
           int i=0;
           String SQL = "SELECT * FROM items where name like\'"+code+"%\' or
                           code=\'"+code+"\' order by name";

           try{
               stmt =  (Statement) dbcon.con.createStatement();
               rs = stmt.executeQuery(SQL);
               while (rs.next()) {
                    model1.insertRow((i),new Object[]{""});
                    itable.setValueAt((Object)rs.getString("name"), i, 0);
                     i++;
                }

            }
            catch(Exception e1){
                  table.editCellAt(rows,cols,null);
                  return;

            }}
        }
4

3 に答える 3

1
  • KeyListenerに使用しないでくださいSwing JComponents。これListenerは、に指定されていないか、として指定されていJTextComponentsません。Compound JComponentsJTableJSpinnerJComboBox

  • これらの2つのアクションには長い時間がかかり、この形式では終了するまで待機する可能性があるため、すべてのイベントでeResultSetに対して実行したり、開始したりしないでください。DatabasJDBC ConnectionGUIResultSet

  • ConnectionResultsetStatementある必要があり、ブロック( )close()に入る必要があります。そうでない場合、データベースは接続数を減らすことができます。開くことができる同時接続の最大数をオーバーロードするため、データベースは新しい接続を開くことを拒否できます。finallytry - catch - finallyOutOfMemory

  • 削減された数のレコードをにロードすることについて話しているコードはAutoCompleted JComboBox or JTextField、アプリケーションStart_Upで一度だけです。

  • 次に、新しい質問をすることができます。方法....。

于 2012-09-06T18:44:31.280 に答える
1

これはおそらく、JTable ではなく、テーブルの CellEditor にいるためです。

キーリスナーで JTextField を作成します。(getColumn().setCellEditor()を介して)テーブルのエディターとして指定し、「textCellEditor.setClickCountToStart(1);」でセルエディターを定義します

于 2012-09-06T16:27:24.067 に答える