package bsearch.app; import bsearch.util.GeneralUtils; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileNotFoundException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.WindowConstants; public class HelpAboutDialog extends javax.swing.JDialog { private static final long serialVersionUID = 1L; private JTextPane jTextPaneContent; private JScrollPane jScrollPane1; private JButton jButtonOk; private JButton jButtonWebsite; public HelpAboutDialog(JFrame frame, String title) { super(frame, title); jTextPaneContent = new JTextPane(); jTextPaneContent.setContentType("text/plain"); File creditsFile = new File(GeneralUtils.attemptResolvePathFromBSearchRoot("CREDITS.TXT")); File licFile = new File(GeneralUtils.attemptResolvePathFromBSearchRoot("LICENSE.TXT")); String creditsText, licText; try { creditsText = GeneralUtils.stringContentsOfFile(creditsFile); licText = GeneralUtils.stringContentsOfFile(licFile); } catch (FileNotFoundException ex) { creditsText = "ERROR: Either CREDITS.TXT or LICENSE.TXT file not found."; licText = ""; } jTextPaneContent.setText("BehaviorSearch v" + GeneralUtils.getVersionString() + "\n" + creditsText + "\n*****\n\n" + licText); jTextPaneContent.setCaretPosition(0); jTextPaneContent.setEditable(false); jScrollPane1 = new JScrollPane(jTextPaneContent); getContentPane().add(jScrollPane1, BorderLayout.CENTER); JPanel panelSouth = new JPanel(); getContentPane().add(panelSouth, BorderLayout.SOUTH); jButtonWebsite= new JButton("Browse BehaviorSearch web site"); jButtonWebsite.setForeground(java.awt.Color.blue); panelSouth.add(jButtonWebsite); jButtonWebsite.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { org.nlogo.swing.BrowserLauncher.openURL(HelpAboutDialog.this, "http://www.behaviorsearch.org/", false); } }); jButtonOk = new JButton("Close"); panelSouth.add(jButtonOk); jButtonOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { setVisible(false); } }); // make sure the OK button always gets focus, so it's easy to close the help dialog. this.addWindowFocusListener(new java.awt.event.WindowAdapter() { @Override public void windowGainedFocus(java.awt.event.WindowEvent e) { jButtonOk.requestFocusInWindow(); } }); this.pack(); // size the window based on the textpane's contents // but long lines of text can cause the size of the window to be ridiculous, so we fix it if (this.getWidth() > 640) { this.setSize(640, Math.min(this.getHeight() * 3 / 2, 440)); } if (this.getHeight() > 440) { this.setSize(Math.min(this.getWidth() * 3 / 2, 640), 440); } this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } public static void showAboutDialog(JFrame parent) { HelpAboutDialog hdialog = new HelpAboutDialog(parent, "About BehaviorSearch..."); hdialog.setLocationRelativeTo(null); hdialog.setVisible(true); } }