進捗バーが更新されません。
プログレスバーの更新についてですが
下記のサンプルで動作させても
プログレスバーの進捗状況が更新されなくて困っています。
タイマーなどを使用すれば更新されるようですが
各種状況に応じて自ら更新させたいのです。
以下のサンプルはどのように修正すれば
更新されるようになるでしょうか?
宜しくお願いします。
public class SampleProgressBar extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
JButton startButton;
JButton stopButton;
JProgressBar bar;
JLabel label;
int count;
public void actionPerformed(ActionEvent arg0) {
String cmd = arg0.getActionCommand();
if (cmd.equals("start")){
startButton.setEnabled(false);
stopButton.setEnabled(true);
for(int i=0, count=0; i<20000; i++ )
{
label.setText(count + " count");
count++;
bar.setValue(count);
int per = (int)(bar.getPercentComplete() * 100);
bar.setString(per + "% 完了");
try {
Thread.sleep(1);
}
catch(Exception err) {}
}
}else if (cmd.equals("stop")){
startButton.setEnabled(true);
stopButton.setEnabled(false);
bar.setValue(0);
int per = (int)(bar.getPercentComplete() * 100);
bar.setString(per + "% 完了");
}
}
public static void main(String[] args) {
SampleProgressBar frame = new SampleProgressBar();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 300, 200);
frame.setTitle("Sample");
frame.setVisible(true);
}
public SampleProgressBar() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
count = 0;
label = new JLabel("Not Start");
JPanel labelPanel = new JPanel();
labelPanel.add(label);
startButton = new JButton("start");
startButton.addActionListener(this);
startButton.setActionCommand("start");
stopButton = new JButton("stop");
stopButton.addActionListener(this);
stopButton.setActionCommand("stop");
stopButton.setEnabled(false);
JPanel buttonPanel = new JPanel();
buttonPanel.add(startButton);
buttonPanel.add(stopButton);
bar = new JProgressBar(0, 20000);
bar.setStringPainted(true);
bar.setString("");
bar.setValue(0);
JPanel barPanel = new JPanel();
barPanel.add(bar);
getContentPane().add(labelPanel, BorderLayout.PAGE_START);
getContentPane().add(buttonPanel, BorderLayout.PAGE_END);
getContentPane().add(barPanel, BorderLayout.CENTER);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
}
return jContentPane;
}
}
お礼
ありがとうございます。 もっと自分で調べろということですね。 時間に迫られてやや自分で調べるという部分で 努力が足りなかったかもしれません。 今後は気をつけたいと思います。 ちなみに質問としては解決しました。