Creating a java swing album

689 Views Asked by At

I'd like to create a Java Swing Photo Album but I can't manage to find the right way to do it. I think it should be to create two ArrayList, one to stock the photo objects and another one to stock the buttons.

After that I should find a way to assign each images to the buttons and add them into the panel.

My question is : Do you think it is the right way to do it and if so, could you give me a hint? (For the last class at the bottom)

Here's my code at the moment :

Main :

import javax.swing.JFrame;

public class Main extends JFrame {
public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
           new AlbumFrame();
        }
    });
  }
}

AlbumFrame :

import java.awt.BorderLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AlbumFrame extends JFrame {

    private JPanel MenuPanel;
    private JPanel PhotoPanel;

    public AlbumFrame(){
        super("JPhone");

        setLayout(new BorderLayout());

        PhotoPanel = new PhotoPanel();
        add(PhotoPanel,BorderLayout.CENTER);

        MenuPanel = new MenuPanel();
        add(MenuPanel,BorderLayout.SOUTH);

        setSize(480,800);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }       
}

MenuPanel

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;


public class MenuPanel extends JPanel implements ActionListener{

    private static final long serialVersionUID = 1L;
    private JButton backButton;
    private JButton homeButton;
    private JButton turnButton;
    private JButton addButton;

    final private JFileChooser fc;

    public MenuPanel(){

        fc = new JFileChooser();

        backButton = new JButton(new ImageIcon(getClass().getResource("/Images/back.png")));
        homeButton = new JButton(new ImageIcon(getClass().getResource("/Images/home.png")));
        turnButton = new JButton(new ImageIcon(getClass().getResource("/Images/turn.png")));
        addButton = new JButton(new ImageIcon(getClass().getResource("/Images/add.png")));

        backButton.setPreferredSize(new Dimension(55,55));
        homeButton.setPreferredSize(new Dimension(55,55));
        turnButton.setPreferredSize(new Dimension(55,55));
        addButton.setPreferredSize(new Dimension(55,55));

        backButton.addActionListener(this);
        homeButton.addActionListener(this);
        turnButton.addActionListener(this);
        addButton.addActionListener(this);

        setLayout(new FlowLayout(FlowLayout.CENTER));

        add(backButton);
        add(homeButton);
        add(turnButton);
        add(addButton);
    }

    public void actionPerformed(ActionEvent e) {
        JButton clicked = (JButton)e.getSource();

        //Test for the moment
        if(clicked == backButton){
            System.out.println("back");
        }else if(clicked == homeButton){
            System.out.println("home");
        }else if(clicked == turnButton){
            System.out.println("turn");
        }else if(clicked == addButton){
            int returnVal = fc.showOpenDialog(MenuPanel.this);
            if(returnVal == JFileChooser.APPROVE_OPTION){
                File file = fc.getSelectedFile();
            }
        }
    }
}

PhotoPanel

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JPanel;

public class PhotoPanel extends JPanel implements ActionListener {

    ArrayList<Photo> Album = new ArrayList<Photo>();
    ArrayList<JButton> Buttons = new ArrayList<JButton>();

    public PhotoPanel(){

        setLayout(new FlowLayout(FlowLayout.CENTER));

    }

    public void actionPerformed(ActionEvent e) {

    }
}
1

There are 1 best solutions below

0
On

I would use separate class like PhotoCard to avoid lists:

class PhotoCard {
    public PhotoCard(Photo photo) {
        add(photo);
        // also add buttons, listeners, etc.
    }
}

that holds necessary data and initializes listeners. And then class can be added to to your PhotoPanel:

PhotoPanel.add(new PhotoCard(...));