gpt4 book ai didi

java - BorderFactory 和 Metal L&F 问题

转载 作者:行者123 更新时间:2023-12-02 10:43:27 24 4
gpt4 key购买 nike

我看到了奇怪的行为。 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com