BlockBookBinder/src/main/java/nl/andrewlalis/blockbookbinder/view/about/AboutDialog.java

65 lines
1.9 KiB
Java

package nl.andrewlalis.blockbookbinder.view.about;
import nl.andrewlalis.blockbookbinder.util.ApplicationProperties;
import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.stream.Collectors;
/**
* Simple dialog whose main purpose is rendering an HTML document.
*/
public class AboutDialog extends JDialog {
public AboutDialog(Frame owner) {
super(owner, "About", true);
}
public void setupAndShow() {
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setPreferredSize(new Dimension(
ApplicationProperties.getIntProp("about_dialog.min_width"),
ApplicationProperties.getIntProp("about_dialog.min_height")
));
JTextPane textPane = new JTextPane();
textPane.setEditable(false);
textPane.setContentType("text/html");
textPane.setText(this.getAboutHtml());
textPane.addHyperlinkListener(e -> {
try {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
Desktop.getDesktop().browse(e.getURL().toURI());
}
} catch (URISyntaxException | IOException uriSyntaxException) {
uriSyntaxException.printStackTrace();
}
});
JScrollPane scrollPane = new JScrollPane(
textPane,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
);
this.setContentPane(scrollPane);
this.pack();
this.setLocationRelativeTo(this.getOwner());
this.setVisible(true);
}
private String getAboutHtml() {
InputStream is = this.getClass().getClassLoader().getResourceAsStream(
ApplicationProperties.getProp("about_dialog.source")
);
if (is == null) {
return "";
}
return new BufferedReader(new InputStreamReader(is)).lines()
.parallel().collect(Collectors.joining("\n"));
}
}