gpt4 book ai didi

java - 如何消除在Windows上运行的Java Swing中的黑滞后区域

转载 作者:行者123 更新时间:2023-12-04 15:04:46 26 4
gpt4 key购买 nike

我写的每个Swing应用程序都有一个共同的问题:调整窗口大小时出现黑色区域​​,即使是下面最简单的代码:

import javax.swing.*;

public class SampleWindow extends JFrame {

public static void main(String[] args) {
SampleWindow sampleWindow = new SampleWindow();
sampleWindow.setTitle("Sample Window");

JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(new JLabel(
System.getProperty("os.name") + " Java " + System.getProperty("java.version")
), BorderLayout.CENTER);

sampleWindow.setContentPane(contentPane);
sampleWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
sampleWindow.setSize(400, 200);
sampleWindow.setVisible(true);
}
}

enter image description here

enter image description here

让我们看看 JavaFX 的行为:

enter image description here

有什么办法可以消除这种情况吗?


我想添加一个组件监听器并在事件发生时打印:

sampleWindow.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("Resizing event: " + System.currentTimeMillis());
}
});

我得到了这些输出:

Resizing event: 1614328759426
Resizing event: 1614328759524 // huge delay
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759525
Resizing event: 1614328759526
Resizing event: 1614328759526

很明显,第一行和第二行之间有巨大的延迟。我认为尝试处理调整大小事件并不费力。


我发现 IntelliJ 也有类似的问题,所以我放弃了:(

enter image description here

最佳答案

动画不知道怎么做,这段代码没体验到黑色区域

Sample Window GUI

我的要点是始终通过调用 SwingUtilities invokeLater 方法来启动您的 Swing 应用程序。此方法确保在 Event Dispatch Thread 上创建和执行 Swing 组件.

这是我运行的代码。

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SampleWindow implements Runnable {

public static void main(String[] args) {
SwingUtilities.invokeLater(new SampleWindow());
}

private String properties;

public SampleWindow() {
this.properties = System.getProperty("os.name") + " Java " +
System.getProperty("java.version");
}

@Override
public void run() {
JFrame sampleWindow = new JFrame();
sampleWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sampleWindow.setTitle("Sample Window");

JLabel label = new JLabel(properties);
label.setHorizontalAlignment(JLabel.CENTER);

JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(label, BorderLayout.CENTER);

sampleWindow.add(contentPane, BorderLayout.CENTER);
sampleWindow.setSize(400, 200);
sampleWindow.setVisible(true);
}

}

关于java - 如何消除在Windows上运行的Java Swing中的黑滞后区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66382178/

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