Borneq

SwingList.java

Jul 22nd, 2015
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.78 KB | None | 0 0
  1. package com.blogspot.borneq;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.Event;
  7. import java.awt.Font;
  8. import java.awt.Image;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ActionListener;
  11. import java.awt.event.KeyEvent;
  12. import java.beans.PropertyChangeEvent;
  13. import java.beans.PropertyChangeListener;
  14. import java.io.File;
  15. import java.util.ArrayList;
  16.  
  17. import javax.swing.BorderFactory;
  18. import javax.swing.BoxLayout;
  19. import javax.swing.DefaultListCellRenderer;
  20. import javax.swing.ImageIcon;
  21. import javax.swing.JButton;
  22. import javax.swing.JFileChooser;
  23. import javax.swing.JFrame;
  24. import javax.swing.JLabel;
  25. import javax.swing.JList;
  26. import javax.swing.JMenu;
  27. import javax.swing.JMenuBar;
  28. import javax.swing.JMenuItem;
  29. import javax.swing.JPanel;
  30. import javax.swing.JScrollPane;
  31. import javax.swing.JTextField;
  32. import javax.swing.JToolBar;
  33. import javax.swing.KeyStroke;
  34. import javax.swing.ListSelectionModel;
  35. import javax.swing.SwingUtilities;
  36. import javax.swing.border.LineBorder;
  37. import javax.swing.filechooser.FileNameExtensionFilter;
  38.  
  39. public class SwingList extends JFrame {
  40.     private JScrollPane listScrollPane;
  41.     private JFileChooser chooser;
  42.  
  43.     public SwingList() {
  44.         initUI();
  45.         initChooser();
  46.         setPreferredSize(new Dimension(280, 450));
  47.         setLocationRelativeTo(null);
  48.         pack();
  49.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  50.     }
  51.  
  52.     private void initChooser() {
  53.         chooser = new JFileChooser();
  54.         String appPath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
  55.         if (System.getProperty("os.name").startsWith("Windows")) {
  56.             // appPath is in form: /D:/code/midi/MidPlayer/bin/ and need remove
  57.             // first "/"
  58.             appPath = appPath.substring(1);
  59.         }
  60.         // in jars appPath ends with jar name else end with "/"
  61.         if (appPath.endsWith(".jar")) {
  62.             File file = new File(appPath);
  63.             appPath = file.getAbsoluteFile().getParent();
  64.         }
  65.         chooser.setCurrentDirectory(new File(appPath));
  66.         FileNameExtensionFilter filter = new FileNameExtensionFilter("Image files", "jpg", "jpeg");
  67.         chooser.setFileFilter(filter);
  68.         ImagePreviewer previewer = new ImagePreviewer(chooser);
  69.         chooser.setAccessory(previewer);       
  70.     }
  71.  
  72.     public class ListRenderer extends DefaultListCellRenderer {
  73.         private static final long serialVersionUID = -4562876189013579797L;
  74.         Font font = new Font("helvitica", Font.PLAIN, 12);
  75.         ArrayList<ImageIcon> imageList = new ArrayList<ImageIcon>();
  76.  
  77.         @Override
  78.         public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
  79.                 boolean cellHasFocus) {
  80.             JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
  81.             label.setVerticalTextPosition(JLabel.CENTER);
  82.             label.setFont(font);
  83.             label.setIcon(imageList.get(0));
  84.             return label;
  85.         }
  86.     }
  87.  
  88.     private void initUI() {
  89.         createMenuBar();
  90.         createToolBar();
  91.  
  92.         JLabel statusbar = new JLabel("Statusbar");
  93.         statusbar.setBorder(LineBorder.createGrayLineBorder());
  94.         add(statusbar, BorderLayout.SOUTH);
  95.  
  96.         JPanel panel = new JPanel(new BorderLayout());
  97.         add(panel, BorderLayout.CENTER);
  98.         JPanel bottomPanel = new JPanel();
  99.         bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.X_AXIS));
  100.         panel.add(bottomPanel, BorderLayout.SOUTH);
  101.         JButton buttonDraw = new JButton("Draw");
  102.         bottomPanel.add(buttonDraw);
  103.         JTextField entry = new JTextField();
  104.         bottomPanel.add(entry);
  105.         JButton buttonBench = new JButton("Bench");
  106.         bottomPanel.add(buttonBench);
  107.         listScrollPane = new JScrollPane();
  108.         panel.add(listScrollPane, BorderLayout.CENTER);
  109.     }
  110.  
  111.     private void createToolBar() {
  112.         JToolBar toolbar = new JToolBar();
  113.         JButton openButton = new JButton("Open");
  114.         toolbar.add(openButton);
  115.         openButton.addActionListener(new ActionListener() {
  116.             @Override
  117.             public void actionPerformed(ActionEvent event) {
  118.                 openImage();
  119.             }
  120.         });
  121.         add(toolbar, BorderLayout.NORTH);
  122.     }
  123.  
  124.     protected void openImage() {       
  125.         int result = chooser.showOpenDialog(null);
  126.  
  127.         // if file selected, set it as icon of the label
  128.         if (result == JFileChooser.APPROVE_OPTION) {
  129.             String[] nameList = { "One", "Two", "Three" };
  130.             String name = chooser.getSelectedFile().getPath();
  131.             File img = new File(name);
  132.             ListRenderer listRenderer = new ListRenderer();
  133.             ImageIcon icon = new ImageIcon(name);
  134.             icon = new ImageIcon(icon.getImage().getScaledInstance(200, -1, Image.SCALE_DEFAULT));
  135.             listRenderer.imageList.add(icon);
  136.             JList<String> list;
  137.             list = new JList<String>(nameList);
  138.             list.setCellRenderer(listRenderer);
  139.             list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  140.             list.setSelectedIndex(0);
  141.             listScrollPane.setViewportView(list);
  142.         }
  143.     }
  144.  
  145.     private void createMenuBar() {
  146.         JMenuBar menubar = new JMenuBar();
  147.         JMenu menuFile = new JMenu("File");
  148.         ImageIcon icon = new ImageIcon("exit.png");
  149.         JMenuItem menuItemExit = new JMenuItem("Exit", icon);
  150.         menuItemExit.addActionListener(new ActionListener() {
  151.             @Override
  152.             public void actionPerformed(ActionEvent event) {
  153.                 System.exit(0);
  154.             }
  155.         });
  156.         menuFile.setMnemonic(KeyEvent.VK_F);
  157.         menuItemExit.setMnemonic(KeyEvent.VK_X);
  158.         menuItemExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, Event.ALT_MASK));
  159.         menuFile.add(menuItemExit);
  160.         menubar.add(menuFile);
  161.         setJMenuBar(menubar);
  162.     }
  163.  
  164.     private static final long serialVersionUID = 8359448221778584189L;
  165.  
  166.     public static void main(String[] args) {
  167.         SwingUtilities.invokeLater(new Runnable() {
  168.             public void run() {
  169.                 SwingList app = new SwingList();
  170.                 app.setVisible(true);
  171.             }
  172.         });
  173.     }
  174. }
  175.  
  176. /**
  177.  * A file chooser accessory that previews images.
  178.  */
  179. class ImagePreviewer extends JLabel {
  180.     private static final long serialVersionUID = 5705786197509036596L;
  181.  
  182.     /**
  183.      * Constructs an ImagePreviewer.
  184.      *
  185.      * @param chooser
  186.      *            the file chooser whose property changes trigger an image
  187.      *            change in this previewer
  188.      */
  189.     public ImagePreviewer(JFileChooser chooser) {
  190.         setPreferredSize(new Dimension(100, 100));
  191.         setBorder(BorderFactory.createEtchedBorder());
  192.  
  193.         chooser.addPropertyChangeListener(new PropertyChangeListener() {
  194.             public void propertyChange(PropertyChangeEvent event) {
  195.                 if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) {
  196.                     // the user has selected a new file
  197.                     File f = (File) event.getNewValue();
  198.                     if (f == null) {
  199.                         setIcon(null);
  200.                         return;
  201.                     }
  202.                     // read the image into an icon
  203.                     ImageIcon icon = new ImageIcon(f.getPath());
  204.                     // if the icon is too large to fit, scale it
  205.                     if (icon.getIconWidth() > getWidth())
  206.                         icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT));
  207.  
  208.                     setIcon(icon);
  209.                 }
  210.             }
  211.         });
  212.     }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment