gpt4 book ai didi

java - ContentPane 和 JProgressBar 不可见

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:46 25 4
gpt4 key购买 nike

我创建了一个 JDialog 扩展,它在内容 Pane 中有一个组件,一个 JProgressBarJProgressBar 是公共(public)的,因为我希望值由所有者类设置。当我创建一个新的对话框时,内容 Pane 根本没有出现,导致显示它后面的任何内容而不是进度条:

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),这表明了不正确的行为。

关于java - ContentPane 和 JProgressBar 不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1257440/

25 4 0
文章推荐: java - 通用 Java 模式识别库——如 List 的正则表达式