Java 在构造函数工作中加载图像代码,相同的代码不会';无法从按钮和文件选择器操作工作?
我试着加载图像,我发现了一个代码,它工作得很好,加载图像的代码在构造函数中,我试着把它移动到一个动作,也移动到一个动作。但永远不要加载图像。代码中没有错误,我使用print语句测试了子句,它们表明子句已通过 这是一个SSCCE: 构造函数代码分为两部分上部和下部。通过注释和取消注释,说明这些代码之间的问题 下部部分将工作;它从构造函数加载图像。Java 在构造函数工作中加载图像代码,相同的代码不会';无法从按钮和文件选择器操作工作?,java,image,swing,load,Java,Image,Swing,Load,我试着加载图像,我发现了一个代码,它工作得很好,加载图像的代码在构造函数中,我试着把它移动到一个动作,也移动到一个动作。但永远不要加载图像。代码中没有错误,我使用print语句测试了子句,它们表明子句已通过 这是一个SSCCE: 构造函数代码分为两部分上部和下部。通过注释和取消注释,说明这些代码之间的问题 下部部分将工作;它从构造函数加载图像。 上部部分设置从操作代码加载图像所需的JPanel和JButtons import java.awt.*; import java.awt.event.*
上部部分设置从操作代码加载图像所需的JPanel和JButtons
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);
}
}
仅分配
buffereImage
img
不会显示图像。您可以添加包含图像的JLabel
:
JLabel picLabel = new JLabel(new ImageIcon(img));
imgePanel.add(picLabel);
imgePanel.revalidate();
imgePanel.repaint();
仅分配
buffereImage
img
不会显示图像。您可以添加包含图像的JLabel
:
JLabel picLabel = new JLabel(new ImageIcon(img));
imgePanel.add(picLabel);
imgePanel.revalidate();
imgePanel.repaint();
除了paintComponent代码应该在imgePanel上完成之外,它应该可以工作。在分配新图像后,您可能希望重新验证并重新绘制它(就像Reimeus所做的那样),以确保它实际绘制在屏幕上。除了应该在imgePanel上完成paintComponent代码之外,它应该可以工作。在分配新图像后,您可能希望重新验证并重新绘制它(就像Reimeus所做的那样),以确保它实际绘制在屏幕上。因此,您将一组组件添加到一个容器中,您已经覆盖了该容器的paintComponent方法,以便在容器上绘制某些内容……然后想知道为什么图像不会出现……感谢这一点。我不擅长Java的这一部分。因此,您将一组组件添加到一个容器中,您已经覆盖了它的paintComponent方法来在容器中绘制某些内容…然后想知道为什么图像不会出现…感谢这一点。我不擅长Java的这一部分。