見栄えの悪いマウスカーソル
AWTで自分の作ったカーソルを設定しようとしたのですが、どうも不自然に拡大されて、ギザギザが目立っています。どうやら画像がgetBestCursorSize()の32x32に拡大されているようです。
そこで、プログラム側でベストなカーソルサイズに作り直してから登録するようにしました。これでキレイに表示されました。
import java.io.*; import java.awt.*; import java.awt.image.*; import javax.imageio.*; import javax.swing.*; class TestBestCursor { public static void main(String[] args) throws Exception { Toolkit toolkit = Toolkit.getDefaultToolkit(); for (int i=0; i<=64; i++) { Dimension dim = toolkit.getBestCursorSize(i, i); System.out.println("i="+i+" dim="+dim); // 全部32x32になる。 } BufferedImage image = ImageIO.read(new File("Earth.png")); Dimension dim = toolkit.getBestCursorSize(image.getWidth(), image.getHeight()); if (dim.width != image.getWidth() || dim.height != image.getHeight()) { BufferedImage newimage = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D g2 = (Graphics2D) newimage.getGraphics(); g2.drawImage(image, 0, 0, new Color(255,0,0,0), null); image = newimage; } Cursor cursor = toolkit.createCustomCursor(image, new Point(8, 8), "earth"); JFrame frame = new JFrame(); JLabel label = new JLabel("らべる"); label.setCursor(cursor); frame.getContentPane().add(label); frame.setSize(640, 480); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }