gpt4 book ai didi

java - 在构造函数中加载图像代码可以工作,相同的代码在按钮和文件选择器操作中不起作用?

转载 作者:行者123 更新时间:2023-12-02 00:02:05 26 4
gpt4 key购买 nike

我尝试加载图像,我找到了一个代码,它运行良好,加载图像的代码在构造函数中,我尝试将其移动到 button行动,也到filechooser 。但永远不要加载图像。代码中没有错误,并且我使用 print 语句测试了这些子句,它们表明这些子句已通过。

这是一个 SSCCE:

构造函数代码分为UpperLower两部分。通过注释和取消注释交替来演示这些代码之间的问题。每个

下部部分可以工作;它从构造函数加载图像。
部分设置从 Action 代码加载图像所需的 JPanel 和 JButton。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class ImgLoadTest extends JPanel implements ActionListener
{

File file;
BufferedImage img;
JButton fileChooserButton;
JButton showImgButton;
JPanel imgePanel;
JPanel widgetPanel;
JFileChooser fileChooser;

@Override
public void paintComponent(Graphics g)
{
g.drawImage(img, 0, 60, null);
}

public ImgLoadTest()
{
//Upper:

// fileChooser = new JFileChooser();
//
// fileChooserButton = new JButton("Browse");
// fileChooserButton.addActionListener(this);
// showImgButton = new JButton("Show Image");
// showImgButton.addActionListener(this);
//
// imgePanel = new JPanel();
// widgetPanel = new JPanel();
// this.setLayout(new BorderLayout());
// widgetPanel.add(fileChooserButton);
// widgetPanel.add(showImgButton);
// this.add(imgePanel, BorderLayout.CENTER);
// this.add(widgetPanel, BorderLayout.EAST);


/*
* try alternating (comment/uncomment) between
* the upper code (in this constructor)
* and the lower code below;
*/

//Lower:

try
{
img = ImageIO.read(new File("D:\\De.JPG"));
} catch (IOException e)
{
}

}

@Override
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source == fileChooserButton)
{
int reternedValue = fileChooser.showOpenDialog(ImgLoadTest.this);

if (reternedValue == JFileChooser.APPROVE_OPTION)
{
file = fileChooser.getSelectedFile();
try
{
img = ImageIO.read(file);
System.out.println("File chooser: Image accepted");
this.repaint();

} catch (IOException err)
{
System.out.println("error " + err);
}
} else
{
System.out.println("No Image");
}
}
if (source == showImgButton)
{
try
{
System.out.println("button: Image accepted");
img = ImageIO.read(new File("D:\\De.JPG"));
repaint();
} catch (IOException err)
{
System.out.println("No Image");
System.out.println("error " + err);
}
}
}

public static void main(String[] args)
{
JFrame frame = new JFrame("Image load test");
frame.setSize(new Dimension(400, 600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImgLoadTest imgLoadTest = new ImgLoadTest();
frame.add(imgLoadTest);
frame.setVisible(true);
}
}

最佳答案

仅分配 BufferedImage img 不会使图像出现。您可以添加一个包含图像的 JLabel:

JLabel picLabel = new JLabel(new ImageIcon(img));
imgePanel.add(picLabel);
imgePanel.revalidate();
imgePanel.repaint();

关于java - 在构造函数中加载图像代码可以工作,相同的代码在按钮和文件选择器操作中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com