Java:在jscrollpanne中加载图像

尤尼斯

我想加载图像时遇到一些问题

1类:Draw_Image

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;

public class Draw_Image extends Canvas{
    BufferedImage image= null;
    //Constructeur, prend une image Buffered
    public Draw_Image(BufferedImage img){
        //copier l'image dans son attribut
        image= img;
    }
    public void paint(Graphics g){
        //Peintre le graphique g d e l'image
        g.drawImage(image,0,0,this);
    }
}

2类:选择一个图像,然后尝试加载到Jscrollpan中(在主要类别中声明)

import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JPanel;

public class LoadImage extends JPanel{
    private String path1;
    private String path2;
    private String path3;
    NewJFrame j;

    private JFileChooser parcourir= new JFileChooser();

    BufferedImage img = null;

    public LoadImage(){
        parcourir.showOpenDialog(null);
        if(parcourir.showOpenDialog(null)== JFileChooser.APPROVE_OPTION){
            //récupérer image à partir du choix de l'utilisateur
            String file2= parcourir.getSelectedFile().getPath();
            path2= file2;

            try {
                img = ImageIO.read(new File(file2));
                Draw_Image d1= new Draw_Image(img);         
                //d1.setSize(j.jScrollPane1.getWidth(),j.jScrollPane1.getHeight());

                j.jScrollPane1.removeAll();
                j. jScrollPane1.add(d1);    
                add(d1, BorderLayout.CENTER);
            }
            catch (IOException ex) {
                // Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("err");
            }
        }
    }
}

主班

public class Main extends javax.swing.JFrame {

/**
 * Creates new form NewJFrame
 */
public Main() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jButton_Open_Image = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jMenuBar1 = new javax.swing.JMenuBar();
    jMenu1 = new javax.swing.JMenu();
    jMenu2 = new javax.swing.JMenu();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton_Open_Image.setText("Open");
    jButton_Open_Image.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton_Open_ImageActionPerformed(evt);
        }
    });

    jButton2.setText("Gray_Scale");

    jMenu1.setText("File");
    jMenuBar1.add(jMenu1);

    jMenu2.setText("Edit");
    jMenuBar1.add(jMenu2);

    setJMenuBar(jMenuBar1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jButton2)
                .addComponent(jButton_Open_Image, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE)
            .addContainerGap())
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 264, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap())
        .addGroup(layout.createSequentialGroup()
            .addGap(53, 53, 53)
            .addComponent(jButton_Open_Image)
            .addGap(18, 18, 18)
            .addComponent(jButton2)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        

private void jButton_Open_ImageActionPerformed(java.awt.event.ActionEvent evt) {                                                   
    new LoadImage();
}                                                  

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(Main.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Main().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton_Open_Image;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
protected javax.swing.JScrollPane jScrollPane1;

在此处输入图片说明

谢谢 。

卡米克尔

切勿使用add(...)方法将组件添加到JScrollPane。该组件需要添加到JViewport滚动面板的中。

使用以下方法创建JScrollPane时,将自动完成此操作:

JScrollPane scrollPane = new JScrollPane( someComponent );

或者您可以使用:

scrollPane.setViewportView( someComponent );

如果要显示图像,则无需进行自定义绘制。只需将ImageIcon添加到JLabel并将标签添加到滚动窗格

JLabel label = new JLabel( new ImageIcon(...) );
JScrollPane scrollPane = new JScrollPane( label );

如果您确实想进行自定义绘画,则不要扩展Canvas,这是AWT组件。相反,您可以扩展JPanel扩展JPanel时,您将需要重写paintComponent(...)并实现getPreferredSize()才能使滚动窗格正常工作。

阅读Swing教程中有关“自定义绘画”的部分,以获取更多信息。保留所有Swing基础知识到本教程的链接。

本教程也有一节How to Use Icons您应该阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章