Java:向JFrame中的JPanel添加图像
我采纳了一些建议,并重写了一些代码,以实现提出的建议,并使其更具可读性。现在它无法编译。编译器抱怨无法解析JLabel上的构造函数。我就问题所在发表了评论Java:向JFrame中的JPanel添加图像,java,intellij-idea,Java,Intellij Idea,我采纳了一些建议,并重写了一些代码,以实现提出的建议,并使其更具可读性。现在它无法编译。编译器抱怨无法解析JLabel上的构造函数。我就问题所在发表了评论 /** * Created with IntelliJ IDEA. * User: goulartj * Date: 9/4/13 * Time: 10:11 AM * To change this template use File | Settings | File Templates. */ import javax.sw
/**
* Created with IntelliJ IDEA.
* User: goulartj
* Date: 9/4/13
* Time: 10:11 AM
* To change this template use File | Settings | File Templates.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class NewSwing implements ActionListener{
JFrame frame;
JTextField textField;
JTextArea textArea;
JPanel panel;
Image image;
JLabel label;
private final static String newline = "\n";
public static void main(String[] args) {
NewSwing gui = new NewSwing();
gui.go();
}
public void go(){
frame = new JFrame();
frame.getContentPane().setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textField = new JTextField("This is a text field and these are my texticles!");
textField.selectAll();
textArea = new JTextArea();
panel = new JPanel();
image = new ImageIcon("cuteKitten.jpg").getImage();
label = new JLabel(image); //COMPILER COMPLAINS HERE
panel.add(label);
frame.getContentPane().add(BorderLayout.NORTH, textField);
frame.getContentPane().add(BorderLayout.CENTER, textArea);
frame.getContentPane().add(BorderLayout.EAST, panel);
panel.setBackground(Color.CYAN);
textField.addActionListener(this);
}
public void actionPerformed(ActionEvent event){
String text = textField.getText();
textArea.append(text + newline);
textField.selectAll();
}
/* class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
g.drawImage(image, 3, 4, this);
}
} */
}
提前感谢所有的帮助!你们总是对我很好 它正在显示,但它位于屏幕边缘。 只要改变一下:
frame.getContentPane().add(BorderLayout.EAST,panel)代码>
到
frame.getContentPane().add(BorderLayout.CENTER,panel)代码>
它应该正确地显示在中间的面板中。为什么要进行自定义绘制以显示图像
问题是组件没有首选大小(因为您没有重写getPreferredSize()
方法),因此没有任何可绘制的内容
只需使用带有图标的JLabel。它将在绘制图标和确定适当大小后进行检查。不要重新发明轮子。阅读JLabel API,您将找到一个指向Swing教程的链接,该教程介绍了如何使用标签以获取更多信息
当然,您还需要确保您正在阅读图像。这很简单,只需添加System.out.println(…)即可确保正确创建图标。您确定它可以找到图像吗?此外,每次需要绘制时都可以从文件创建图像。您将在更大的应用程序中增加渲染时间。您应该创建图像,将其传递到MyDrawPanel构造函数,并使用该图像进行绘制。哦,您应该调用super.paintComponent(g);在你的paintComponent方法中,我不确定它是否能找到图像。我尝试用IntelliJ打开图像并将其添加到项目中,但也没有成功。现在它无法编译
-在我的回答中,我没有建议您使用图像创建JLabel。再读一遍我的建议。阅读JLabel API以找到合适的构造函数,并阅读教程以获得工作示例。不能在每次出现编译错误时都发布问题。您需要学习如何读取API。将ImageIcon传递到JLabel,而不是图像<代码>http://docs.oracle.com/javase/7/docs/api/javax/swing/JLabel.html
<代码>http://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html
,正如@camickr所说,当您学会如何读取错误和API时,您的生活会变得更轻松。这两件事可以让你在足够的时间内写任何东西。我尝试了你在这里提到的改变,@hdtsn,但它没有做任何事情。更准确地说,它用myDrawPanel覆盖了文本区域,但是图像仍然没有显示在面板上。那么您确定您的图像存在并且位于正确的位置吗?