BorderFactory和Metal L&F问题

时间:2018-10-11 21:55:41

标签: java swing border

我看到一种奇怪的行为。 L&F组合是金属。

  

UIManager.setLookAndFeel(“ javax.swing.plaf.metal.MetalLookAndFeel”);

如果我在JPanel上设置Border border1,则在同一JPanel上将Border更改为border2,当工具提示通过border2时,重新绘制边界1。这仅发生在L&F Metal,带有LineBorder,TitledBorder。...

2 个答案:

答案 0 :(得分:1)

  

仅在Metal L&F中发生。

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

  

如果我在一个JPanel上设置了Border border1,则在同一JPanel上将Border更改为border2,当工具提示通过border2时,重新绘制边框1的重绘

与工具提示无关。

只需单击几个正方形,然后调整框架的大小,所有边框就会重新粉刷成蓝色。

问题出在您的ColorsBoard班上。

您不应覆盖paintComponent()方法来创建组件。

一种绘画方法仅用于绘画。

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

解决方案:

  1. 不要覆盖paintComponent()方法!
  2. 在类的构造函数中创建所有组件
  3. 请勿使用空布局。而是使用面板上的GridLayout并将正方形添加到网格中。
  4. 在构造函数中使用setBackground(Color.LIGHT_GRAY)设置背景

也:

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

答案 1 :(得分:0)

INDIRECT