import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class PhotoManager {
public static final String ICONS_DIRECTORY = "fffffffff/icons";
public PhotoManager() {
}
public static void main(String[] args) {
// =====================================================================
// construction of gui elements
// =====================================================================
// create jframe (window)
JFrame frmMain = new JFrame("Photo Manager");
frmMain.setSize(800, 600); // default size - 800x600
frmMain.setMinimumSize(new Dimension(800, 600)); // minimum size - 800x600
frmMain.addWindowListener(new WindowAdapter() { // what to do when the jframe needs to be closed
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// ---------------------------------------------------------------------
// make jpanel to contain the gui elements, and use gridbaglayout to control how they appear on the jpanel
JPanel pnlMain = new JPanel(new GridBagLayout());
// make jpanel to contain the image editing function jbuttons
JPanel pnlFunctions = new JPanel(new FlowLayout());
// make a gridbagconstraints object to specify how each element will be laid out on the panel
GridBagConstraints cstMainConstraints = new GridBagConstraints();
// external padding of 10px for every gui element
cstMainConstraints.insets = new Insets(10, 10, 10, 10);
// ---------------------------------------------------------------------
// jbutton: "browse for directory..."
// - gridbaglayout position: (0, 0)
// - gridbaglayout dimensions: 1x1
JButton btnBrowse = new JButton("Browse for Directory...", new ImageIcon(ICONS_DIRECTORY + "/browse-dir.png"));
cstMainConstraints.gridx = 0;
cstMainConstraints.gridy = 0;
cstMainConstraints.gridwidth = 1;
cstMainConstraints.gridheight = 1;
cstMainConstraints.weightx = 0.0;
cstMainConstraints.weighty = 0.0;
//cstMainConstraints.fill = GridBagConstraints.BOTH;
pnlMain.add(btnBrowse, cstMainConstraints);
// ---------------------------------------------------------------------
// jtree: list of subdirectories/files in the directory specified by the user
// (and a jscrollpane to hold the jtree so it remains a static size)
// - gridbaglayout position: (0, 1)
// - gridbaglayout dimensions: 1x3
// - fills all available vertical space
JTree treSubdirectories = new JTree();
JScrollPane scpSubdirectories = new JScrollPane();
scpSubdirectories.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
scpSubdirectories.getViewport().add(treSubdirectories);
cstMainConstraints.gridx = 0;
cstMainConstraints.gridy = 1;
cstMainConstraints.gridwidth = 1;
cstMainConstraints.gridheight = 3;
cstMainConstraints.weightx = 0.0;
cstMainConstraints.weighty = 1.0;
cstMainConstraints.fill = GridBagConstraints.BOTH;
pnlMain.add(scpSubdirectories, cstMainConstraints);
// ---------------------------------------------------------------------
// jlist: thumbnailed list of images in the selected directory
// (and a jscrollpane to hold the jlist so it remains a static size)
// - gridbaglayout position: (1, 0)
// - gridbaglayout dimensions: 1x1
// - fills all available horizontal space
JList lstThumbnails = new JList();
JScrollPane scpThumbnails = new JScrollPane();
scpThumbnails.getViewport().add(lstThumbnails);
cstMainConstraints.gridx = 1;
cstMainConstraints.gridy = 0;
cstMainConstraints.gridwidth = 1;
cstMainConstraints.gridheight = 1;
cstMainConstraints.weightx = 1.0;
cstMainConstraints.weighty = 0.0;
cstMainConstraints.fill = GridBagConstraints.BOTH;
pnlMain.add(scpThumbnails, cstMainConstraints);
// ---------------------------------------------------------------------
// jlabel: selected image file name
// - gridbaglayout position: (1, 1)
// - gridbaglayout dimensions: 1x1
// - fills all available horizontal space
JLabel lblFileName = new JLabel("Welcome to Photo Manager");
lblFileName.setFont(new Font("Verdana", Font.BOLD, 24));
lblFileName.setHorizontalAlignment(SwingConstants.CENTER);
lblFileName.setVerticalAlignment(SwingConstants.CENTER);
cstMainConstraints.gridx = 1;
cstMainConstraints.gridy = 1;
cstMainConstraints.gridwidth = 1;
cstMainConstraints.gridheight = 1;
cstMainConstraints.weightx = 1.0;
cstMainConstraints.weighty = 0.0;
cstMainConstraints.fill = GridBagConstraints.BOTH;
pnlMain.add(lblFileName, cstMainConstraints);
// ---------------------------------------------------------------------
// jlabel: the currently selected image
// - gridbaglayout position: (1, 2)
// - gridbaglayout dimensions: 1x1
// - fills all available horizontal and vertical space
JLabel lblImage = new JLabel(
"To get started: