[英]Why are JFrame, JDialog, JApplet (from JRootPane) heavyweight
[英]Why does this JDialog not draw properly when called from a JFrame?
从 JFrame 调用时,我在显示 JDialog 时遇到问题。 JFrame 仅包含一个按钮。 按下时,将启动一个带有 JLabel、JTextField 和 JButton 的 JDialog。
JFrame 显示正常。 JDialog 显示奇怪,有点像它试图多次绘制它(或它的元素)偏移量,当您将鼠标移动到不同的组件上时,它会不断刷新。 但仍然很奇怪,只要您使用鼠标调整 JDialog 的大小。 它表现正常(无论您是否增加/减少大小)。
这是它第一次出现的方式:
稍微调整一下大小后,就可以正确绘制了:
请问我哪里错了?
import java.awt.EventQueue;
import java.awt.event.*;
import javax.swing.*;
public class Demo extends JFrame implements Runnable {
public static void main(String[] args) {
EventQueue.invokeLater(new Demo());
}
public void run() {
setTitle("My JFrame");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btn = new JButton("Launch JDialog");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Dlg();
}
});
add(btn);
pack();
setVisible(true);
}
}
class Dlg extends JDialog {
public Dlg() {
setTitle("My JDialog");
JPanel pnl = new JPanel();
pnl.setLayout(new BoxLayout(pnl, BoxLayout.X_AXIS));
JLabel lbl1 = new JLabel("Label 1");
JTextField txt1 = new JTextField(5);
JButton btn1 = new JButton("Button 1");
pnl.add(lbl1);
pnl.add(txt1);
pnl.add(btn1);
add(pnl);
pack();
setVisible(true);
}
}
这是在带有 JDK 17.0.2 的 Windows 10 上
我在 Apache NetBeans Bugzilla 中发现了类似的问题。 “everflux”的评论 7描述了设置 JVM 参数:
我认为这是由于 Java 8 默认启用了 xrender 扩展。 我在 Nvidia 机器上的 Netbeans 8/Java 8 存在严重的图形问题,闪烁,windows 仅部分滚动等。
我在 netbeans 启动选项中添加了以下标志:-J-Dsun.java2d.opengl=true
至少在 10 分钟的测试期间,这似乎缓解了这些问题。 我鼓励其他遇到图形问题的用户对其进行测试并报告他们的结果。
在命令行或 Eclipse 中添加-Dsun.java2d.opengl=true
作为运行配置中的 VM 参数已为我修复了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.