1

トピックによると、JButton の actionPerformed メソッドからの GUI 要素の更新に問題があります。そのトピックで見つけました: GUI を更新するには、actionPerformed から返さなければならないactionPerformed メソッド内のスレッド スリープ。私のJButtonコードは次のとおりであるため、これは私にとって問題です。

public class JButtonINVOICES extends JButton
{
private static final long serialVersionUID = 1L;
public JButtonINVOICES(...)
{
    addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            mainFrameReference.setInvoiceRegisterPanel();
            invoiceRegisterPanelReference.updateInvoiceList(...);
        }
    });
}
}

ボタンをsetInvoiceRegisterPanel()クリックした後、パネルをメインフレームに表示するように設定するだけです。Panel には JTable コンポーネントが含まれています。ここまでは問題ありませんが、2 番目の方法updateInvoiceList(...)は、追加された Panel の JTable コンポーネントを更新する役割を果たします。これまでもすべて問題ありません。JProgressBar をパネルに追加し、2 番目のメソッドの実行中にその progressBar を更新しようとすると、問題が発生します。actionPerformed メソッドを使用しているため、GUI が更新されないため、機能しません。私の質問は、JProgressBar の読み込みを観察できないため、どのように対処するかです。すべての JTable がロードされ、progressBar の値が 100% になった直後に表示されます。私がそれを明確に説明したことを願っています。

updateInvoiceList コード:(pb は JProgressBar オブジェクトです)

public void updateInvoiceList(int month, int year)
{
    Vector<String> v;
    int num = 0;
    int amountToLoad = getAmountToLoad(month,year);
    pb.setMinimum(0);
    pb.setMaximum(amountToLoad);
    if(amountToLoad==0)
    {
        pb.setMaximum(1);
        pb.setValue(1);
        clearProductTable();
        return;
    }

    Connection conn = Connector.getConnection();
    clearProductTable();
    try
    {
        PreparedStatement prep = conn.prepareStatement("select * from Invoices where print_date like ? and print_date like ?;");
        prep.setString(1, "%."+month+".%");
        prep.setString(2, "%."+year+" %");
        ResultSet rs = prep.executeQuery();
        while (rs.next())
        {
            num++;
            v = new Vector<>();
            v.addElement(Integer.toString(num));
            String number = rs.getString(2);
            v.addElement("<html><b>FV / "+number+" / "+rs.getString(3)+"</b></html>");
            v.addElement(findClient(rs.getString(6)));
            String[] date = getSellDate(rs.getInt(1));
            v.addElement(date[0]);
            v.addElement(date[1]);
            v.addElement(rs.getString(7));
            v.addElement(rs.getString(8));
            v.addElement(number);
            pb.setValue(num);
            try{Thread.sleep(30);} catch (InterruptedException e){}
            model.addRow(v);
        }
        rs.close();
    }
    catch (SQLException e)
    {
        e.printStackTrace();
    }
}
4

0 に答える 0