带有图形的java组件
我正在尝试创建一个JFrame
,其中包含一个图像和一个文本框。我设法弄明白了文本框,但我搞不懂图像绘制。到目前为止,我有:
public class Patcher extends JFrame {
private static final long serialVersionUID = -431324639043295668L;
private JPanel contentPane;
private static JTextArea textArea;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Patcher frame = new Patcher();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Patcher() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 319);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
textArea.setBackground(new Color(240, 240, 240));
textArea.setText("123");
contentPane.add(textArea, BorderLayout.SOUTH);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
Image img = ImageIO.read(new URL(ClassLoader.getSystemResource("Icon_Entrey_21.png"), "img"));
ImageObserver imgobs;
panel.paintComponent(Graphics.drawImage(img, 0, 0, null));
}
}
我的想法是创建一个JPanel
,使用ClassLoader
声明一个Image
,并尝试使用paintComponent()
方法以Graphics
作为参数来绘制它。我做错了什么
我也尝试过创建一个new Graphics()
,但它也会抛出一个错误
# 1 楼答案
永远不要显式调用任何组件的
paintComponent
方法。如果您想进行自定义绘制,那么您可以创建一个自定义类来扩展JPanel/JComponent
和@Override
方法paintComponent
。详见Performing Custom Painting最简单、也可能更正确的解决方案是使用
JLabel
和ImageIcon
而不是尝试定制绘画