我是Java GUI编程的新手。我正在开发一个应用程序,我需要在UI上显示图像,以及其他一些按钮/控件。我有一段使用JFrame的代码。
我的要求是我想添加更多小部件,例如按钮来开始/停止显示图像等。当我使用Jframe显示图像时,它占用整个JFrame,我无法添加其他控件。
我正在寻找可以显示图像并将其作为组件添加到JFrame中的内容。有人可以解释一下如何做到这一点吗?
答案 0 :(得分:7)
我是Java GUI编程的新手。我正在开发一个应用程序,我需要在UI上显示图像,以及其他一些按钮/控件。我有一段使用JFrame的代码。
作为一个未被征求意见的一般建议,我建议您尽量避免让您的类扩展顶级窗口类(如JFrame),因为这将极大地限制您可以对该类执行的操作。如果你需要扩展它是一个JPanel的Swing组件,那就更好了,因为它可以放在JFrame,JDialog,JOptionPane,另一个JPanel中......几乎在你的GUI中的任何地方。请注意,大多数情况下,您甚至不需要让您的类扩展组件。
我的要求是我想添加更多小部件,例如按钮来开始/停止显示图像等。当我使用Jframe显示图像时,它占用整个JFrame,我无法添加其他控件。 / p>
这有点令人困惑,因为JFrame本身没有显示图像的机制。
我正在寻找可以显示图像并将其作为组件添加到JFrame中的内容。有人可以解释一下如何做到这一点吗?
您的要求有点模糊,但请考虑:
setIcon(someIcon)
来交换图像。paintComponent(Graphics g)
方法中显示您的图像!)。如果此信息对您没有帮助,请通过向我们提供更相关的背景信息和相关代码,考虑更多地解答您的问题。
答案 1 :(得分:4)
一种简单的方法是在JLabel
中显示图像。
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.util.Random;
public class ImageViewer {
JPanel gui;
/** Displays the image. */
JLabel imageCanvas;
/** Set the image as icon of the image canvas (display it). */
public void setImage(Image image) {
imageCanvas.setIcon(new ImageIcon(image));
}
public void initComponents() {
if (gui==null) {
gui = new JPanel(new BorderLayout());
gui.setBorder(new EmptyBorder(5,5,5,5));
imageCanvas = new JLabel();
JPanel imageCenter = new JPanel(new GridBagLayout());
imageCenter.add(imageCanvas);
JScrollPane imageScroll = new JScrollPane(imageCenter);
imageScroll.setPreferredSize(new Dimension(300,100));
gui.add(imageScroll, BorderLayout.CENTER);
}
}
public Container getGui() {
initComponents();
return gui;
}
public static Image getRandomImage(Random random) {
int w = 100 + random.nextInt(400);
int h = 50 + random.nextInt(200);
BufferedImage bi = new BufferedImage(
w,h,BufferedImage.TYPE_INT_RGB);
return bi;
}
public static void main(String[] args) throws Exception {
Runnable r = new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Image Viewer");
// TODO Fix kludge to kill the Timer
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final ImageViewer viewer = new ImageViewer();
f.setContentPane(viewer.getGui());
f.pack();
f.setLocationByPlatform(true);
f.setVisible(true);
ActionListener animate = new ActionListener() {
Random random = new Random();
@Override
public void actionPerformed(ActionEvent arg0) {
viewer.setImage(getRandomImage(random));
}
};
Timer timer = new Timer(1500,animate);
timer.start();
}
};
SwingUtilities.invokeLater(r);
}
}
答案 2 :(得分:3)
有几个组件支持显示图标。其中一个是JLabel:http://docs.oracle.com/javase/tutorial/uiswing/components/label.html
另一种选择是扩展JPanel并覆盖paintComponent()方法以显示您想要的任何内容,包括图像:http://docs.oracle.com/javase/tutorial/uiswing/painting/