java JDialog在Windows 10上的右监视器上的位置不正确,缩放比例为150%
我有两台显示器(Windows 10)。左监视器(非4K)设置为100%缩放。右监视器(4K)设置为150%缩放。 当我在右侧监视器上运行Java Swing应用程序(OpenJDK 11)(提供了代码)时,JOptionPane弹出窗口没有出现在正确的位置(在JFrame上方居中)。 我的问题是:我做错什么了吗?还有其他人遇到过这个吗。。。他们有解决办法吗
视窗10 两个监视器:左侧无缩放,右侧150%缩放 OpenJDK 11.0.1 Java Swing应用程序
public static final void main(String...strings) {
StringBuilder sb = new StringBuilder();
try {
sb.append("YOU NEED AT LEAST TWO SCREENS TO REPRODUCE THE ISSUE.").append('\n');
sb.append('\n');
sb.append("IN WINDOWS DISPLAY SETTINGS :\n");
sb.append(" 1) SET LEFT SCREEN TO 100% scale\n");
sb.append(" 2) SET RIGHT SCREEN TO 150% scale\n");
sb.append('\n');
sb.append("Verifying your environment...\n");
sb.append('\n');
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gdarray = ge.getScreenDevices();
sb.append("Number of screens detected: ").append(gdarray.length).append('\n');
for ( int i=0; i<gdarray.length; ++i ) {
sb.append('\n');
sb.append("Screen #").append(i+1).append(":\n");
GraphicsDevice gd = gdarray[i];
if ( gd instanceof Win32GraphicsDevice ) {
Win32GraphicsDevice wgd = (Win32GraphicsDevice)gd;
GraphicsConfiguration gc = wgd.getDefaultConfiguration();
Rectangle r = gc.getBounds();
sb.append(" x = ").append(r.x).append("\n");
sb.append(" y = ").append(r.y).append("\n");
sb.append(" width = ").append(r.width).append("\n");
sb.append(" height = ").append(r.height).append("\n");
sb.append(" scaleX = ").append(wgd.getDefaultScaleX()).append("\n");
sb.append(" scaleY = ").append(wgd.getDefaultScaleY()).append("\n");
}
else {
sb.append(" Not Windows ?\n");
}
}
sb.append('\n');
sb.append("Move application to screen 1 and click button below. Popup appears centered over application.\n");
sb.append('\n');
sb.append("Move application to screen 2 and click button below. Popup does not appear centered over application.\n");
}
catch ( Exception e ) {
sb.append("An error occurred while trying to verify your environment,\nbut you may still be able to demonstrate the bug");
}
JFrame frame = new JFrame();
JTextPane textPane = new JTextPane();
textPane.setText(sb.toString());
JScrollPane scrollPane = new JScrollPane(textPane);
JButton showPopup = new JButton("Show Popup");
showPopup.addActionListener((e) -> {
JOptionPane.showMessageDialog(frame, "This should appear directly over main frame.");
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(showPopup);
buttonPanel.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
JPanel panel = new JPanel(new BorderLayout());
panel.add(scrollPane, BorderLayout.CENTER);
panel.add(buttonPanel, BorderLayout.SOUTH);
panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.setBounds(0, 0, 500, 650);
frame.setVisible(true);
}
JOptionPane弹出窗口应位于JFrame的中心。它在左侧显示器上工作,没有缩放。它在正确的显示器上不工作
共 (0) 个答案