in languagetool-standalone/src/main/java/org/languagetool/gui/Main.java [336:573]
private void createGUI() {
loadRecentFiles();
frame = new JFrame("LanguageTool " + JLanguageTool.VERSION);
setLookAndFeel();
openAction = new OpenAction();
saveAction = new SaveAction();
saveAsAction = new SaveAsAction();
checkAction = new CheckAction();
autoCheckAction = new AutoCheckAction(true);
showResultAction = new ShowResultAction(true);
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new CloseListener());
URL iconUrl = JLanguageTool.getDataBroker().getFromResourceDirAsUrl(TRAY_ICON);
frame.setIconImage(new ImageIcon(iconUrl).getImage());
textArea = new JTextArea();
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.addKeyListener(new ControlReturnTextCheckingListener());
textLineNumber = new TextLineNumber(textArea, 2);
numberedTextAreaPane = new JScrollPane(textArea);
numberedTextAreaPane.setRowHeaderView(textLineNumber);
resultArea = new JTextPane();
undoRedo = new UndoRedoSupport(this.textArea, messages);
frame.setJMenuBar(createMenuBar());
GridBagConstraints buttonCons = new GridBagConstraints();
JPanel insidePanel = new JPanel();
insidePanel.setOpaque(false);
insidePanel.setLayout(new GridBagLayout());
buttonCons.gridx = 0;
buttonCons.gridy = 0;
buttonCons.anchor = GridBagConstraints.LINE_START;
insidePanel.add(new JLabel(messages.getString("textLanguage") + " "), buttonCons);
//create a ComboBox with flags, do not include hidden languages
languageBox = LanguageComboBox.create(messages, EXTERNAL_LANGUAGE_SUFFIX,
true, false);
buttonCons.gridx = 1;
buttonCons.gridy = 0;
buttonCons.anchor = GridBagConstraints.LINE_START;
insidePanel.add(languageBox, buttonCons);
JCheckBox autoDetectBox = new JCheckBox(messages.getString("atd"));
buttonCons.gridx = 2;
buttonCons.gridy = 0;
buttonCons.gridwidth = GridBagConstraints.REMAINDER;
buttonCons.anchor = GridBagConstraints.LINE_START;
insidePanel.add(autoDetectBox, buttonCons);
buttonCons.gridx = 0;
buttonCons.gridy = 1;
buttonCons.gridwidth = GridBagConstraints.REMAINDER;
buttonCons.fill = GridBagConstraints.HORIZONTAL;
buttonCons.anchor = GridBagConstraints.LINE_END;
buttonCons.weightx = 1.0;
insidePanel.add(statusLabel, buttonCons);
Container contentPane = frame.getContentPane();
GridBagLayout gridLayout = new GridBagLayout();
contentPane.setLayout(gridLayout);
GridBagConstraints cons = new GridBagConstraints();
cons.gridx = 0;
cons.gridy = 1;
cons.fill = GridBagConstraints.HORIZONTAL;
cons.anchor = GridBagConstraints.FIRST_LINE_START;
JToolBar toolbar = new JToolBar("Toolbar", JToolBar.HORIZONTAL);
toolbar.setFloatable(false);
contentPane.add(toolbar,cons);
JButton openButton = new JButton(openAction);
openButton.setHideActionText(true);
openButton.setFocusable(false);
toolbar.add(openButton);
JButton saveButton = new JButton(saveAction);
saveButton.setHideActionText(true);
saveButton.setFocusable(false);
toolbar.add(saveButton);
JButton saveAsButton = new JButton(saveAsAction);
saveAsButton.setHideActionText(true);
saveAsButton.setFocusable(false);
toolbar.add(saveAsButton);
JButton spellButton = new JButton(this.checkAction);
spellButton.setHideActionText(true);
spellButton.setFocusable(false);
toolbar.add(spellButton);
JToggleButton autoSpellButton = new JToggleButton(autoCheckAction);
autoSpellButton.setHideActionText(true);
autoSpellButton.setFocusable(false);
toolbar.add(autoSpellButton);
JButton clearTextButton = new JButton(new ClearTextAction());
clearTextButton.setHideActionText(true);
clearTextButton.setFocusable(false);
toolbar.add(clearTextButton);
cons.insets = new Insets(5, 5, 5, 5);
cons.fill = GridBagConstraints.BOTH;
cons.weightx = 10.0f;
cons.weighty = 10.0f;
cons.gridx = 0;
cons.gridy = 2;
cons.weighty = 5.0f;
splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
numberedTextAreaPane, new JScrollPane(resultArea));
mainPanel.setLayout(new GridLayout(0,1));
contentPane.add(mainPanel, cons);
mainPanel.add(splitPane);
cons.fill = GridBagConstraints.HORIZONTAL;
cons.gridx = 0;
cons.gridy = 3;
cons.weightx = 1.0f;
cons.weighty = 0.0f;
cons.insets = new Insets(4, 12, 4, 12);
contentPane.add(insidePanel, cons);
ltSupport = new LanguageToolSupport(this.frame, this.textArea, this.undoRedo);
ResultAreaHelper.install(messages, ltSupport, resultArea);
languageBox.selectLanguage(ltSupport.getLanguage());
languageBox.setEnabled(!ltSupport.getConfig().getAutoDetect());
autoDetectBox.setSelected(ltSupport.getConfig().getAutoDetect());
taggerShowsDisambigLog = ltSupport.getConfig().getTaggerShowsDisambigLog();
languageBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
// we cannot re-use the existing LT object anymore
frame.applyComponentOrientation(
ComponentOrientation.getOrientation(Locale.getDefault()));
Language lang = languageBox.getSelectedLanguage();
ComponentOrientation componentOrientation =
ComponentOrientation.getOrientation(lang.getLocale());
textArea.applyComponentOrientation(componentOrientation);
resultArea.applyComponentOrientation(componentOrientation);
ltSupport.setLanguage(lang);
}
}
});
autoDetectBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
boolean selected = e.getStateChange() == ItemEvent.SELECTED;
languageBox.setEnabled(!selected);
ltSupport.getConfig().setAutoDetect(selected);
if (selected) {
Language detected = ltSupport.autoDetectLanguage(textArea.getText());
languageBox.selectLanguage(detected);
}
}
});
ltSupport.addLanguageToolListener(new LanguageToolListener() {
@Override
public void languageToolEventOccurred(LanguageToolEvent event) {
if (event.getType() == LanguageToolEvent.Type.CHECKING_STARTED) {
String msg = org.languagetool.tools.Tools.i18n(messages, "checkStart");
statusLabel.setText(msg);
if (event.getCaller() == getFrame()) {
setWaitCursor();
checkAction.setEnabled(false);
}
} else if (event.getType() == LanguageToolEvent.Type.CHECKING_FINISHED) {
if (event.getCaller() == getFrame()) {
checkAction.setEnabled(true);
unsetWaitCursor();
}
String msg = org.languagetool.tools.Tools.i18n(messages, "checkDone", event.getSource().getMatches().size(), event.getElapsedTime());
statusLabel.setText(msg);
} else if (event.getType() == LanguageToolEvent.Type.LANGUAGE_CHANGED) {
languageBox.selectLanguage(ltSupport.getLanguage());
} else if (event.getType() == LanguageToolEvent.Type.RULE_ENABLED) {
//this will trigger a check and the result will be updated by
//the CHECKING_FINISHED event
} else if (event.getType() == LanguageToolEvent.Type.RULE_DISABLED) {
String msg = org.languagetool.tools.Tools.i18n(messages, "checkDoneNoTime", event.getSource().getMatches().size());
statusLabel.setText(msg);
}
}
});
frame.applyComponentOrientation(ComponentOrientation.getOrientation(Locale.getDefault()));
Language lang = ltSupport.getLanguage();
ComponentOrientation componentOrientation =
ComponentOrientation.getOrientation(lang.getLocale());
textArea.applyComponentOrientation(componentOrientation);
resultArea.applyComponentOrientation(componentOrientation);
ResourceBundle textLanguageMessageBundle = JLanguageTool.getMessageBundle(ltSupport.getLanguage());
textArea.setText(textLanguageMessageBundle.getString("guiDemoText"));
Configuration config = ltSupport.getConfig();
if (config.getFontName() != null
|| config.getFontStyle() != Configuration.FONT_STYLE_INVALID
|| config.getFontSize() != Configuration.FONT_SIZE_INVALID) {
String fontName = config.getFontName();
if (fontName == null) {
fontName = textArea.getFont().getFamily();
}
int fontSize = config.getFontSize();
if (fontSize == Configuration.FONT_SIZE_INVALID) {
fontSize = textArea.getFont().getSize();
}
Font font = new Font(fontName, config.getFontStyle(), fontSize);
textArea.setFont(font);
}
frame.pack();
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setLocationByPlatform(true);
splitPane.setDividerLocation(200);
MainWindowStateBean state =
localStorage.loadProperty("gui.state", MainWindowStateBean.class);
if(state != null) {
if(state.getBounds() != null) {
frame.setBounds(state.getBounds());
ResizeComponentListener.setBoundsProperty(frame, state.getBounds());
}
if(state.getDividerLocation() != null) {
splitPane.setDividerLocation(state.getDividerLocation());
}
if(state.getState() != null) {
frame.setExtendedState(state.getState());
}
}
ResizeComponentListener.attachToWindow(frame);
maybeStartServer();
}