簡體   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