トピックによると、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();
}
}