JDK10中的Java Swing图形分辨率和尺寸失真
我已经将基本Swing项目的编译器版本从JDK1.8更新为JDK10。这导致图像分辨率降低,JPanel的大小/尺寸现在看起来有所不同。参见J8与J10的屏幕截图: Java 8: Java 10: 以下是整个应用程序代码:JDK10中的Java Swing图形分辨率和尺寸失真,java,swing,java-8,java-10,Java,Swing,Java 8,Java 10,我已经将基本Swing项目的编译器版本从JDK1.8更新为JDK10。这导致图像分辨率降低,JPanel的大小/尺寸现在看起来有所不同。参见J8与J10的屏幕截图: Java 8: Java 10: 以下是整个应用程序代码: package com.nickjwhite.test; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.Gri
package com.nickjwhite.test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class App {
//UI objects
private JFrame frame;
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
new App();
}
public App() {
try {
//
//
//Initialise Parent Frame
//
//
setFrame(new JFrame());
getFrame().setSize(1200,800); // Dimensions of non-Maximised frame
getFrame().setTitle("Test App");
getFrame().setLocationRelativeTo(null); // Centre the frame
getFrame().setExtendedState(JFrame.MAXIMIZED_BOTH); // Maximise the frame on launch
getFrame().setIconImage(ImageIO.read(getClass().getClassLoader().getResourceAsStream("test.jpg")));
getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Kill process if window closed
getFrame().setVisible(true);
//
//
//Main content panel
//
//
contentPane = new JPanel(new GridBagLayout());
contentPane.setBackground(Color.decode("#2e3131"));
getFrame().setContentPane(contentPane);
//
//
//MenuPanel
//
//
JPanel menuPanel = new JPanel();
//Initialise Menu
// Title Background
//
JPanel menuTitleBg = new JPanel();
menuTitleBg.setLayout(new GridBagLayout());
menuTitleBg.setBackground(Color.decode("#d5b8ff"));
GridBagConstraints menuTitleBg_constraints = new GridBagConstraints();
menuTitleBg_constraints.fill = GridBagConstraints.BOTH;
menuTitleBg_constraints.gridx = 0;
menuTitleBg_constraints.gridy = 0;
menuTitleBg_constraints.weightx = 1;
menuTitleBg_constraints.weighty = 0;
menuPanel.add(menuTitleBg, menuTitleBg_constraints);
JLabel testImage = new JLabel();
GridBagConstraints testImage_constraints = new GridBagConstraints();
testImage_constraints.insets = new Insets(10, 10, 10, 10);
testImage_constraints.gridx = 0;
testImage_constraints.gridy = 0;
testImage.setSize(new Dimension(80,80));
testImage.setOpaque(false);
menuTitleBg.add(testImage,testImage_constraints);
try {
BufferedImage img = ImageIO.read(App.class.getClassLoader().getResourceAsStream("test.jpg"));
Image dimg = img.getScaledInstance(testImage.getWidth(), testImage.getHeight(), Image.SCALE_SMOOTH);
testImage.setIcon(new ImageIcon(dimg));
} catch (IOException e) {
e.printStackTrace();
}
menuPanel.setLayout(new GridBagLayout());
menuPanel.setBackground(Color.decode("#9b59b6"));
menuPanel.setPreferredSize(new Dimension(400, (int) (contentPane.getPreferredSize().height)));
menuPanel.setMinimumSize(new Dimension(400,10));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 0;
gbc_panel.weightx = 0;
gbc_panel.weighty = 1;
JScrollPane menuScrollPane = new JScrollPane(menuPanel);
menuScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
menuScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
menuScrollPane.setPreferredSize(new Dimension(400, (int) (contentPane.getPreferredSize().height)));
contentPane.add(menuScrollPane , gbc_panel);
//
//
//Action Window Panel
//
//
JPanel actionWindow = new JPanel();
actionWindow.setLayout(new GridBagLayout());
actionWindow.setBackground(Color.decode("#2e3131"));
GridBagConstraints gbc_actionWindow = new GridBagConstraints();
gbc_actionWindow.anchor = GridBagConstraints.EAST;
gbc_actionWindow.fill = GridBagConstraints.BOTH;
gbc_actionWindow.gridx = 1;
gbc_actionWindow.gridy = 0;
gbc_actionWindow.weightx = 1;
gbc_actionWindow.weighty = 1;
contentPane.add(actionWindow, gbc_actionWindow);
} catch (IOException e) {
e.printStackTrace();
}
}
public JFrame getFrame() {
return frame;
}
public void setFrame(JFrame frame) {
this.frame = frame;
}
}
我需要继续为这个项目使用JDK10进行编译,但是需要GUI来反映JDK8输出,最好在不调整menuPanel首选大小或TestImageDimensions的情况下实现这一点
有人知道这是什么原因吗
请提供一份说明问题的报告。甚至在Swing之前,我就一直在做
图形
,我没有看到版本之间的分辨率有任何差异。我只是使用Java 8和Java 10运行了我自己的测试(我没有你的图像)。我观察到图像分辨率没有差异。报告的分辨率参数和DPI也与其他内部图形环境细节相同。也许其他人可以提供额外的信息。如果你附上你的图片,我会试试。只是一个建议。请尝试使用“我无法获得与您相同的结果”,而不是ImageIO
。您确定张贴的代码显示在显示的图像中吗?您使用的是什么PC/OS?