0

我已经建立了一个显示矩阵的 GUI。它看起来很像在第一行和第一列上有标签的 excel。单元格包含 1 或 0。

矩阵下方有一个 JComboBox。我可以从 JComboBox 中选择一个项目,然后单击“添加”按钮。这会在矩阵中添加一个额外的行,并将 JComboBox 项作为其名称。我的问题是我应该如何处理扩展它。

有一个重绘整个窗口的方法是个好主意吗?还是我应该尝试重新绘制已更改的部分?

我想有一个这样的方法updateWindow()既可以用于启动窗口,也可以在我进行更改时更新它。

4

3 回答 3

2

有一个重绘整个窗口的方法是个好主意吗?还是我应该尝试重新绘制已更改的部分?

这取决于您的窗口中的内容。

如果您在 上绘制JPanel,则通过覆盖该paintComponent方法,重新绘制整个JPanel. 尝试重绘 a 的一部分是不值得的JPanel

如果您有一个由许多JPanels 组成的窗口,您可以只重绘JPanel带有更改的 s。

我想有一个这样的方法updateWindow()既可以用于启动窗口,也可以在我进行更改时更新它。

创建方法来执行特定的 GUI 任务通常是一个好主意。我会为自己的理智有单独initializeWindow的方法。updateWindow我通常将我的 GUI 的初始化与我的 GUI 的更新分开。

阅读这篇优秀的文章Sudoku Solver Swing GUI,了解如何组合 Swing GUI。

于 2013-06-20T08:02:32.843 回答
1

当您将组件添加到容器时,您将使该容器的布局无效。这将自动触发重绘,因此问题变得没有实际意义。

真正的问题变成了为什么?

而不是搞乱标签和字段,你应该简单地使用一个JTable. 查看如何使用表格

这针对性能进行了优化,因此如果您真的很担心,这应该提供更好的解决方案,只要您将正确的事件触发到所需的更改即可。

于 2013-06-20T07:22:52.477 回答
0

除非您发现自己的性能受到限制,否则我认为没有真正的理由不重绘整个窗口;肯定会有性能影响,但应该可以忽略不计,您的源代码将更简单,更易于维护。但是,如果您发现自己迫切需要性能,我建议您考虑实施“脏矩形”重绘方法(即您的第二种方法)。

于 2013-06-20T07:12:35.120 回答