Java tutorial
package com.devdaily.justwrite.view; import java.awt.Container; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import com.devdaily.justwrite.controller.OpenRecentFileController; import com.jgoodies.forms.builder.*; import com.jgoodies.forms.factories.ButtonBarFactory; import com.jgoodies.forms.layout.*; /** * Copyright 2010, Alvin Alexander, http://devdaily.com. * This software is distributed under the terms of the * GNU General Public License. * * This file is part of an application named JustWrite. * * JustWrite is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * JustWrite is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with JustWrite. If not, see <http://www.gnu.org/licenses/>. * */ public class OpenRecentFileDialog extends DDDialog { private static final String TITLE = "Re-Open a File"; // our things DefaultListModel listModel = new DefaultListModel(); JList jlist = new JList(listModel); JScrollPane scrollPane = new JScrollPane(jlist); JButton okButton = new JButton("OK"); JButton cancelButton = new JButton("Cancel"); boolean okButtonWasSelected = false; // other things we know about JustWriteMainFrame mainFrame; OpenRecentFileController openRecentFileController; public OpenRecentFileDialog(JustWriteMainFrame mainFrame, OpenRecentFileController openRecentFileController) { this.mainFrame = mainFrame; this.openRecentFileController = openRecentFileController; setTitle(TITLE); jlist.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); doLayoutForm(); addShortcutListenersToJList(); addKeyboardShortcutsToContainer(); } // TODO find out how to get the default focus on this list // without requiring the user to set it manually. public void setFocusOnListOfFiles() { // TODO this now works; is SwingUtilities necessary? SwingUtilities.invokeLater(new Runnable() { public void run() { // this works w/o this on OS X 10.5 jlist.requestFocusInWindow(); jlist.requestFocus(); if (listModel.size() > 0) { jlist.setSelectedIndex(0); } } }); } private void doLayoutForm() { FormLayout layout = new FormLayout("fill:pref, 3dlu, fill:80dlu:grow, 3dlu, left:pref", "pref, 6dlu, pref, 6dlu, pref"); JPanel panel = new JPanel(); DefaultFormBuilder builder = new DefaultFormBuilder(layout, panel); builder.setDefaultDialogBorder(); CellConstraints cc = new CellConstraints(); builder.addSeparator("Recent Files", cc.xyw(1, 1, 5)); builder.add(scrollPane, cc.xyw(1, 3, 5)); builder.add(ButtonBarFactory.buildCenteredBar(cancelButton, okButton), cc.xy(3, 5, CellConstraints.CENTER, CellConstraints.DEFAULT)); //builder.add(okButton, cc.xy(3,5,CellConstraints.CENTER, CellConstraints.DEFAULT)); this.setContentPane(builder.getPanel()); } private void addShortcutListenersToJList() { jlist.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent me) { if (me.getClickCount() == 2) { okButton.doClick(); me.consume(); } } }); jlist.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent ke) { if (ke.getKeyCode() == KeyEvent.VK_ENTER) { okButton.doClick(); } } }); } // helps to listen when i use the "sheet" ui on the mac private void addKeyboardShortcutsToContainer() { Container c = this.getContentPane(); c.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent ke) { if (ke.getKeyCode() == KeyEvent.VK_ENTER) { okButton.doClick(); } if (ke.getKeyCode() == KeyEvent.VK_ESCAPE) { cancelButton.doClick(); } } }); } public void setVisible(boolean b) { okButtonWasSelected = false; super.setVisible(b); } public JButton getOKButton() { return okButton; } public JButton getCancelButton() { return cancelButton; } public JList getJList() { return jlist; } @Override public void escapeCommandPerformed(KeyEvent e) { okButtonWasSelected = false; cancelButton.doClick(); } @Override public void okCommandPerformed(KeyEvent e) { okButtonWasSelected = true; okButton.doClick(); } public void setListOfFiles(List<String> recentFilesList) { listModel.clear(); for (int i = 0; i < recentFilesList.size(); i++) { listModel.addElement(recentFilesList.get(i)); } } public boolean okButtonWasSelected() { return okButtonWasSelected; } public String getSelectedFilename() { return (String) jlist.getSelectedValue(); } }