diff --git a/.gitignore b/.gitignore index f2564bc..4031850 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store target/ +*.jar +*.class \ No newline at end of file diff --git a/src/main/java/istlab/KisoJikken/App.java b/src/main/java/istlab/KisoJikken/App.java index 11be12a..a29172c 100644 --- a/src/main/java/istlab/KisoJikken/App.java +++ b/src/main/java/istlab/KisoJikken/App.java @@ -1,5 +1,11 @@ package istlab.KisoJikken; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -8,23 +14,33 @@ * */ public class App { + public static String userhome; + public static String nwpsrc = "/NWP/src"; + public static String gitrepos = "https://git.istlab.info/git/miura250/NWP.git"; + public static void main(String[] args) { - // SwingUtilities.invokeLater(() -> { - // String laf = UIManager.getSystemLookAndFeelClassName(); - // //laf = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"; - // try { - // UIManager.setLookAndFeel(laf); - // } catch (Exception e) { - // e.printStackTrace(); - // } - // AutoCompleteDemoApp frame = new AutoCompleteDemoApp(); - // frame.getToolkit().setDynamicLayout(true); - // frame.setVisible(true); - // }); + // ファイルがあるかチェック + userhome = System.getProperty("user.home"); + if (Files.notExists(Paths.get(userhome + nwpsrc))) { + int res = JOptionPane.showConfirmDialog(null, "NWP実験用のファイルが " + userhome + nwpsrc + " にありません。ダウンロードしますか?"); + if (res == JOptionPane.YES_OPTION) { + System.out.println("cd ; git clone "+gitrepos+" を実行。"); + ProcessBuilder processBuilder = new ProcessBuilder("git", "clone", gitrepos); + processBuilder.directory(new File(userhome)); + processBuilder.inheritIO(); + try { + Process process; + process = processBuilder.start(); + process.waitFor(); + } catch (IOException | InterruptedException e1) { + e1.printStackTrace(); + } + } else { + System.out.println("cd ; git clone "+gitrepos+" を実行してください。"); + System.exit(0); + } + } - - // System.out.println("Hello World!"); - // Instantiate GUI on the EDT. SwingUtilities.invokeLater(() -> { try { String laf = UIManager.getSystemLookAndFeelClassName(); diff --git a/src/main/java/istlab/KisoJikken/Editor.java b/src/main/java/istlab/KisoJikken/Editor.java index e68339f..afb2748 100644 --- a/src/main/java/istlab/KisoJikken/Editor.java +++ b/src/main/java/istlab/KisoJikken/Editor.java @@ -5,6 +5,8 @@ import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; @@ -28,21 +30,27 @@ import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rtextarea.RTextScrollPane; -public class Editor extends JFrame implements ActionListener { +public class Editor extends JFrame implements ActionListener, KeyListener { File file; RSyntaxTextArea textArea; JPanel topP; JSlider fontSizeJS; + JButton saveB; public Editor(File f) { file = f; - // JPanel contentPane = new JPanel(new BorderLayout()); textArea = new RSyntaxTextArea(20, 40); - textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); - textArea.setCodeFoldingEnabled(true); textArea.setFont(new FontUIResource("sansserif", Font.PLAIN, 16)); + // ファイルの拡張子によって、きりかえる + if (file.getName().endsWith(".java")) { + textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); + textArea.setCodeFoldingEnabled(true); + } else if (file.getName().endsWith(".sh")) { + textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_UNIX_SHELL); + } getContentPane().add(new RTextScrollPane(textArea)); + textArea.addKeyListener(this); try { setTitle(file.getCanonicalPath()); @@ -66,9 +74,10 @@ } }); - JButton saveB = new JButton("Save"); + saveB = new JButton("Save"); saveB.addActionListener(this); topP.add(saveB); + saveB.setEnabled(false); JButton loadB = new JButton("Reload"); loadB.addActionListener(this); @@ -77,6 +86,8 @@ getContentPane().add(topP, BorderLayout.NORTH); setVisible(true); + textArea.requestFocus(); + textArea.setCaretPosition(0); } public void load() { @@ -99,9 +110,9 @@ textArea.setText(sb.toString()); } - public void save(){ + public void save() { String src = textArea.getText(); - System.out.println(src); + // System.out.println(src); try { PrintWriter out = new PrintWriter(file.getAbsolutePath()); out.println(src); @@ -109,15 +120,42 @@ } catch (FileNotFoundException e) { e.printStackTrace(); } + System.out.println("保存しました"); + saveB.setEnabled(false); } @Override public void actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals("Save")){ + if (e.getActionCommand().equals("Save")) { save(); - } else if (e.getActionCommand().equals("Reload")){ + } else if (e.getActionCommand().equals("Reload")) { load(); } - + + } + + @Override + public void keyTyped(KeyEvent e) { + saveB.setEnabled(true); + } + + @Override + public void keyPressed(KeyEvent e) { + System.out.println(e.getKeyCode()); + + if (e.isControlDown() || e.isAltDown() || e.isAltGraphDown() || e.isMetaDown()) { + if (e.getKeyCode() == 83) { // Save + save(); + } + if (e.getKeyCode() == 87) { // W (Close) + setVisible(false); + } + } + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO Auto-generated method stub + } } diff --git a/src/main/java/istlab/KisoJikken/Launcher.java b/src/main/java/istlab/KisoJikken/Launcher.java index f934d9b..b8a1d40 100644 --- a/src/main/java/istlab/KisoJikken/Launcher.java +++ b/src/main/java/istlab/KisoJikken/Launcher.java @@ -1,6 +1,8 @@ package istlab.KisoJikken; import java.awt.BorderLayout; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.io.File; import java.util.Arrays; @@ -14,7 +16,7 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; -public class Launcher extends JFrame implements MouseInputListener { +public class Launcher extends JFrame implements MouseInputListener , KeyListener{ public static Launcher theapp; // JPanel mainP; @@ -32,7 +34,7 @@ if (args.length > 0) root = new File(args[0]); else - root = new File(System.getProperty("user.home") + "/NWP/src"); + root = new File(App.userhome + App.nwpsrc); // Create a TreeModel object to represent our tree of files FileTreeModel model = new FileTreeModel(root); @@ -41,6 +43,7 @@ tree = new JTree(); tree.setModel(model); tree.addMouseListener(this); + tree.addKeyListener(this); // The JTree can get big, so allow it to scroll. JScrollPane scrollpane = new JScrollPane(tree); @@ -59,21 +62,26 @@ @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { - TreePath tp = tree.getSelectionModel().getSelectionPath(); - File node = (File) tp.getLastPathComponent(); - Editor ed = file2editor.get(node); - if (ed==null) { - ed = new Editor(node); - file2editor.put(node,ed); - } else { - ed.setVisible(true); - ed.toFront(); - } - System.out.println(node.toString()); + openEditor(); } - } + private void openEditor(){ + TreePath tp = tree.getSelectionModel().getSelectionPath(); + if (tp==null) return; + File node = (File) tp.getLastPathComponent(); + Editor ed = file2editor.get(node); + if (ed==null) { + ed = new Editor(node); + file2editor.put(node,ed); + } else { + ed.setVisible(true); + ed.toFront(); + } + System.out.println(node.toString()); + } + + @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub @@ -110,6 +118,28 @@ } + @Override + public void keyTyped(KeyEvent e) { + // TODO Auto-generated method stub + + } + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode()==32){ + openEditor(); + + } + // TODO Auto-generated method stub + + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO Auto-generated method stub + + } + } /**