[英]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.