rendered paste body/* * To change this template, choose Tools | Templates * and open the template in the editor. */package gui.google;import googleTranslate.LangOption;import googleTranslate.Translator;import gui.QuickMenuCreator;import java.awt.FlowLayout;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.BorderFactory;import javax.swing.Icon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.UIManager;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import javax.swing.filechooser.FileNameExtensionFilter;/** * * @author daro *///TODO wybor jezyka z ktorego na jaki bedzie tlumaczone//ustawienia domyslnepublic class GooglePane extends JPanel{ private JTextArea orginalTextAr; private JTextArea translatedTextAr; private JButton orginalLangChange; private JButton translatedLangChange; private JButton copyOrginalTextBut; private JButton copyTranslatedTextBut; private JButton saveOrginalTextBut; private JButton saveTranslatedTextBut; private JButton swapTranslatedWithOrginalBut; private JButton translateBut; private LangOption orginalLang; private LangOption translateLang; private Translator translator; private JFrame owner; private ConfigManager config; public GooglePane(final JFrame owner) { config=new ConfigManager(); this.owner=owner; translator=new Translator(); orginalLang=LangOption.UK; translateLang=LangOption.POLAND; orginalTextAr=new JTextArea(config.getMinLinesCount(), config.getColumnsCount()); orginalTextAr.setWrapStyleWord(true); orginalTextAr.setLineWrap(true); orginalTextAr.setFont(UIManager.getFont("textField.font")); translatedTextAr=new JTextArea(config.getMinLinesCount(), config.getColumnsCount()); translatedTextAr.setLineWrap(true); translatedTextAr.setWrapStyleWord(true); translatedTextAr.setFont(UIManager.getFont("textField.font")); orginalLangChange=new JButton(orginalLang.getLangName(), orginalLang.getFlag()); translatedLangChange=new JButton(translateLang.getLangName(), translateLang.getFlag()); copyOrginalTextBut=new JButton("Copy"); copyTranslatedTextBut=new JButton("Copy"); saveOrginalTextBut=new JButton("Save"); saveTranslatedTextBut=new JButton("Save"); swapTranslatedWithOrginalBut=new JButton("swp"); translateBut=new JButton("Translate!"); swapTranslatedWithOrginalBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //zamiana tekstow String text=orginalTextAr.getText(); orginalTextAr.setText(translatedTextAr.getText()); translatedTextAr.setText(text); //zamiana zawartosci guzikow z jezykami text=orginalLangChange.getText(); Icon icon=orginalLangChange.getIcon(); orginalLangChange.setText(translatedLangChange.getText()); orginalLangChange.setIcon(translatedLangChange.getIcon()); translatedLangChange.setText(text); translatedLangChange.setIcon(icon); //zamiana zawartosci zmiennych LangOption a=orginalLang; translateLang=orginalLang; orginalLang=a; } }); drawInterface(this); addButtonsActions(); addTextAreasActions(); //TODO create menu orginalTextAr.setComponentPopupMenu(QuickMenuCreator.createMenu(orginalTextAr)); translatedTextAr.setComponentPopupMenu(QuickMenuCreator.createMenu(translatedTextAr)); saveOrginalTextBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveDocument(orginalTextAr); } }); } private void saveDocument(JTextArea area) { JFileChooser fileChooser=new JFileChooser(); fileChooser.setDialogType(JFileChooser.SAVE_DIALOG); fileChooser.setFileFilter(new FileNameExtensionFilter("Text Files Only","txt")); int value=fileChooser.showDialog(owner, "Save"); if(value==JFileChooser.APPROVE_OPTION) { File f=fileChooser.getSelectedFile(); if(f.exists()) { int n = JOptionPane.showConfirmDialog(owner, "File already exist, overwrite?", "Overwrite file", JOptionPane.YES_NO_OPTION); if(n==JOptionPane.NO_OPTION) { JOptionPane.showMessageDialog(owner, "Plik nie został zapisany.", "warning", JOptionPane.WARNING_MESSAGE); return; } } FileWriter file = null; try { file = new FileWriter(f); file.write(area.getText()); file.close(); } catch (IOException ex) { Logger.getLogger(GooglePane.class.getName()).log(Level.SEVERE, null, ex); } } } private void addTextAreasActions() { orginalTextAr.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { resizeTextAreas(); } public void removeUpdate(DocumentEvent e) { resizeTextAreas(); } public void changedUpdate(DocumentEvent e) { resizeTextAreas(); } }); translatedTextAr.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { resizeTextAreas(); } public void removeUpdate(DocumentEvent e) { resizeTextAreas(); } public void changedUpdate(DocumentEvent e) { resizeTextAreas(); } }); orginalTextAr.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) {} public void keyPressed(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_ENTER && (e.isControlDown() || e.isShiftDown())) { orginalTextAr.setText(orginalTextAr.getText()+"\n"); orginalTextAr.setColumns(orginalTextAr.getColumns()+1); translatedTextAr.setColumns(translatedTextAr.getColumns()+1); } else if(e.getKeyCode()==KeyEvent.VK_ENTER) { try { e.consume(); translatedTextAr.setText(translate(orginalTextAr.getText())); orginalTextAr.setCaretPosition(0); translatedTextAr.setCaretPosition(0); resizeTextAreas(); } catch (Exception ex) { System.err.println(ex); } } } public void keyReleased(KeyEvent e) {} }); } private void addButtonsActions() { translatedLangChange.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { translateLang=GoogleLangSelect.showDialog(owner, translateLang); translatedLangChange.setText(translateLang.getLangName()); translatedLangChange.setIcon(translateLang.getFlag()); resizeTextAreas(); } }); orginalLangChange.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { orginalLang=GoogleLangSelect.showDialog(owner, orginalLang); orginalLangChange.setText(orginalLang.getLangName()); orginalLangChange.setIcon(orginalLang.getFlag()); resizeTextAreas(); } }); translateBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { translatedTextAr.setText(translate(orginalTextAr.getText())); orginalTextAr.setCaretPosition(0); translatedTextAr.setCaretPosition(0); } }); copyOrginalTextBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Clipboard clipboard=getToolkit().getSystemClipboard(); StringSelection a=new StringSelection(orginalTextAr.getText()); clipboard.setContents(a, a); } }); copyTranslatedTextBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Clipboard clipboard=getToolkit().getSystemClipboard(); StringSelection a=new StringSelection(translatedTextAr.getText()); clipboard.setContents(a, a); } }); } private String translate(String orginal) { translator.setOrginalText(orginal); translator.setOrginalLang(orginalLang); translator.setTranslationLang(translateLang); translator.translate(); return translator.getTranslatedText(); } private int linesCount(String content, int columns) { String [] text=content.split(" "); int enters=0; int count=0; int realEnters=content.split("\n").length; for(int i=0; i<text.length-1; i++) { if(count<columns) count+=text[i].length(); else { enters++; count=0; } } if(realEnters>enters) enters=realEnters; if(enters<40 && enters>7) { return enters; } else if(enters<=7){ return config.getMinLinesCount(); } else { return config.getMaxLinesCount(); } } private void drawInterface(JPanel panel) { panel.setLayout(new GridBagLayout()); GridBagConstraints c=new GridBagConstraints(); c.insets=new Insets(4, 4, 4, 4); c.anchor=GridBagConstraints.LINE_START; c.gridwidth=2; panel.add(orginalLangChange, c); c.gridx=4; c.anchor=GridBagConstraints.LINE_END; panel.add(translatedLangChange, c); c.gridx=0; c.gridy=1; c.gridwidth=2; panel.add( new JScrollPane(orginalTextAr, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), c ); c.gridwidth=1; c.gridx=2; c.fill=GridBagConstraints.BOTH; panel.add(swapTranslatedWithOrginalBut, c); c.gridwidth=2; c.gridx=3; panel.add( new JScrollPane(translatedTextAr, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), c ); c.fill=GridBagConstraints.NONE; JPanel orgTextOp=new JPanel(new FlowLayout(FlowLayout.LEFT)); orgTextOp.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); orgTextOp.add(copyOrginalTextBut); orgTextOp.add(saveOrginalTextBut); JPanel transTextOp=new JPanel(new FlowLayout(FlowLayout.RIGHT)); transTextOp.add(saveTranslatedTextBut); transTextOp.add(copyTranslatedTextBut); c.insets=new Insets(0, 0, 0, 0); c.gridx=0; c.gridy=2; c.gridwidth=1; c.anchor=GridBagConstraints.LINE_START; panel.add(orgTextOp, c); c.gridx=2; panel.add(translateBut, c); c.anchor=GridBagConstraints.LINE_END; c.gridx=4; panel.add(transTextOp, c); panel.validate(); } private void resizeTextAreas() { int orginalTextArLinesCount=linesCount(orginalTextAr.getText(), orginalTextAr.getColumns()); int translatedTextArLinesCount=linesCount(translatedTextAr.getText(), translatedTextAr.getColumns()); if(orginalTextArLinesCount>translatedTextArLinesCount) { orginalTextAr.setRows(orginalTextArLinesCount); translatedTextAr.setRows(orginalTextArLinesCount); } else { orginalTextAr.setRows(translatedTextArLinesCount); translatedTextAr.setRows(translatedTextArLinesCount); } owner.pack(); }}