我有一个进度对话框窗口,其中包含3个JComponents:JLabel,JProgressBar,JButton,它在不同线程的应用程序的不同部分用作默认对话框窗口.因此,当我尝试更改标签的值时,它不会清除其下的背景,它只是在旧文本上绘制新文本.包装器类不会覆盖它只是将方法调用委托给它包含的组件的任何方法.
这是代码:
public void setNote(String note) { this.note = note; SwingUtilities.invokelater(new Runnable() { public void run() { label.setText(ProgressDialog.this.note); } }); }
实际结果与http://www.daniweb.com/forums/post1073367.html#post1073367相似
但那个解决方案不适合我.
有没有人遇到这样的问题?
谢谢.
这是该类的cuted版本.但正如我所说,我不能让它错误地工作.希望这可以帮助.
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; } }
解决方法
在标签上尝试
setOpaque(true)
,这应该使它清除其背景.
原文地址:https://www.jb51.cc/java/121472.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。