我应该在更改后重绘GUI吗?

时间:2013-06-20 07:02:15

标签: java swing user-interface matrix

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

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

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

我想过有一个像updateWindow()这样的方法可用于启动窗口并在我做出更改时更新它。

3 个答案:

答案 0 :(得分:2)

  

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

这取决于你窗口的内容。

如果您正在使用JPanel,则通过覆盖paintComponent方法,重新绘制整个JPanel。尝试重新绘制JPanel的一部分是不值得的。

如果您有一个由许多JPanel组成的窗口,则可以仅使用更改重新绘制JPanel

  

我想过有一个像updateWindow()这样的方法可用于启动窗口并在我做出更改时更新它。

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

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

答案 1 :(得分:1)

将容器添加到容器时,您将使容器的布局无效。这将自动触发重绘,因此问题变得毫无意义。

真正的问题变成了原因?

您应该只使用JTable,而不是弄乱标签和字段。查看How to use Tables

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

答案 2 :(得分:0)

除非你发现自己的性能受限,否则我认为没有理由不重绘整个窗口;确保会有性能损失,但它应该可以忽略不计,您的来源将更简单,更容易维护。但是,如果你发现自己要求表现,我建议考虑实施一种“脏矩形”重绘方法(即你的第二种方法)。