olarak adlandırılır. 3 JComponents içeren bir ilerleme iletişim pencerem var: JLabel, JProgressBar, JButton, uygulamanın farklı bölümlerinde farklı iletişim pencereleri olarak kullanılır. İş Parçacığı. Bu yüzden, etiketin değerini değiştirmeye çalıştığımda, altındaki arkaplanı temizlemez, sadece eski olana yeni bir metin yazar. Sarmalayıcı sınıfı, içerdiği bileşenlere yöntem çağrıları gönderen tüm yöntemleri geçersiz kılmaz. İşteJLabel, eski metin üzerinde, ayarlanmış bir metin
kodudur:
public void setNote(String note) {
this.note = note;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText(ProgressDialog.this.note);
}
});
}
gerçek sonuç http://www.daniweb.com/forums/post1073367.html#post1073367 benzer Ama bu çözüm benim için uygun değildi.
Böyle bir sorunla karşılaşan biri var mı?
Teşekkürler.
Bu, sınıfın kesilmiş sürümüdür. Ama dediğim gibi yanlış yapamadım. Bu yardımcı olur umarım.
public class Tesssst {
public static void main(String [] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ProgressDialog dialog = new ProgressDialog(frame, "Title", "Message");
dialog.showDialog(true);
}
}
class ProgressDialog extends JComponent {
/**
*
*/
private JProgressBar progressBar;
private JLabel label;
private JFrame parentComponent;
private String title;
private String note;
private boolean canceled;
private boolean cancelEnabled;
private JButton btnCancel;
private JPanel contentPanel;
public ProgressDialog(JFrame parentComponent, String title, String message) {
this.parentComponent = parentComponent;
this.title = title;
progressBar = new JProgressBar();
label = new JLabel();
contentPanel =new JPanel();
canceled = false;
cancelEnabled = true;
setNote(message);
setOpaque(true);
}
public void setNote(String note) {
this.note = note;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText(ProgressDialog.this.note);
}
});
}
public String getNote() {
return note;
}
protected void initDialog() {
setBorder(new EmptyBorder(6, 6, 6, 6));
contentPanel = new JPanel();
contentPanel.setOpaque(true);
setLayout(new BorderLayout());
add(contentPanel);
btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label.setText("ololo");
}
});
contentPanel.setLayout(new GridBagLayout());
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.insets = new Insets(2, 0, 0, 0);
label.setOpaque(true);
contentPanel.add(label, gbc);
} // label
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.anchor = GridBagConstraints.NORTH;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(4, 0, 4, 0);
contentPanel.add(progressBar, gbc);
} // progressBar
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.NORTH;
gbc.fill = GridBagConstraints.NONE;
gbc.insets = new Insets(4, 0, 4, 0);
contentPanel.add(btnCancel, gbc);
btnCancel.setEnabled(cancelEnabled);
} // cancel*/
} // funciton
public boolean isCanceled() {
return canceled;
}
public void showDialog() {
showDialog(false);
}
public void showDialog(boolean modal) {
JDialog dialog = new JDialog(parentComponent, true);
initDialog();
dialog.getContentPane().add(contentPanel);
dialog.setSize(400,400);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
if (modal) {
dialog.setAlwaysOnTop(true);
}
dialog.setVisible(true);
dialog.toFront();
}
public void cancel() {
canceled = true;
}
}
bir SSCCE gönderebilir miyim koymak gerekir? – jzd
Üzgünüm. Açık biçimde çoğaltmaya çalıştım ama yapamadım. Anlıyorum ki, SSCCE olmadan bir şey söylemek çok zor, ama ben sadece bu problemle karşılaşıp karşılaşmadığını merak ediyordum. –