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(
"<html>To get started:<br /><br /><ol>" +
"<li>Click \"Browse for Directory...\" and select a directory containing photos.</li>" +
"<li>Choose a photo from the thumbnail list above, or from the panel to the left.</li>" +
"<li>Perform additional functions on the photo using the panel below.</li>" +
"</ol></html>"
);
lblImage.setBorder(new LineBorder(Color.BLACK));
lblImage.setFont(new Font("Verdana", Font.BOLD, 12));
lblImage.setHorizontalAlignment(SwingConstants.CENTER);
lblImage.setVerticalAlignment(SwingConstants.CENTER);
cstMainConstraints.gridx = 1;
cstMainConstraints.gridy = 2;
cstMainConstraints.gridwidth = 1;
cstMainConstraints.gridheight = 1;
cstMainConstraints.weightx = 1.0;
cstMainConstraints.weighty = 1.0;
cstMainConstraints.fill = GridBagConstraints.BOTH;
//cstMainConstraints.anchor = GridBagConstraints.CENTER;
pnlMain.add(lblImage, cstMainConstraints);
// ---------------------------------------------------------------------
// jbutton: "rotate image" function
JButton btnFunctionRotate = new JButton("Rotate", new ImageIcon(ICONS_DIRECTORY + "/func-rotate.png"));
pnlFunctions.add(btnFunctionRotate);
// ---------------------------------------------------------------------
// jbutton: "resize image" function
JButton btnFunctionResize = new JButton("Resize", new ImageIcon(ICONS_DIRECTORY + "/func-resize.png"));
pnlFunctions.add(btnFunctionResize);
// ---------------------------------------------------------------------
// jbutton: "auto-fix" function
JButton btnFunctionAutoFix = new JButton("Auto-Fix", new ImageIcon(ICONS_DIRECTORY + "/func-autofix.png"));
pnlFunctions.add(btnFunctionAutoFix);
// ---------------------------------------------------------------------
// jbutton: "print" function
JButton btnFunctionPrint = new JButton("Print", new ImageIcon(ICONS_DIRECTORY + "/func-print.png"));
pnlFunctions.add(btnFunctionPrint);
// ---------------------------------------------------------------------
// jpanel: container for image editing function buttons
// - gridbaglayout position: (1, 3)
// - gridbaglayout dimensions: 1x1
// - fills all available horizontal space
cstMainConstraints.gridx = 1;
cstMainConstraints.gridy = 3;
cstMainConstraints.gridwidth = 1;
cstMainConstraints.gridheight = 1;
cstMainConstraints.weightx = 0.0;
cstMainConstraints.weighty = 0.0;
cstMainConstraints.fill = GridBagConstraints.HORIZONTAL;
pnlMain.add(pnlFunctions);
// =====================================================================
// add gridbaglayout to jframe
frmMain.add(pnlMain);
// make jframe visible
frmMain.setVisible(true);
}
}