gpt4 book ai didi

java - 当 Windows 主题改变时,JInternalFrame 行为很奇怪?

转载 作者:行者123 更新时间:2023-11-30 09:46:30 26 4
gpt4 key购买 nike

这是我的示例代码。我正在尝试将没有标题栏显示的 JInternalFrame 嵌入到 JFrame 中。

import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameUI;

class A{

public void doThis(){
JFrame fr = new JFrame();
fr.setSize(300,300);
JInternalFrame f = new JInternalFrame();
f.setSize(200,200);
BasicInternalFrameUI ui = (BasicInternalFrameUI) f.getUI();
ui.setNorthPane(null);
f.setVisible(true);
fr.add(f);
fr.setVisible(true);
}
}

class MainA{

public static void main(String a[]){
A obj = new A();
obj.doThis();
}
}

代码工作正常,并根据要求在没有标题栏的 JFrame 中显示 JInternalFrame,如下所示。

Before Theme Change

我仍在运行此 UI,同时当我尝试更改我的 XP 主题(通过属性>>外观>>主题)时,UI 会自动重绘自身以显示 JInternalFrame又是一个标题栏,如下所示。

After Theme Change

我无法理解这种奇怪的行为。我不知道这是 Java Swing 的问题还是与操作系统有关。请在这件事上给予我帮助!

当我明确编码将 titleBar 设置为 null 时,为什么 UI 在启用标题栏的主题更改时重新绘制?

PS:使用的操作系统是 Windows XP,我不确定在 Linux 或其他版本的 Windows 中是否观察到相同的行为

最佳答案

'do' 是 Java 中的关键字,因此该代码无法为我编译。这段代码可以。

import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameUI;

class A{

public void doIt(){
JFrame fr = new JFrame();
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setSize(300,300);
JInternalFrame f = new JInternalFrame();
f.setSize(200,200);
fr.add(f);
BasicInternalFrameUI ui = (BasicInternalFrameUI) f.getUI();
ui.setNorthPane(null);
f.setVisible(true);
fr.setVisible(true);
}

public static void main(String a[]){
A obj = new A();
obj.doIt();
}
}

一些笔记/问题:

  1. 应在 EDT 上构建和更改 Swing GUI。
  2. 为什么代码将 JInternalFrame 直接添加到 JDesktopPane 以外的任何对象?
  3. 更改主题时 JInternalFrame 的大小存在一些小问题。我怀疑这与代码中缺少 validate()/pack() 有关。既然这不是问题所在,我就懒得进一步调查了。

结果

我在此处使用 Windows 7 时得到了一个“空结果”。JInternalFrame 的标题栏在通过(按顺序)更改时不会在任何时候重新出现:

  1. Forbidden Planet(自定义的简单主题)
  2. Windows 7(航空)
  3. 建筑(航空)
  4. Windows 7 Basic(基本和高对比度)
  5. Windows 经典版(基本和高对比度)
  6. 禁忌星球

关于java - 当 Windows 主题改变时,JInternalFrame 行为很奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105141/

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