1

私は私のプログラムでこのかわいい問題を抱えています(私はこれで初心者です)私は私のプログラムにいくつかのアニメーションを与えたいですそして私は分割パネルの仕切りをgbPanel.getHeight()(MAXheight)からBorder.getHeightに移動させたいです()(最小の高さ)変数に対してSystem.out.printlnを実行すると、16ピクセルのテーブル行の長さを使用して、プログラムが機能するように見えますが、驚異的です!テーブルディバイダーとすべてがウィンドウに表示されるまでしばらく待機します...私の最初の試みはそれを解決するか、少なくともそれが原因がThread.sleepを追加したかどうかを確認しますが、それはプログラムを待機させましたしばらく前にLOTが終了し、ウィンドウが更新されます。それから私はしばらくの間ウィンドウを強制的に更新しようとしましたが、それもうまくいきませんでした。誰か助けてくれませんか?

/* this display one row of data and makes the splitpanel divider -16 with each row */
public void DespliegaTD() {
DefaultTableModel jModel = new DefaultTableModel();
    jTable1.setModel(jModel);
    jModel.setColumnIdentifiers(new Object[]{"Num","Tarjeta","Cuenta","Fecha Trx","Monto","Descripción","Tipo POS","Cod Resp", "Moneda","Autorización","MCC","Resultado"});

    try {
        ResultSet rs = Query(tDebito.getText(),cuenta.getText(),fechaInicio.getText(),fechaFinal.getText());
        while (rs.next()){
            if ((dbPane.getHeight()-(rs.getRow()*jTable1.getRowHeight())) >= (Border.getHeight()-1)) 
                dbPane.setDividerLocation((dbPane.getHeight()-(rs.getRow()*jTable1.getRowHeight())));
            jModel.addRow(new Object[] {rs.getRow(),rs.getString(1),rs.getString(2),dateFormat4.format(dateFormat3.parse(rs.getString(3))),rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8),rs.getString(9),rs.getString(10),rs.getString(11)});
        }
    } catch (SQLException ex) {
        Logger.getLogger(BVtarjetas.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ParseException ex) {
        Logger.getLogger(BVtarjetas.class.getName()).log(Level.SEVERE, null, ex);
    } 
} 
4

1 に答える 1

3

あなたの問題は、Swingイベントスレッド(別名イベントディスパッチスレッドまたはEDT)で長時間実行されるプロセスでアニメーションを実行しようとすることの1つです。解決策は、SwingWorkerなどを介したバックグラウンドスレッドを使用することです。

于 2013-03-23T19:46:50.683 に答える