0

我接受了一些建议并重写了一些代码以实现所提出的建议并使其更具可读性。现在它不会编译。编译器抱怨它无法解析 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.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);
        }
    }     */
}

提前感谢所有帮助!你们总是对我这么好!

4

2 回答 2

1

你为什么要自定义绘画来显示图像???

问题是组件没有首选大小(因为您没有覆盖该getPreferredSize()方法),因此没有什么可绘制的。

只需使用带有图标的 JLabel。它将在绘制图标并确定适当的大小后进行处理。不要重新发明轮子。阅读 JLabel API,您将找到有关如何使用标签的 Swing 教程的链接以获取更多信息。

当然,您还需要确保您正在阅读图像。这很容易,您只需添加一个 System.out.println(...) 以确保正确创建图标。

于 2013-09-04T18:29:14.967 回答
0

它正在显示,但它位于屏幕边缘。只是改变:

frame.getContentPane().add(BorderLayout.EAST, panel);

frame.getContentPane().add(BorderLayout.CENTER, panel);

它应该在中心的面板中正确显示。

于 2013-09-04T16:09:00.033 回答