为什么从 JFrame 调用时此 JDialog 无法正确绘制?
Why does this JDialog not draw properly when called from a JFrame?
当从 JFrame 调用时,我遇到了 JDialog 显示的问题。 JFrame 只包含一个按钮。按下时,这会启动一个带有 JLabel、JTextField 和 JButton 的 JDialog。
JFrame 显示正常。 JDialog 显示奇怪,有点像它试图绘制它(或它的元素)多次偏移!当您将鼠标移到不同的组件上时,它会不断刷新,但仍然很奇怪。只要您使用鼠标调整 JDialog 的大小,它就会正常运行(无论您 increase/decrease 大小如何)。
第一次出现时是这样的:
稍稍调整后,绘制正常:
请问我哪里错了?
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);
}
}
编辑
这是在 Windows 10 和 JDK 17.0.2
我发现 similar issue descibed in an Apache NetBeans Bugzilla. Comment 7,作者是“everflux”,描述了设置 JVM 参数:
I assume this is due to Java 8 enbabling the xrender extension by default. I have serious graphics issues with Netbeans 8/Java 8 on Nvidia machine, flickering, windows only scrolling partly etc.
I added the following flag to the netbeans startup options:
-J-Dsun.java2d.opengl=true
this seemed to mitigate the problems, at least during a 10 minute test period. I encourage other users experiencing graphics problems to test it and report their results.
在命令行或 Eclipse 中添加 -Dsun.java2d.opengl=true
作为 运行 配置中的 VM 参数已为我修复了它。
当从 JFrame 调用时,我遇到了 JDialog 显示的问题。 JFrame 只包含一个按钮。按下时,这会启动一个带有 JLabel、JTextField 和 JButton 的 JDialog。
JFrame 显示正常。 JDialog 显示奇怪,有点像它试图绘制它(或它的元素)多次偏移!当您将鼠标移到不同的组件上时,它会不断刷新,但仍然很奇怪。只要您使用鼠标调整 JDialog 的大小,它就会正常运行(无论您 increase/decrease 大小如何)。
第一次出现时是这样的:
稍稍调整后,绘制正常:
请问我哪里错了?
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);
}
}
编辑
这是在 Windows 10 和 JDK 17.0.2
我发现 similar issue descibed in an Apache NetBeans Bugzilla. Comment 7,作者是“everflux”,描述了设置 JVM 参数:
I assume this is due to Java 8 enbabling the xrender extension by default. I have serious graphics issues with Netbeans 8/Java 8 on Nvidia machine, flickering, windows only scrolling partly etc.
I added the following flag to the netbeans startup options: -J-Dsun.java2d.opengl=true
this seemed to mitigate the problems, at least during a 10 minute test period. I encourage other users experiencing graphics problems to test it and report their results.
在命令行或 Eclipse 中添加 -Dsun.java2d.opengl=true
作为 运行 配置中的 VM 参数已为我修复了它。