GridBagLayout Java中的图像显示

时间:2009-06-25 18:58:38

标签: java arrays image

我的图像从服务器传递到我的程序中并保存为字符串。我想将该字符串转换为图像,然后在GridBagLayout内的标签内显示该图像。当我执行下面的代码时,我得到一个空白框架。执行期间没有例外。当我在调试中查看ToolKit中的图像对象时,它确实表示高度和宽度为-1(但source = ByteArrayImageSource中的“imagedata”具有字节[5144])。有什么想法吗?

添加注意:Image作为String存储在程序中,因为数据是在C#中序列化的,并且正在Java中反序列化。此过程显然不喜欢反序列化过程中的byte[],所以我将其保存为字符串,并在我想使用图像时使用getBytes

imageToDisplay = Toolkit.getDefaultToolkit().createImage(myString.getBytes());
ImageIcon logoIcon = new ImageIcon(imageToDisplay);
JLabel logolabel = new JLabel(logoIcon);
mainPanel.add(logolabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
                GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, 
                new Insets(2, 2, 2, 2), 0, 0));
mainFrame.add(mainPanel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
                GridBagConstraints.CENTER, GridBagConstraints.BOTH, 
                new Insets(2, 2, 2, 2), 0, 0));

3 个答案:

答案 0 :(得分:0)

首先,您需要确定问题是图像还是布局。 mmyers建议并使用FlowLayout将其放置在面板上(可能单独使用)。如果它仍未显示,则可能是图像。是否有将输入转换为String的原因?默认字符集可能无法干净地处理转换(即,bytes - > String - >字节可能无法为您提供相同的初始字节)。

答案 1 :(得分:0)

将String转换为字节时,始终会给出明确的编码,因为默认值取决于平台。

在大多数情况下使用ISO-8859-1都可以,因为该编码将字节0到255映射到字符U + 0000到U + 00FF。

当然,当你将数据转换为C#中的String时,你必须确保数据没有被破坏(你可以在那里给出一个编码......)。

答案 2 :(得分:0)

原来这是我自己的错。除了忘记解码图像字符串之外,上面编写的代码没有任何问题。它从服务器Base64编码传递,我在该编码字符串上使用getBytes并将其传递到“createImage”函数。感谢您的建议和帮助。正确的代码如下:

try 
{
        imageToDisplay = Toolkit.getDefaultToolkit().createImage(Base64.decode(myString));
} catch (Exception e1) {
        //          // TODO Auto-generated catch block
        e1.printStackTrace();
}

ImageIcon logoIcon = new ImageIcon(imageToDisplay);
JLabel logolabel = new JLabel(logoIcon);
mainPanel.add(logolabel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
    GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, 
    new Insets(2, 2, 2, 2), 0, 0));