java swing 图形 分辨率_java - JDK10中的Java Swing图形分辨率和尺寸失真 - SO中文参考 - www.soinside.com...

将Java Swing项目从JDK1.8升级到JDK10后,发现图像分辨率下降且组件尺寸出现变化。主要表现为JPanels大小不同,图像显示模糊。问题在于JDK10中图形渲染的改变。代码示例展示了J8与J10的屏幕截图对比,以及一个包含JPanel和ImageIcon的简单布局。开发者寻求在不修改组件大小的情况下,使JDK10的GUI效果与JDK8保持一致。
摘要由CSDN通过智能技术生成

我已经将基本的Swing项目的编译器版本从JDK1.8更新为JDK10。这导致了较差的图像分辨率,并且JPanels的大小/尺寸现在看起来有所不同。请参阅J8与J10的屏幕截图:

Java 8:eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9sM1hMaS5wbmcifQ==

Java 10:eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9EMzJ6ai5wbmcifQ==

下面是整个应用程序代码: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 Preferred Size或testImage尺寸的情况下即可实现。

任何人都知道这是什么原因吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值