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.7 2008/05/05 07:48:08 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.List; 055 import java.util.ResourceBundle; 056 import javax.swing.BorderFactory; 057 import javax.swing.JFrame; 058 import javax.swing.JPanel; 059 import javax.swing.JScrollPane; 060 import javax.swing.JTabbedPane; 061 import javax.swing.JTextArea; 062 import javax.swing.border.Border; 063 064 /** 065 * A frame that displays information about the demonstration application. 066 * 067 * @author David Gilbert 068 */ 069 public class AboutFrame extends JFrame { 070 071 /** The preferred size for the frame. */ 072 public static final Dimension PREFERRED_SIZE = new Dimension(560, 360); 073 074 /** The default border for the panels in the tabbed pane. */ 075 public static final Border STANDARD_BORDER = BorderFactory.createEmptyBorder(5, 5, 5, 5); 076 077 /** Localised resources. */ 078 private ResourceBundle resources; 079 080 /** The application name. */ 081 private String application; 082 083 /** The application version. */ 084 private String version; 085 086 /** The copyright string. */ 087 private String copyright; 088 089 /** Other info about the application. */ 090 private String info; 091 092 /** The project logo. */ 093 private Image logo; 094 095 /** A list of contributors. */ 096 private List contributors; 097 098 /** The licence. */ 099 private String licence; 100 101 /** 102 * Constructs an about frame. 103 * 104 * @param title the frame title. 105 * @param project information about the project. 106 */ 107 public AboutFrame(final String title, final ProjectInfo project) { 108 109 this(title, 110 project.getName(), 111 "Version " + project.getVersion(), 112 project.getInfo(), 113 project.getLogo(), 114 project.getCopyright(), 115 project.getLicenceText(), 116 project.getContributors(), 117 project); 118 119 } 120 121 /** 122 * Constructs an 'About' frame. 123 * 124 * @param title the frame title. 125 * @param application the application name. 126 * @param version the version. 127 * @param info other info. 128 * @param logo an optional logo. 129 * @param copyright the copyright notice. 130 * @param licence the licence. 131 * @param contributors a list of developers/contributors. 132 * @param project info about the project. 133 */ 134 public AboutFrame(final String title, 135 final String application, final String version, final String info, 136 final Image logo, 137 final String copyright, final String licence, 138 final List contributors, 139 final ProjectInfo project) { 140 141 super(title); 142 143 this.application = application; 144 this.version = version; 145 this.copyright = copyright; 146 this.info = info; 147 this.logo = logo; 148 this.contributors = contributors; 149 this.licence = licence; 150 151 final String baseName = "org.jfree.ui.about.resources.AboutResources"; 152 this.resources = ResourceBundle.getBundle(baseName); 153 154 final JPanel content = new JPanel(new BorderLayout()); 155 content.setBorder(STANDARD_BORDER); 156 157 final JTabbedPane tabs = createTabs(project); 158 content.add(tabs); 159 setContentPane(content); 160 161 pack(); 162 163 } 164 165 /** 166 * Returns the preferred size for the about frame. 167 * 168 * @return the preferred size. 169 */ 170 public Dimension getPreferredSize() { 171 return PREFERRED_SIZE; 172 } 173 174 /** 175 * Creates a tabbed pane containing an about panel and a system properties panel. 176 * 177 * @return a tabbed pane. 178 * @param project 179 */ 180 private JTabbedPane createTabs(final ProjectInfo project) { 181 182 final JTabbedPane tabs = new JTabbedPane(); 183 184 final JPanel aboutPanel = createAboutPanel(project); 185 aboutPanel.setBorder(AboutFrame.STANDARD_BORDER); 186 final String aboutTab = this.resources.getString("about-frame.tab.about"); 187 tabs.add(aboutTab, aboutPanel); 188 189 final JPanel systemPanel = new SystemPropertiesPanel(); 190 systemPanel.setBorder(AboutFrame.STANDARD_BORDER); 191 final String systemTab = this.resources.getString("about-frame.tab.system"); 192 tabs.add(systemTab, systemPanel); 193 194 return tabs; 195 196 } 197 198 /** 199 * Creates a panel showing information about the application, including the name, version, 200 * copyright notice, URL for further information, and a list of contributors. 201 * 202 * @return a panel. 203 * @param project 204 */ 205 private JPanel createAboutPanel(final ProjectInfo project) { 206 207 final JPanel about = new JPanel(new BorderLayout()); 208 209 final JPanel details = new AboutPanel(this.application, this.version, this.copyright, this.info, 210 this.logo); 211 212 boolean includetabs = false; 213 final JTabbedPane tabs = new JTabbedPane(); 214 215 if (this.contributors != null) { 216 final JPanel contributorsPanel = new ContributorsPanel(this.contributors); 217 contributorsPanel.setBorder(AboutFrame.STANDARD_BORDER); 218 final String contributorsTab = this.resources.getString("about-frame.tab.contributors"); 219 tabs.add(contributorsTab, contributorsPanel); 220 includetabs = true; 221 } 222 223 if (this.licence != null) { 224 final JPanel licencePanel = createLicencePanel(); 225 licencePanel.setBorder(STANDARD_BORDER); 226 final String licenceTab = this.resources.getString("about-frame.tab.licence"); 227 tabs.add(licenceTab, licencePanel); 228 includetabs = true; 229 } 230 231 if (project != null) { 232 final JPanel librariesPanel = new LibraryPanel(project); 233 librariesPanel.setBorder(AboutFrame.STANDARD_BORDER); 234 final String librariesTab = this.resources.getString("about-frame.tab.libraries"); 235 tabs.add(librariesTab, librariesPanel); 236 includetabs = true; 237 } 238 239 about.add(details, BorderLayout.NORTH); 240 if (includetabs) { 241 about.add(tabs); 242 } 243 244 return about; 245 246 } 247 248 /** 249 * Creates a panel showing the licence. 250 * 251 * @return a panel. 252 */ 253 private JPanel createLicencePanel() { 254 255 final JPanel licencePanel = new JPanel(new BorderLayout()); 256 final JTextArea area = new JTextArea(this.licence); 257 area.setLineWrap(true); 258 area.setWrapStyleWord(true); 259 area.setCaretPosition(0); 260 area.setEditable(false); 261 licencePanel.add(new JScrollPane(area)); 262 return licencePanel; 263 264 } 265 266 267 }