【问题标题】:How can I generate images in a JPanel?如何在 JPanel 中生成图像?
【发布时间】:2019-04-21 12:29:09
【问题描述】:

我想用 MVC 在我的 JPanel 上生成图像。我对Java没有太多经验,所以我遇到了一些问题。

我检查了一些关于它的问题,最喜欢我看到人们建议使用 JLabel ImageIcon。所以我尝试设置它,但不起作用。

查看:

public class View extends javax.swing.JFrame {

    public View() {
        initComponents();
    }

    public void addActionListener(ActionListener listener)
    {
        this.jButton1.addActionListener(listener);
    }

    public void drawImage(BufferedImage image)
    {
        JLabel label = new JLabel(new ImageIcon(image));
        this.jPanel1.add(label);
        this.add(jPanel1);
        this.pack();
     }

控制器:

public class Controller {

    View view = new View();

    public Controller(View view)
    {
        this.view = view;
        view.addActionListener(new ButtonListener());
    }

    class ButtonListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {

            BufferedImage image = null;
            try {
                image = ImageIO.read(new File(getClass().getClassLoader().getResource("noimg.png").getFile()));
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            view.drawImage(image);
        }

    }
}

主要:

public class Main {

    public static void main(String[] args) {
        View view = new View();
        Controller controller = new Controller(view);

        view.setVisible(true);
 }

当我按下按钮时,什么也没有发生。当我按下按钮时,我希望看到该图像出现在我的 JPanel 上。

【问题讨论】:

  • 在创建 GUI 时将标签放入 GUI 中,而不是在按钮按下时。按下按钮时,只需创建 ImageIcon 并设置标签的图标。就是这样。
  • 我想生成未知数量的图像,所以我无法在一开始就创建标签。我想用随机图像在随机位置生成它们。
  • 1) 为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。硬编码数据替换数据库。 2) 例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。例如。 This answer 指向嵌入在 this question 中的图像的热链接。 3) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则使用
  • .. 更多的宽度和高度 - 显示应该如何使用额外的空间。
  • 永远不要使用 URL 的getFile() 方法。它返回一个有效的文件名;它是 Java 1.0 时代的遗留物,当时大多数 URL 碰巧都有引用物理文件的路径部分,无论是在本地机器上还是在远程机器上。有一个接受 URL 的ImageIO.read 方法,因此将 getResource 返回的值直接传递给 ImageIO.read。

标签: java swing model-view-controller awt


【解决方案1】:

我只需要设置标签大小。

这里是固定代码:

public void drawImage(BufferedImage image)
    {
        JLabel label = new JLabel(new ImageIcon(image));
        label.setLocation(1, 1);
        label.setSize(50, 130);
        this.jPanel1.add(label);
        this.jPanel1.validate();
        this.jPanel1.repaint();
}

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 2016-07-23
    • 2017-09-07
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多