繁体   English   中英

为什么从 JFrame 调用此 JDialog 时无法正确绘制?

[英]Why does this JDialog not draw properly when called from a JFrame?

从 JFrame 调用时,我在显示 JDialog 时遇到问题。 JFrame 仅包含一个按钮。 按下时,将启动一个带有 JLabel、JTextField 和 JButton 的 JDialog。

JFrame 显示正常。 JDialog 显示奇怪,有点像它试图多次绘制它(或它的元素)偏移量,当您将鼠标移动到不同的组件上时,它会不断刷新。 但仍然很奇怪,只要您使用鼠标调整 JDialog 的大小。 它表现正常(无论您是否增加/减少大小)。

这是它第一次出现的方式:

显示奇怪绘制的 JButton 的对话框

稍微调整一下大小后,就可以正确绘制了:

调整大小后正确绘制的对话框

请问我哪里错了?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM