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:

    " + "
  1. Click \"Browse for Directory...\" and select a directory containing photos.
  2. " + "
  3. Choose a photo from the thumbnail list above, or from the panel to the left.
  4. " + "
  5. Perform additional functions on the photo using the panel below.
  6. " + "
" ); 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); } }