我创建了一个JDialog扩展,该扩展在内容窗格中具有一个组件JProgressBar. JProgressBar是公共的,因为我希望该值由所有者类设置.当我创建一个新的对话框时,内容窗格根本不会出现,导致显示其背后的内容而不是进度条:
public class ProgressBarDialog extends JDialog {
public JProgressBar bar;
public ProgressBarDialog(Frame owner, String title) {
super(owner, title);
bar = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);
bar.setValue(0);
bar.setStringPainted(true);
bar.setPreferredSize(new Dimension(200, 100));
getContentPane().setLayout(new BorderLayout());
getContentPane().add(bar, BorderLayout.CENTER);
setSize(200, 100);
setLocationRelativeTo(null);
setVisible(true);
toFront();
}
public void setProgress(int p) {
bar.setValue(p);
}
}
该ProgressBarDialog的用法代码如下
ProgressBarDialog progBarDialog = new ProgressBarDialog(null,"Submitting");
//Stuff gets done
progBarDialog.setProgress(20);
//Stuff gets done
progBarDialog.setProgress(45);
//Stuff gets done
progBarDialog.setProgress(70);
//Stuff gets done
progBarDialog.setProgress(100);
//Stuff gets done
progBarDialog.dispose();
我缺少什么,因为(我认为)这是一个相当简单的实现?
根据camickr的建议,我在这里创建了一个测试SSCCE:TestDialog.java.您可以知道,代码是完全相同的.问题是测试可以正常工作并显示.我已经添加了与“对话”窗口的其他实现有关的所有代码.
解决方法:
a)进度条不应公开.如果要更改其值,请创建一个setter方法.
b)您不应将JFrame用作子窗口.您应该使用JDialog,然后将框架指定为对话框的所有者.
c)JFrame或JDialog的默认布局是BorderLayout,因此不需要重置布局.
d)一起使用setSize()和pack()是没有用的.该包将覆盖setSize().使用一个或另一个.
e)在组件上使用setSize()和setPreferredSize()是无用的.布局管理器将使用首选大小作为建议,然后根据其规则设置大小.
因此,从发布的几行中有很多问题.尽管它们不太可能引起任何实际问题,但让我怀疑该程序的其余部分是什么样的.您可能遗漏了有助于我们解决问题的宝贵信息.
如果您需要进一步的帮助,则需要创建一个Short, Self Contained, Compilable and Executable, Example Program(SSCCE),以说明错误的行为.
标签:swing,java,user-interface 来源: https://codeday.me/bug/20191210/2102393.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。