Ajuda com projeto em Java Actionperformed com for para C.G

Boa tarde comunidade,

Sou novo aqui, me registrei para pedir ajuda com um projeto que estou fazendo de computação gráfica.
Procurei pelo forum antes de postar e em muitos outros lugares, nao achei nada que atendesse as expectativas, sou iniciante entao qualquer dica por mais obvia que for, acredito que irá me ajudar.

A funcao de meu programa que precisa ser feita e basica, preciso que a cada nova imagem aberta seja criado um painel exibindo ela em meu background criando novas layers (nao quero uma janela fora de meu programa principal, sem popout).


Aqui tem um exemplo bem simples, do photoshop a cada open ou new image, essas abas sao dispostas.

Utilizo o Netbeans 8.0.2, aqui estao algumas de minhas tentativas frustradas:

private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    FileFilter filter = new FileNameExtensionFilter("Image Files ","png","jpg");
    JFileChooser chooser = new JFileChooser();
    chooser.setFileFilter(filter);
    Imagem img = null;
    if(chooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
        try{

            for (int i = 0; i < 5; i++) {
                jPanel() panel = jPanel1 +i;
                cards = new JPanel(new CardLayout());
                img = new Imagem(chooser.getSelectedFile());
               add(img, BorderLayout.CENTER);
               repaint();

        }catch(IOException ioe){
        }
    }

Acabei perdendo meu codigo, mas ja tentei de outra forma, na qual a cada nova imagem eu printava os paineis, no entanto nao consegui utilizar o meu objeto painel criado pelo open com outro ActionPerformed fazendo o painel printado virar um evento para mouseclick, seria tres ActionListener um dentro do outro, o que restou do codigo que usei foi isso:

JPanel layerpanel = new JPanel();
layerpanel.setBounds(1131, 163, 213, 516);
getContentPane().add(layerpanel);
layerpanel.setLayout(null);

     button_7.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e){
                JPanel panel_2 = new JPanel();
                panel_2.setBounds(12, layerYValue, 189, 42);
                panel_2.setBackground(Color.LIGHT_GRAY);
                layerpanel.add(panel_2);
                layerpanel.repaint();
                layerYValue = layerYValue + 50;
            }

        });

(Isso ficava dentro do meu Filechooser)

E isso pessoal, desculpa se nao formatei de maneira adequada meu codigo / topico.
Agradeco a atencao, abracos.

Se quer abas, usa JTabbedPane:

https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

Obrigado javaflex, no caso entao o codigo demo que ele disponibilizou ficaria inserido dentro do meu filechooser?

JTabbedPane tabbedPane = new JTabbedPane();
ImageIcon icon = createImageIcon(“images/middle.gif”);

JComponent panel1 = makeTextPanel(“Panel #1”);
tabbedPane.addTab(“Tab 1”, icon, panel1,
“Does nothing”);
tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

JComponent panel2 = makeTextPanel(“Panel #2”);
tabbedPane.addTab(“Tab 2”, icon, panel2,
“Does twice as much nothing”);
tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

JComponent panel3 = makeTextPanel(“Panel #3”);
tabbedPane.addTab(“Tab 3”, icon, panel3,
“Still does nothing”);
tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

JComponent panel4 = makeTextPanel(
“Panel #4 (has a preferred size of 410 x 50).”);
panel4.setPreferredSize(new Dimension(410, 50));
tabbedPane.addTab(“Tab 4”, icon, panel4,
“Does nothing at all”);
tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

Se sim, qual a melhor forma de eu inserir a funcao do tabbedpane dentro do meu try para printar a imagem a cada vez que escolho um novo arquivo em uma nova janela?

****** esqueci de postar, no meu codigo para minha imagem eu tenho minha classe Imagem, que chamo no meu codigo principal, a classe esta codificada assim:

package cg.utils;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
*

  • @author redes
    */
    public class Imagem extends Component{

    BufferedImage img;

    public Imagem(){
    img = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
    compSize();
    }

    public Imagem(int w, int h){
    img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    compSize();
    }

    public Imagem(File f) throws IOException{
    img = ImageIO.read(f);
    compSize();
    }

    @Override
    public void paint(Graphics g){
    g.drawImage(img, 0, 0, this);
    }

    private void compSize(){
    setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
    setSize(img.getWidth(), img.getHeight());
    }

}

Bom pessoal, ja entreguei meu projeto e acabei utilizando um JList com um array para atingir meu objetivo, ainda que eu nao tenha programado um action para trabalhar em cima de cada layer, alguem que cair nesse tópico através da busca pode achar util o que eu usei:

import cg.utils.Imagem;
import java.awt.BorderLayout;
import java.io.IOException;
import javax.swing.filechooser.FileFilter;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
*

  • author Gambla
    */
    public class MinhaInterface extends javax.swing.JFrame {
    JFileChooser chooser;
    Imagem img = null;
    ArrayList result = new ArrayList();

    @SuppressWarnings(“unchecked”)
    //
    private void initComponents() {

     jFrame1 = new javax.swing.JFrame();
     jFrame2 = new javax.swing.JFrame();
     jPanel1 = new javax.swing.JPanel();
     jScrollPane1 = new javax.swing.JScrollPane();
     jList1 = new javax.swing.JList();
     jSeparator1 = new javax.swing.JSeparator();
     jPanel2 = new javax.swing.JPanel();
     jLabel1 = new javax.swing.JLabel();
     jLabel2 = new javax.swing.JLabel();
     jLabel3 = new javax.swing.JLabel();
     jLabel4 = new javax.swing.JLabel();
     jLabel5 = new javax.swing.JLabel();
     jLabel6 = new javax.swing.JLabel();
     jLabel7 = new javax.swing.JLabel();
     jLabel8 = new javax.swing.JLabel();
     jMenuBar1 = new javax.swing.JMenuBar();
     jMenu1 = new javax.swing.JMenu();
     Abrir = new javax.swing.JMenuItem();
     jMenu2 = new javax.swing.JMenu();
     jMenu3 = new javax.swing.JMenu();
     jMenuItem1 = new javax.swing.JMenuItem();
     jMenuItem2 = new javax.swing.JMenuItem();
     jMenuItem3 = new javax.swing.JMenuItem();
     jMenuItem4 = new javax.swing.JMenuItem();
     jMenuItem5 = new javax.swing.JMenuItem();
     jMenu4 = new javax.swing.JMenu();
     jMenuItem18 = new javax.swing.JMenuItem();
     jMenuItem19 = new javax.swing.JMenuItem();
     jMenuItem20 = new javax.swing.JMenuItem();
     jMenuItem21 = new javax.swing.JMenuItem();
     jMenu5 = new javax.swing.JMenu();
     jMenuItem14 = new javax.swing.JMenuItem();
     jMenuItem15 = new javax.swing.JMenuItem();
     jMenuItem16 = new javax.swing.JMenuItem();
     jMenuItem17 = new javax.swing.JMenuItem();
     jMenu6 = new javax.swing.JMenu();
     jMenuItem6 = new javax.swing.JMenuItem();
     jMenuItem7 = new javax.swing.JMenuItem();
     jMenuItem8 = new javax.swing.JMenuItem();
     jMenuItem9 = new javax.swing.JMenuItem();
     jMenu7 = new javax.swing.JMenu();
     jMenuItem10 = new javax.swing.JMenuItem();
     jMenuItem11 = new javax.swing.JMenuItem();
     jMenuItem12 = new javax.swing.JMenuItem();
     jMenuItem13 = new javax.swing.JMenuItem();
    
     jFrame1.setIconImage(getIconImage());
    
     javax.swing.GroupLayout jFrame1Layout = new javax.swing.GroupLayout(jFrame1.getContentPane());
     jFrame1.getContentPane().setLayout(jFrame1Layout);
     jFrame1Layout.setHorizontalGroup(
         jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 400, Short.MAX_VALUE)
     );
     jFrame1Layout.setVerticalGroup(
         jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 300, Short.MAX_VALUE)
     );
    
     javax.swing.GroupLayout jFrame2Layout = new javax.swing.GroupLayout(jFrame2.getContentPane());
     jFrame2.getContentPane().setLayout(jFrame2Layout);
     jFrame2Layout.setHorizontalGroup(
         jFrame2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 400, Short.MAX_VALUE)
     );
     jFrame2Layout.setVerticalGroup(
         jFrame2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 300, Short.MAX_VALUE)
     );
    
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     setTitle("Editor De Imagem");
     setIconImages(null);
     setMaximumSize(new java.awt.Dimension(1920, 1080));
     setMinimumSize(new java.awt.Dimension(800, 600));
     setPreferredSize(new java.awt.Dimension(800, 600));
    
     jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
    
     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
     jPanel1.setLayout(jPanel1Layout);
     jPanel1Layout.setHorizontalGroup(
         jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 1258, Short.MAX_VALUE)
     );
     jPanel1Layout.setVerticalGroup(
         jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 0, Short.MAX_VALUE)
     );
    
     jList1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
     jList1.setModel(new javax.swing.AbstractListModel() {
         String[] strings = { "Layer 1", "Layer 2", "Layer 3", "Layer 4", "Layer 5" };
         public int getSize() { return strings.length; }
         public Object getElementAt(int i) { return strings[i]; }
     });
     jList1.setToolTipText("");
     jScrollPane1.setViewportView(jList1);
    
     jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
    
     jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/brush.png"))); // NOI18N
    
     jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/bucket.png"))); // NOI18N
    
     jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/grab.png"))); // NOI18N
    
     jLabel4.setIcon(new javax.swing.ImageIcon("C:\\Users\\Gambla\\Documents\\NetBeansProjects\\P4CGPI\\src\\dry icons\\move.png")); // NOI18N
     jLabel4.setToolTipText("");
    
     jLabel5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/eyedrop.png"))); // NOI18N
    
     jLabel6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/erase.png"))); // NOI18N
    
     jLabel7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/pencil.png"))); // NOI18N
    
     jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/paleta.png"))); // NOI18N
    
     javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
     jPanel2.setLayout(jPanel2Layout);
     jPanel2Layout.setHorizontalGroup(
         jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 100, Short.MAX_VALUE)
         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel2Layout.createSequentialGroup()
                 .addGap(13, 13, 13)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addGroup(jPanel2Layout.createSequentialGroup()
                         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                             .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                 .addGroup(jPanel2Layout.createSequentialGroup()
                                     .addComponent(jLabel8)
                                     .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                     .addComponent(jLabel1))
                                 .addGroup(jPanel2Layout.createSequentialGroup()
                                     .addComponent(jLabel7)
                                     .addGap(18, 18, 18)
                                     .addComponent(jLabel6)))
                             .addGroup(jPanel2Layout.createSequentialGroup()
                                 .addComponent(jLabel5)
                                 .addGap(18, 18, 18)
                                 .addComponent(jLabel2)))
                         .addGap(2, 2, 2))
                     .addGroup(jPanel2Layout.createSequentialGroup()
                         .addComponent(jLabel3)
                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                         .addComponent(jLabel4)))
                 .addGap(13, 13, 13)))
     );
     jPanel2Layout.setVerticalGroup(
         jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addGap(0, 273, Short.MAX_VALUE)
         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
             .addGroup(jPanel2Layout.createSequentialGroup()
                 .addGap(19, 19, 19)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(jLabel3)
                     .addComponent(jLabel4))
                 .addGap(41, 41, 41)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                     .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                     .addComponent(jLabel1))
                 .addGap(49, 49, 49)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(jLabel5)
                     .addComponent(jLabel2))
                 .addGap(41, 41, 41)
                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                     .addComponent(jLabel6)
                     .addComponent(jLabel7))
                 .addContainerGap(19, Short.MAX_VALUE)))
     );
    
     jMenuBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
    
     jMenu1.setText("Arquivo");
    
     Abrir.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
     Abrir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/dry icons/pesquisa.png"))); // NOI18N
     Abrir.setText("Carregar Imagem ...");
     Abrir.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
             AbrirActionPerformed(evt);
         }
     });
     jMenu1.add(Abrir);
    
     jMenuBar1.add(jMenu1);
    
     jMenu2.setText("Editar");
     jMenuBar1.add(jMenu2);
    
     jMenu3.setText("Aritméticas");
    
     jMenuItem1.setText("Soma");
     jMenu3.add(jMenuItem1);
    
     jMenuItem2.setText("Subtração");
     jMenu3.add(jMenuItem2);
    
     jMenuItem3.setText("Multiplicação");
     jMenu3.add(jMenuItem3);
    
     jMenuItem4.setText("Divisão");
     jMenu3.add(jMenuItem4);
    
     jMenuItem5.setText("Blending");
     jMenu3.add(jMenuItem5);
    
     jMenuBar1.add(jMenu3);
    
     jMenu4.setText("Pontuais");
    
     jMenuItem18.setText("Threshold");
     jMenu4.add(jMenuItem18);
    
     jMenuItem19.setText("Conversão de cores");
     jMenu4.add(jMenuItem19);
    
     jMenuItem20.setText("Brilho e contraste");
     jMenu4.add(jMenuItem20);
    
     jMenuItem21.setText("Saturação");
     jMenu4.add(jMenuItem21);
    
     jMenuBar1.add(jMenu4);
    
     jMenu5.setText("Lógicas");
    
     jMenuItem14.setText("AND");
     jMenu5.add(jMenuItem14);
    
     jMenuItem15.setText("OR ");
     jMenu5.add(jMenuItem15);
    
     jMenuItem16.setText("NOT");
     jMenu5.add(jMenuItem16);
    
     jMenuItem17.setText("XOR");
     jMenu5.add(jMenuItem17);
    
     jMenuBar1.add(jMenu5);
    
     jMenu6.setText("Geométricas");
    
     jMenuItem6.setText("Translação");
     jMenu6.add(jMenuItem6);
    
     jMenuItem7.setText("Rotação");
     jMenu6.add(jMenuItem7);
    
     jMenuItem8.setText("Escala");
     jMenu6.add(jMenuItem8);
    
     jMenuItem9.setText("Transf. Polar");
     jMenu6.add(jMenuItem9);
    
     jMenuBar1.add(jMenu6);
    
     jMenu7.setText("Filtros");
    
     jMenuItem10.setText("Desfocagem Gaussiana");
     jMenu7.add(jMenuItem10);
    
     jMenuItem11.setText("Mascara de desaguçar");
     jMenu7.add(jMenuItem11);
    
     jMenuItem12.setText("Sobel edge");
     jMenu7.add(jMenuItem12);
    
     jMenuItem13.setText("Roberts");
     jMenu7.add(jMenuItem13);
    
     jMenuBar1.add(jMenu7);
    
     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()
             .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                 .addGroup(layout.createSequentialGroup()
                     .addGap(4, 4, 4)
                     .addComponent(jScrollPane1))
                 .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                 .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING))
             .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
             .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
     );
     layout.setVerticalGroup(
         layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
         .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
         .addGroup(layout.createSequentialGroup()
             .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
             .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
             .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 4, javax.swing.GroupLayout.PREFERRED_SIZE)
             .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
             .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 296, javax.swing.GroupLayout.PREFERRED_SIZE))
     );
    
     pack();
    

    }//

    private DefaultListModel listaImagens(){
    DefaultListModel lista = new DefaultListModel();
    for(Imagem percorrer : result){
    lista.addElement(percorrer);
    }
    return lista;
    }

    private void AbrirActionPerformed(java.awt.event.ActionEvent evt) {
    FileFilter filter = new FileNameExtensionFilter("Image Files ",“png”,“jpg”);
    chooser = new JFileChooser();
    chooser.setFileFilter(filter);
    chooser.setAcceptAllFileFilterUsed(false);
    if(chooser.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
    try{

             img = new Imagem(chooser.getSelectedFile());
             jPanel1.add(img, BorderLayout.CENTER);
             jPanel1.repaint();
             result.add(img);
             jList1.setModel(listaImagens());
             
    
    
             System.out.println("\n Array Atualizado");
         }catch(IOException ioe){
         }
     }                            
    

    }

    public MinhaInterface() {
    initComponents();
    }

    public static void main(String args[]) {
    /* Set the Nimbus look and feel /
    //
    /
    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 (“Windows”.equals(info.getName())) {
    javax.swing.UIManager.setLookAndFeel(info.getClassName());
    break;
    }
    }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
    java.util.logging.Logger.getLogger(MinhaInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //
    java.awt.EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
    new MinhaInterface().setVisible(true);

         }
     });
    

    }

Obrigado quem ajudou, e o tópico por mim pode ser fechado, até mais.

Formate seu código usando o botão </>. Assim podemos entender melhor.