java - BorderFactory 和 Metal L&F 问题

标签 java swing border

我看到了奇怪的行为。 L&F 套装是金属的。

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

如果我在 JPanel 上设置边框 border1,那么我在同一个 JPanel 上将边框更改为 border2,当工具提示经过 border2 时,重绘将重绘 border1。这种情况仅发生在 L&F Metal 上,使用 LineBorder、TitledBorder...

最佳答案

happens in Metal L&F only.

即使您没有专门设置 LAF,您仍然会遇到问题。

If I set a Border border1 on a JPanel, then I change the Border to border2 on the same JPanel, when a tooltip passes on border2, repaint redraws border1

它与工具提示无关。

只需单击几个方 block ,然后调整框架大小,所有边框就会重新漆成蓝色。

问题出在您的 ColorsBoard 类上。

您不应该重写 paintComponent() 方法来创建组件。

绘画方法仅用于绘画。

只要 Swing 确定需要重新绘制组件,就会调用paintComponent() 方法。这就是为什么调整框架大小也会导致问题。您正在重新创建所有组件。

解决办法:

  1. 不要重写paintComponent()方法!
  2. 在类的构造函数中创建所有组件
  3. 不要使用空布局。相反,请在面板上使用 GridLayout,然后将方 block 添加到网格中。
  4. 在构造函数中使用setBackground(Color.LIGHT_GRAY)设置背景

另外:

  1. 删除方法中的所有synchronized关键字。不需要它们。
  2. 不要使用“==”来比较对象。使用equals(...)方法。

关于java - BorderFactory 和 Metal L&F 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769444/

相关文章:

屏幕外的 JavaFx 视频尺寸

java - 从 ArrayList 添加到堆栈 (Java)

java - JFrame 上的背景图像

html - float 到右 Angular (最好在光标旁边)的盒装边框的 CSS 样式

css - DIV 周围的边框

java - 如何使用 JAXB 编码消除元素/属性中自动生成的命名空间前缀

java - 为什么PowerMock会尝试加载一些在非模拟类方法中使用的类?

java - JComboBox 未填充数据库 JDBC 信息 - Java

java - swing 将数据从 mysql 数据库检索到文本字段

CSS提交输入黑边