[英]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.