Java – after calling set text, jlabel draws new text over the old text
I have a progress dialog window, which contains three jcomponents: jlabel, jpprogressbar and JButton. It is used as the default dialog window in different parts of applications with different threads Therefore, when I try to change the value of the label, it does not clear the background under it, it just draws new text on the old text The wrapper class does not override it, but delegates method calls to any method of the component it contains
This is the code:
public void setNote(String note) { this.note = note; SwingUtilities.invokelater(new Runnable() { public void run() { label.setText(ProgressDialog.this.note); } }); }
Actual results and http://www.daniweb.com/forums/post1073367.html#post1073367 Similar, but that solution doesn't suit me
Has anyone encountered such a problem?
thank you.
This is the cuted version of the class But as I said, I can't let it work wrong I hope this will help
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)); 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); 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,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); 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; } }
Solution
Try setopaque (true) on the tag, which should make it clear its background