package com.isti.xmax.gui; import javax.swing.JPanel; import javax.swing.JDialog; import java.awt.Dimension; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextArea; import java.awt.Color; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import javax.swing.JLabel; import com.isti.xmax.XMAX; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.IOException; import javax.swing.JButton; import java.awt.Cursor; import javax.swing.JScrollPane; import javax.swing.SwingConstants; /** * "About" dialog for XMAX * * @author Max Kokoulin */ public class AboutDialog extends JPanel implements ActionListener, MouseListener { private static final long serialVersionUID = 1L; private JLabel programNameL = null; private JLabel dateL = null; private JTextArea javaVersionMessageTA = null; private JLabel usedLibsL = null; private JTextArea usedLibsTA = null; private JButton getJavaB = null; private JPanel copyrightPanel = null; private JLabel writtenL = null; private JLabel istiL = null; private JLabel forL = null; private JLabel usgsL = null; private JScrollPane usedLibsSP = null; /** * Default constructor */ public AboutDialog() { super(); initialize(); } /** * This method initializes dialog */ private void initialize() { setSize(new Dimension(320, 285)); setMinimumSize(new Dimension(320, 285)); setMaximumSize(new Dimension(320, 285)); setPreferredSize(new Dimension(320, 285)); setBorder(BorderFactory.createEtchedBorder()); setLayout(new GridBagLayout()); GridBagConstraints gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 2; gridBagConstraints.insets = new Insets(5, 10, 5, 15); gridBagConstraints.anchor = GridBagConstraints.WEST; gridBagConstraints.fill = GridBagConstraints.HORIZONTAL; programNameL = new JLabel(); programNameL.setText("XMAX version " + XMAX.getVersionMessage()); add(programNameL, gridBagConstraints); GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); gridBagConstraints1.gridx = 1; gridBagConstraints1.gridy = 0; gridBagConstraints1.gridwidth = 1; gridBagConstraints1.anchor = GridBagConstraints.EAST; gridBagConstraints1.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints1.insets = new Insets(5, 10, 5, 15); dateL = new JLabel(); dateL.setText(XMAX.getReleaseDateMessage()); dateL.setHorizontalAlignment(SwingConstants.TRAILING); GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); gridBagConstraints2.gridx = 0; gridBagConstraints2.gridy = 1; gridBagConstraints2.gridwidth = 2; gridBagConstraints2.anchor = GridBagConstraints.WEST; gridBagConstraints2.insets = new Insets(5, 10, 5, 10); gridBagConstraints2.fill = GridBagConstraints.HORIZONTAL; this.add(dateL, gridBagConstraints1); this.add(getCopyrightPanel(), gridBagConstraints2); GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); gridBagConstraints3.gridx = 0; gridBagConstraints3.gridy = 2; gridBagConstraints3.gridwidth = 2; gridBagConstraints3.anchor = GridBagConstraints.WEST; gridBagConstraints3.fill = GridBagConstraints.HORIZONTAL; gridBagConstraints3.insets = new Insets(5, 10, 0, 10); usedLibsL = new JLabel(); usedLibsL.setText("Used libraries:"); add(usedLibsL, gridBagConstraints3); GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); gridBagConstraints4.gridx = 0; gridBagConstraints4.gridy = 3; gridBagConstraints4.gridwidth = 2; gridBagConstraints4.anchor = GridBagConstraints.WEST; gridBagConstraints4.insets = new Insets(2, 10, 5, 10); gridBagConstraints4.fill = GridBagConstraints.HORIZONTAL; usedLibsSP = new JScrollPane(getUsedLibsTA()); usedLibsSP.setMaximumSize(new Dimension(310, 70)); usedLibsSP.setMinimumSize(new Dimension(310, 70)); add(usedLibsSP, gridBagConstraints4); GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); gridBagConstraints5.gridx = 0; gridBagConstraints5.gridy = 4; gridBagConstraints5.gridwidth = 1; gridBagConstraints5.anchor = GridBagConstraints.WEST; gridBagConstraints5.insets = new Insets(5, 10, 5, 10); gridBagConstraints5.fill = GridBagConstraints.HORIZONTAL; javaVersionMessageTA = new JTextArea(); javaVersionMessageTA.setForeground(Color.RED); javaVersionMessageTA.setLineWrap(true); javaVersionMessageTA.setWrapStyleWord(true); javaVersionMessageTA.setText(XMAX.getJavaVersionMessage()); javaVersionMessageTA.setBackground(this.getBackground()); javaVersionMessageTA.setEditable(false); javaVersionMessageTA.setMaximumSize(new Dimension(190, 70)); javaVersionMessageTA.setMinimumSize(new Dimension(190, 70)); add(javaVersionMessageTA, gridBagConstraints5); GridBagConstraints gridBagConstraints6 = new GridBagConstraints(); gridBagConstraints6.gridx = 1; gridBagConstraints6.gridy = 4; gridBagConstraints6.gridwidth = 1; gridBagConstraints6.anchor = GridBagConstraints.WEST; gridBagConstraints6.insets = new Insets(5, 10, 5, 10); gridBagConstraints6.fill = GridBagConstraints.HORIZONTAL; this.add(getGetJava(), gridBagConstraints6); } /** * This method initializes getJava * * @return javax.swing.JButton */ private JButton getGetJava() { if (getJavaB == null) { getJavaB = new JButton(); getJavaB.setEnabled(!javaVersionMessageTA.getText().contains("version OK")); getJavaB.setText("Get JRE"); getJavaB.addActionListener(this); } return getJavaB; } /** * This method initializes copyrightPanel * * @return javax.swing.JPanel */ private JPanel getCopyrightPanel() { if (copyrightPanel == null) { usgsL = new JLabel(); usgsL.setText("US Geological Survey"); usgsL.setCursor(new Cursor(Cursor.HAND_CURSOR)); usgsL.setForeground(Color.blue); usgsL.addMouseListener(this); forL = new JLabel(); forL.setText("for "); istiL = new JLabel(); istiL.setText("Instrumental Software Technologies, Inc "); istiL.setCursor(new Cursor(Cursor.HAND_CURSOR)); istiL.setForeground(Color.blue); istiL.addMouseListener(this); writtenL = new JLabel(); writtenL.setText("Written by "); copyrightPanel = new JPanel(); copyrightPanel.setMinimumSize(new Dimension(300, 65)); copyrightPanel.add(writtenL); copyrightPanel.add(istiL); copyrightPanel.add(forL); copyrightPanel.add(usgsL); } return copyrightPanel; } /** * This method initializes usedLibsTA * * @return javax.swing.JTextArea */ private JTextArea getUsedLibsTA() { if (usedLibsTA == null) { usedLibsTA = new JTextArea(); usedLibsTA.setText("JFreeChart\nJava Plugin Framework\nLog4j\nTauP\nApache commons"); usedLibsTA.setBackground(this.getBackground()); usedLibsTA.setEditable(false); usedLibsTA.setCaretPosition(0); } return usedLibsTA; } public static void showDialog(JFrame frame) { JOptionPane optionPane = new JOptionPane(new AboutDialog(), JOptionPane.PLAIN_MESSAGE, JOptionPane.CLOSED_OPTION); JDialog dialog = optionPane.createDialog(frame, "About"); dialog.setVisible(true); dialog.dispose(); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setVisible(true); showDialog(frame); } // Method from ActionListener interface public void actionPerformed(ActionEvent event) { try { java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://java.sun.com/javase/downloads/index.jsp")); } catch (IOException e) { e.printStackTrace(); } } // Methods from MouseListener interface public void mouseClicked(MouseEvent event) { try { if (event.getSource().equals(istiL)) { java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://www.isti.com")); } else if (event.getSource().equals(usgsL)) { java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://www.usgs.gov")); } } catch (IOException e) { e.printStackTrace(); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } // @jve:decl-index=0:visual-constraint="4,7"