package view.subview; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; 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.text.DefaultCaret; import logging.LogUtil; import logging.TextAreaHandler; import net.miginfocom.swing.MigLayout; import config.Constants; public class DebugFrame extends JFrame { /** * */ private static final long serialVersionUID = -3297680578793436535L; /** * true if open, else false */ private static boolean isOpen = false; private JTextArea ta; private JPanel contentPane; private JButton saveButton; /** * Constructor * * @throws RuntimeException * thrown if already one debug frame is open */ public DebugFrame() throws RuntimeException { if (isOpen) throw new RuntimeException(""); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { closeWindow(); } }); } /** * closes the window */ private void closeWindow() { isOpen = false; TextAreaHandler.setTextArea(null); } /** * inits the window */ public void init() { setTitle("Debug"); contentPane = new JPanel(); this.ta = new JTextArea(); // TA should always follow text ((DefaultCaret) this.ta.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); this.saveButton = new JButton("save log"); setContentPane(contentPane); JScrollPane sp = new JScrollPane(); sp.setViewportView(ta); contentPane.setLayout(new MigLayout("insets 5", "[grow]", "[grow][shrink]")); contentPane.add(sp, "grow, wrap"); contentPane.add(saveButton, "grow"); setMinimumSize(new Dimension(500, 500)); pack(); this.saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { File file = null; // create JFileChooser JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(null); // get File and parse it if (returnVal == JFileChooser.APPROVE_OPTION) file = fc.getSelectedFile(); if (file == null) { JOptionPane.showMessageDialog(null, "no file chosen."); return; } try { BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(ta.getText()); bw.close(); JOptionPane.showMessageDialog(null, "log written!"); } catch (IOException e) { JOptionPane.showMessageDialog(null, "Error while writing log:\n" + LogUtil.getStackTrace(e)); e.printStackTrace(); } } }); this.ta.setEditable(false); if (!Constants.DEBUG) this.ta.setText("Debug is turned off completely. There are no debug logs available."); TextAreaHandler.setTextArea(ta); isOpen = true; } }