LWJGL图标仅显示在任务栏中

时间:2014-08-03 04:41:34

标签: java icons lwjgl

我已经设置了一种方法,用于将图像加载到ByteBuffer并调用Display.setIcon(),这可以...部分工作。这将设置任务栏的图标,但将窗口的图标保留为默认的LWJGL图标。我需要调用另一种Display方法吗?或者这与windows有关。

以下是根据需要加载图标的方法:

public static final ByteBuffer[] getIcon()
{
    Image image = Toolkit.getDefaultToolkit().getImage("rw_icon.PNG");
    MediaTracker tracker = new MediaTracker(new JPanel());
    tracker.addImage(image, 0);

    try
    {
        tracker.waitForAll();
    }
    catch(InterruptedException e)
    {
        e.printStackTrace();
    }
    tracker.removeImage(image);

    BufferedImage bufImage = new BufferedImage(32, 32, BufferedImage.TYPE_4BYTE_ABGR);
    Graphics2D graphics = bufImage.createGraphics();
    graphics.drawImage(image, 0, 0, null);
    graphics.dispose();
    image.flush();

    ByteBuffer buffer = ByteBuffer.allocateDirect(32*32*4);
    buffer.clear();
    byte[] bufferData = (byte[])bufImage.getRaster().getDataElements(0, 0, 32, 32, null);
    buffer.put(bufferData);
    buffer.rewind();

    return (new ByteBuffer[] {buffer});
}

1 个答案:

答案 0 :(得分:1)

您只需将图标的两个版本(16x16,32x32)的数组传递给setIcon(..)方法。

好像你误解了ByteBuffer []。您应该传递一组不同的 ByteBuffers。不只是一个包含一个元素的ByteBuffer数组。因此,最好创建一个新方法,它基本上只是执行你的getIcon()方法所做的,但是需要一个String作为文件路径。这样您就可以轻松创建真实的图标字节缓冲区数组。

  

public static int setIcon(java.nio.ByteBuffer [] icons)

     

为人机界面设置一个或多个图标。 在Windows上,您应该提供至少一个   16x16图标和一个32x32 。 Linux(和类似的平台)期待一个   32x32图标。 Mac OS X应该提供一个128x128图标   实现将使用提供的ByteBuffers和图像数据   RGBA(大小必须是2的幂)并执行任何转换   特定平台的nescesarry。   注意:显示屏将显示   提供字节缓冲区数组的深层副本,用于   在来回全屏模式时重新创建图标。您   因此,每个实例只需要设置一次图标。

http://lwjgl.org/javadoc/org/lwjgl/opengl/Display.html#setIcon(java.nio.ByteBuffer[])