繁体   English   中英

如何将图像放入表单中?

[英]How can I put an image in my form?

我有问题 我想将图像放在Java表单中,但我不知道我是否使用了适当的技术(在网页的某处找到它)。

private void iconSelect() {
    String iconString = "";
    if (typeCombobox.getSelectedIndex() == 0) {
        iconString = "LP_";
    } else if (typeCombobox.getSelectedIndex() == 1) {
        iconString = "HP_";
    } else if (typeCombobox.getSelectedIndex() == 2) {
        iconString = "BP_";
    } else if (typeCombobox.getSelectedIndex() == 3) {
        iconString = "BS_";
    }
    if (RB_Gain_Clean.isSelected()) {
        iconString = iconString + "Clean";
    } else if (RB_Gain_dB.isSelected()) {
        iconString = iconString + "dB";
    }

    ImageIcon icon = new ImageIcon("images/" + iconString + ".jpg");
    Image img = icon.getImage();
    if (iconGraphLabel.getWidth() > 0 && iconGraphLabel.getHeight() > 0) {
        img = img.getScaledInstance(iconGraphLabel.getWidth(), iconGraphLabel.getHeight(), java.awt.Image.SCALE_SMOOTH);
    }
    icon = new ImageIcon(img);
    iconGraphLabel.setIcon(icon);
}

因此,它实际上显示了图像并且正在调整大小,但是当我调整窗体的大小然后再次缩小它时,标签似乎并没有遵循调整大小,因此它比窗口大。

另外,由于我对Java的图形不是很熟悉,所以谁能告诉我如何控制窗口大小调整事件,以便重绘图片? 现在,该方法由组合框和代码中显示的单选按钮触发。

提前致谢!

edit1:好的形式就是我的jFrame。 iconGraphLabel是我要放入图像的jLabel。我将尝试解释父组件的层次结构。

PlotArea [jPanel](cardLayout)> plotArea_Image [jPanel](“ cardDraw”)> iconGraphPanel [jPanel]> iconGraphLabel

但是当我调整窗体的大小然后再次缩小它时,标签似乎没有遵循调整大小,因此它的大小比窗口大

正确,一个JLabel或使用图标的任何Swing组件都将按其实际大小绘制图标。 如果要根据可用空间缩放图标,则需要进行自定义绘制。

Background Panel类提供了用于显示图像的不同选项(您可以仅使用Icon,getImage()方法)。 您还应该阅读Swing教程中有关Custom Paint的部分,以更好地理解上述代码的工作原理。

找到了解决方案。 这是最终代码:

private void iconSelect() {
    iconGraphPanel.removeAll();
    ImageIcon icon = new ImageIcon("image.jpg");
    BackgroundPanel imagePanel = new BackgroundPanel(icon.getImage(), BackgroundPanel.SCALED);
    iconGraphPanel.add(imagePanel);
    iconGraphPanel.revalidate();
}

iconGraphPanel是常用的jPanel,用作占位符。 它需要设置为BorderLayout。 您可以在此处找到BackgroundPanel类。 需要removeAll(),以便旧图像消失。 如果您不放置此图像,则开始堆叠。 不知道是否有更好的方法可以执行此操作,但对我来说效果很好。 需要revalidate()方法,因为我们创建了一个新面板,因此需要刷新。

这主要是camickr的工作,还有来自太阳论坛的其他人,名为Maxideon。 我只是发布以供将来参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM