001 /* ======================================================================== 002 * JCommon : a free general purpose class library for the Java(tm) platform 003 * ======================================================================== 004 * 005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. 006 * 007 * Project Info: http://www.jfree.org/jcommon/index.html 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 * --------------- 028 * AboutFrame.java 029 * --------------- 030 * (C) Copyright 2001-2004, by Object Refinery Limited. 031 * 032 * Original Author: David Gilbert (for Object Refinery Limited); 033 * Contributor(s): -; 034 * 035 * $Id: AboutFrame.java,v 1.4 2005/10/18 13:19:13 mungady Exp $ 036 * 037 * Changes (from 26-Nov-2001) 038 * -------------------------- 039 * 26-Nov-2001 : Version 1, based on code from JFreeChart demo application (DG); 040 * 27-Nov-2001 : Added getPreferredSize() method (DG); 041 * 08-Feb-2002 : List of developers is now optional (DG); 042 * 15-Mar-2002 : Modified to use a ResourceBundle for elements that require localisation (DG); 043 * 25-Mar-2002 : Added new constructor (DG); 044 * 26-Jun-2002 : Removed redundant code (DG); 045 * 08-Oct-2002 : Fixed errors reported by Checkstyle (DG); 046 * 047 */ 048 049 package org.jfree.ui.about; 050 051 import java.awt.BorderLayout; 052 import java.awt.Dimension; 053 import java.awt.Image; 054 import java.util.Arrays; 055 import java.util.List; 056 import java.util.ResourceBundle; 057 058 import javax.swing.BorderFactory; 059 import javax.swing.JFrame; 060 import javax.swing.JPanel; 061 import javax.swing.JScrollPane; 062 import javax.swing.JTabbedPane; 063 import javax.swing.JTextArea; 064 import javax.swing.border.Border; 065 066 /** 067 * A frame that displays information about the demonstration application. 068 * 069 * @author David Gilbert 070 */ 071 public class AboutFrame extends JFrame { 072 073 /** The preferred size for the frame. */ 074 public static final Dimension PREFERRED_SIZE = new Dimension(560, 360); 075 076 /** The default border for the panels in the tabbed pane. */ 077 public static final Border STANDARD_BORDER = BorderFactory.createEmptyBorder(5, 5, 5, 5); 078 079 /** Localised resources. */ 080 private ResourceBundle resources; 081 082 /** The application name. */ 083 private String application; 084 085 /** The application version. */ 086 private String version; 087 088 /** The copyright string. */ 089 private String copyright; 090 091 /** Other info about the application. */ 092 private String info; 093 094 /** The project logo. */ 095 private Image logo; 096 097 /** A list of contributors. */ 098 private List contributors; 099 100 /** The licence. */ 101 private String licence; 102 103 /** A list of libraries. */ 104 private List libraries; 105 106 /** 107 * Constructs an about frame. 108 * 109 * @param title the frame title. 110 * @param project information about the project. 111 */ 112 public AboutFrame(final String title, final ProjectInfo project) { 113 114 this(title, 115 project.getName(), 116 "Version " + project.getVersion(), 117 project.getInfo(), 118 project.getLogo(), 119 project.getCopyright(), 120 project.getLicenceText(), 121 project.getContributors(), 122 Arrays.asList(project.getLibraries())); 123 124 } 125 126 /** 127 * Constructs an 'About' frame. 128 * 129 * @param title the frame title. 130 * @param application the application name. 131 * @param version the version. 132 * @param info other info. 133 * @param logo an optional logo. 134 * @param copyright the copyright notice. 135 * @param licence the licence. 136 * @param contributors a list of developers/contributors. 137 * @param libraries a list of libraries. 138 */ 139 public AboutFrame(final String title, 140 final String application, final String version, final String info, 141 final Image logo, 142 final String copyright, final String licence, 143 final List contributors, 144 final List libraries) { 145 146 super(title); 147 148 this.application = application; 149 this.version = version; 150 this.copyright = copyright; 151 this.info = info; 152 this.logo = logo; 153 this.contributors = contributors; 154 this.licence = licence; 155 this.libraries = libraries; 156 157 final String baseName = "org.jfree.ui.about.resources.AboutResources"; 158 this.resources = ResourceBundle.getBundle(baseName); 159 160 final JPanel content = new JPanel(new BorderLayout()); 161 content.setBorder(STANDARD_BORDER); 162 163 final JTabbedPane tabs = createTabs(); 164 content.add(tabs); 165 setContentPane(content); 166 167 pack(); 168 169 } 170 171 /** 172 * Returns the preferred size for the about frame. 173 * 174 * @return the preferred size. 175 */ 176 public Dimension getPreferredSize() { 177 return PREFERRED_SIZE; 178 } 179 180 /** 181 * Creates a tabbed pane containing an about panel and a system properties panel. 182 * 183 * @return a tabbed pane. 184 */ 185 private JTabbedPane createTabs() { 186 187 final JTabbedPane tabs = new JTabbedPane(); 188 189 final JPanel aboutPanel = createAboutPanel(); 190 aboutPanel.setBorder(AboutFrame.STANDARD_BORDER); 191 final String aboutTab = this.resources.getString("about-frame.tab.about"); 192 tabs.add(aboutTab, aboutPanel); 193 194 final JPanel systemPanel = new SystemPropertiesPanel(); 195 systemPanel.setBorder(AboutFrame.STANDARD_BORDER); 196 final String systemTab = this.resources.getString("about-frame.tab.system"); 197 tabs.add(systemTab, systemPanel); 198 199 return tabs; 200 201 } 202 203 /** 204 * Creates a panel showing information about the application, including the name, version, 205 * copyright notice, URL for further information, and a list of contributors. 206 * 207 * @return a panel. 208 */ 209 private JPanel createAboutPanel() { 210 211 final JPanel about = new JPanel(new BorderLayout()); 212 213 final JPanel details = new AboutPanel(this.application, this.version, this.copyright, this.info, 214 this.logo); 215 216 boolean includetabs = false; 217 final JTabbedPane tabs = new JTabbedPane(); 218 219 if (this.contributors != null) { 220 final JPanel contributorsPanel = new ContributorsPanel(this.contributors); 221 contributorsPanel.setBorder(AboutFrame.STANDARD_BORDER); 222 final String contributorsTab = this.resources.getString("about-frame.tab.contributors"); 223 tabs.add(contributorsTab, contributorsPanel); 224 includetabs = true; 225 } 226 227 if (this.licence != null) { 228 final JPanel licencePanel = createLicencePanel(); 229 licencePanel.setBorder(STANDARD_BORDER); 230 final String licenceTab = this.resources.getString("about-frame.tab.licence"); 231 tabs.add(licenceTab, licencePanel); 232 includetabs = true; 233 } 234 235 if (this.libraries != null) { 236 final JPanel librariesPanel = new LibraryPanel(this.libraries); 237 librariesPanel.setBorder(AboutFrame.STANDARD_BORDER); 238 final String librariesTab = this.resources.getString("about-frame.tab.libraries"); 239 tabs.add(librariesTab, librariesPanel); 240 includetabs = true; 241 } 242 243 about.add(details, BorderLayout.NORTH); 244 if (includetabs) { 245 about.add(tabs); 246 } 247 248 return about; 249 250 } 251 252 /** 253 * Creates a panel showing the licence. 254 * 255 * @return a panel. 256 */ 257 private JPanel createLicencePanel() { 258 259 final JPanel licencePanel = new JPanel(new BorderLayout()); 260 final JTextArea area = new JTextArea(this.licence); 261 area.setLineWrap(true); 262 area.setWrapStyleWord(true); 263 area.setCaretPosition(0); 264 area.setEditable(false); 265 licencePanel.add(new JScrollPane(area)); 266 return licencePanel; 267 268 } 269 270 271 }