java - 两个类和图像不出现

标签 java image class object methods

我创建了两个类,其中一个是扩展类。我创建了一个对象,但没有出现文件(方法工作正常,因为出现了标题形式的 draw() 方法。所有代码:

public class Main_class extends JFrame implements ActionListener{
 //**************************// 
 public static void main(String[] args) {
       java.awt.EventQueue.invokeLater(new Runnable(){
 public void run(){
 new Main_class().setVisible(true);
 }
 });
}
 //**************************// 
 JPanel panel;

 JMenuBar mbar; 
 JMenuItem item;

 JMenuItem open;
 JMenu file;
 BufferedImage my_image;


public Main_class(){
setSize(800, 600);
setTitle("TEST");
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel=new JPanel();

mbar=new JMenuBar();
setJMenuBar(mbar);

    file=new JMenu("File");
    mbar.add(file);

    open=new JMenuItem("Open");
    open.addActionListener(this);
    file.add(open);      
 }

@Override
public void actionPerformed(ActionEvent e) {
 String zrodlo=e.getActionCommand();
 image_class k=new image_class();
    if(zrodlo.equals("Open")) try {
        k.load(my_image);
    } catch (IOException ex) {
        Logger.getLogger(Main_class.class.getName()).log(Level.SEVERE, null, ex);
    }
}
}

///////////////////////////////////////////

public class image_class extends Main_class{

public void load(BufferedImage my_image) throws IOException{
  JFileChooser open_chooser=new JFileChooser("//");
  FileNameExtensionFilter rast=new FileNameExtensionFilter("Pliki grafiki rastrowej(.jpeg,.png.,gif...)", "jpeg","jpg", "gif","png","bmp");
  open_chooser.setFileFilter(rast);
  int a=open_chooser.showOpenDialog(null);

  if(a==JFileChooser.APPROVE_OPTION){
  String image_name=open_chooser.getSelectedFile().getAbsolutePath();
  String roz=image_name.substring(image_name.lastIndexOf('.')+1);
  my_image=ImageIO.read(open_chooser.getSelectedFile());               
  draw();    
}
}

public void draw(){  
 panel=new JPanel(){
        protected void paintComponent(Graphics g){
            Graphics g2 = g.create();
            g2.drawImage(my_image, 0, 0, getWidth(), getHeight(), null);
            g2.dispose();             
        }         
 };   
 panel.setBounds(0, 0, 200, 200);
 add(panel);
 revalidate();  
 repaint();   
 System.out.print("LOADED!!!!!!");
 }
 }

最佳答案

你的形象与你不一样

  1. 永远不要通过调用 setVisible 显示您的第二个 JFrameimage_class
  2. 因为 Java 是按值传递,所以您没有将 my_image 分配给 load 中同名的类成员变量方法,而是变量的本地副本:

替换

my_image = ImageIO.read(open_chooser.getSelectedFile());

this.my_image = ImageIO.read(open_chooser.getSelectedFile());

(或者干脆不传入变量)

建议您在此处使用单个 JFrame,添加 JComponent 的子类并在该组件上绘制图像。

相关:

关于java - 两个类和图像不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294085/

相关文章:

php - 在 gridview yii2 中设置宽度图像

php - 使用 PHP 调整 HTML 图像标记的内容

c++ - 类中的字符串//C++

C++ 类 - 如何从函数返回自定义类型的 vector ?

java - Web 应用程序的名称总是 war 的名称吗?

java - jhipster:在 PROD 模式下运行时如何避免数据库更新?

android - 使用 BitmapFactory 从流/文件加载裁剪后的图像

arrays - 如何引用 Swift 4 中的结构在类中正确构造函数?

java - 计算单词中的字母出现次数

java - Spring Reactor与服务器发送事件连接问题