相关疑难解决方法(0)

Java 9 hdpi显示支持 - 多分辨率图像 - Windows中的名称约定和加载

根据这些文章:

http://news.kynosarges.org/2015/06/29/javafx-dpi-scaling-fixed
https://twitter.com/michaelsamarin/status/729234779292483584

Java 9应支持Swing中的高DPI显示(自动DPI缩放).我已经在Zulu 9上的Java 9 Early Access + 的最新版本上测试了它,它看起来非常棒.

我无法解决一件事 - 高分辨率/视网膜图像加载.

根据上面和下面的文章(链接),它应该使用Apple名称约定(@ 2x):

image.png,image@2x.png,image@3x.png,等.

我测试了这些加载方法:

Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("something/image.png"));
Run Code Online (Sandbox Code Playgroud)

ImageIO.read(getClass().getResource("/something/image.png"));
Run Code Online (Sandbox Code Playgroud)

但这些都不起作用(唯一的基本图像被加载和模糊).

根据这个:

https://netbeans.org/bugzilla/show_bug.cgi?id=239745

第一种方法应该是有希望的.

有没有人有这方面的经验(使用Swing甚至JavaFX)?我不确定我是做错了什么,或者这个功能没有实现到当前预发布版本的Java 9 sofar.


更新:

它应该是可能的:

http://openjdk.java.net/jeps/263

我也试过遵循命名约定(这里描述):

Windows : image.scale-<dpi-value>.png (image.scale-140.png)
Linux : image.java-scale2x.png
Mac : image@2x.png and image.java-scale2x.png
Run Code Online (Sandbox Code Playgroud)

但是,我找不到任何有效的解决方案或官方信息.我不明白 - hdpi显示器今天很常见,Java应用程序看起来就像它们.

java swing image hdpi retina

33
推荐指数
1
解决办法
2923
查看次数

如何将MouseListener添加到Java Swing Canvas上的项目

我想创建一个Java面板,用于创建用户单击的对象.由于我的实际应用程序使用MVC方法,我也希望这些对象能够在模型更改时重新绘制自己,并提供更改其属性的菜单.

我认为控制x和y位置的最佳方法是采用基于画布的方法,从方法中JPanel调用这些对象的draw paintComponent方法.然而,这只会在画布上绘制形状,并且不会添加对象本身而失去控制对象属性的所有能力.如果有人能告诉我最适合自己想做的事情,我将非常感激.

我已经创建了一些示例代码,可以在下面看到.单击时,我希望圆圈改变颜色,这是使用MouseListener实现的(它基本上代表在这个小例子中更改模型属性).此外,我还想确保放大/缩小仍然适用于任何示例代码/建议可以提供,所以我添加了按钮来放大和缩小对象作为快速测试.

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.geom.Ellipse2D;

public class Main  {

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                ExamplePanel panel = new ExamplePanel();

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    //I could not get this to with when it extended JLayeredPane
    private static class ExamplePanel extends JPanel {
        private static final int maxX = 500;
        private static final …
Run Code Online (Sandbox Code Playgroud)

java swing position canvas

1
推荐指数
1
解决办法
3849
查看次数

标签 统计

java ×2

swing ×2

canvas ×1

hdpi ×1

image ×1

position ×1

retina ×1