/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.core.utils.ui;
import java.awt.BorderLayout;
import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URI;
import java.net.URL;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.JTextComponent;
public class TextInformationDialog extends JDialog {
protected final JTextComponent textComponent;
protected final JScrollPane areaScrollPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
TextInformationDialog dialog = new TextInformationDialog(null, "", "");
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Throwable e) {
e.printStackTrace();
}
}
public TextInformationDialog(JFrame parent, String title, String message) {
this(parent, title, message, true, true, false);
}
/**
* Create the dialog.
*/
protected TextInformationDialog(JFrame parent, String title, String message, boolean scrollable, boolean resizable, boolean html) {
super(parent, true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setTitle(title);
setResizable(resizable);
JPanel panel = new JPanel();
setContentPane(panel);
getContentPane().setLayout(new BorderLayout());
if (html) {
JEditorPane editorPane = new JEditorPane("text/html", "");
;
textComponent = editorPane;
editorPane.addHyperlinkListener(new HyperlinkListener() {
/**
* See http://stackoverflow.com/questions/3693543/hyperlink-in-jeditorpane
*/
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (Desktop.isDesktopSupported() && Desktop.getDesktop()!=null) {
try {
URL url = e.getURL();
URI uri = url.toURI();
Desktop.getDesktop().browse(uri);
} catch (Throwable e1) {
// TODO Auto-generated catch block
// e1.printStackTrace();
}
}
}
}
});
textComponent.setText(message);
} else {
JTextArea textArea = new JTextArea();
//textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textComponent = textArea;
}
textComponent.setText(message);
textComponent.setEditable(false);
if (scrollable) {
areaScrollPane = new JScrollPane(textComponent);
panel.add(areaScrollPane, BorderLayout.CENTER);
} else {
panel.add(textComponent, BorderLayout.CENTER);
areaScrollPane = null;
}
// add buttons
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
createButtons(buttonPane);
if(parent!=null){
setLocationRelativeTo(parent);
}
pack();
}
protected void createButtons(JPanel buttonPane) {
JButton okButton = createOkButton();
buttonPane.add(okButton);
}
protected JButton createOkButton() {
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
okButton.setActionCommand("OK");
getRootPane().setDefaultButton(okButton);
return okButton;
}
}