diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index a165cb3..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index a0733a5..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/project.iml b/.idea/project.iml deleted file mode 100644 index 47baa8c..0000000 --- a/.idea/project.iml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Java/Swing/src/editor/ApplicationRunner.java b/Java/Swing/src/editor/ApplicationRunner.java new file mode 100644 index 0000000..88de767 --- /dev/null +++ b/Java/Swing/src/editor/ApplicationRunner.java @@ -0,0 +1,16 @@ +// This is a personal academic project. Dear PVS-Studio, please check it. +// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +package editor; + +import javax.swing.*; + +class ApplicationRunner { + public static void main(final String[] args) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + new TextEditor(); + } + }); + } +} diff --git a/Java/Swing/src/editor/TextEditor.java b/Java/Swing/src/editor/TextEditor.java new file mode 100644 index 0000000..a2f15c0 --- /dev/null +++ b/Java/Swing/src/editor/TextEditor.java @@ -0,0 +1,166 @@ +// This is a personal academic project. Dear PVS-Studio, please check it. +// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +package editor; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class TextEditor extends JFrame { + private JTextArea textArea; + private JTextField fileName; + private JButton save; + private JButton load; + private JPanel main; + private JPanel buttons; + private JScrollPane textScroll; + private AbstractAction saveAction; + private AbstractAction loadAction; + private AbstractAction exitAction; + private JMenuBar menuBar; + private JMenuItem loadMenuItem; + private JMenuItem saveMenuItem; + private JMenuItem exitMenuItem; + + public TextEditor() { + createWidgets(); + createActions(); + setupLayout(); + setupActions(); + setupMenu(); + setupStyle(); + setupMainWindowParameters(); + } + + private void setupMenu() { + JMenu file = new JMenu("File"); + + file.add(loadMenuItem); + file.add(saveMenuItem); + + file.addSeparator(); + + file.add(exitMenuItem); + + menuBar.add(file); + } + + private void createActions() { + saveAction = new AbstractAction() { + { + putValue(NAME, "Save"); + } + @Override + public void actionPerformed(final ActionEvent e) { + File file = new File(fileName.getText()); + try { + PrintWriter printWriter = new PrintWriter(file); + printWriter.println(textArea.getText()); + printWriter.close(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } + } + }; + + loadAction = new AbstractAction() { + { + putValue(NAME, "Load"); + } + @Override + public void actionPerformed(final ActionEvent e) { + byte[] encoded = null; + try { + encoded = Files.readAllBytes(Paths.get(fileName.getText())); + } catch (IOException e1) { + e1.printStackTrace(); + } + textArea.setText(new String(encoded, StandardCharsets.UTF_8)); + } + }; + + exitAction = new AbstractAction() { + { + putValue(NAME, "Exit"); + } + @Override + public void actionPerformed(final ActionEvent e) { + dispose(); + } + }; + } + + private void setupActions() { + save.addActionListener(saveAction); + load.addActionListener(loadAction); + + saveMenuItem.setAction(saveAction); + loadMenuItem.setAction(loadAction); + exitMenuItem.setAction(exitAction); + } + + private void setupMainWindowParameters() { + setTitle("Text Editor"); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setJMenuBar(menuBar); + setSize(400,400); + setVisible(true); + } + + private void setupLayout() { + main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS)); + + buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS)); + buttons.add(fileName); + buttons.add(Box.createRigidArea(new Dimension(12, 0))); + buttons.add(save); + buttons.add(Box.createRigidArea(new Dimension(12, 0))); + buttons.add(load); + + JPanel textPanel = new JPanel(); + textPanel.setLayout(new BoxLayout(textPanel, BoxLayout.X_AXIS)); + textPanel.add(textScroll); + + main.add(buttons); + main.add(Box.createRigidArea(new Dimension(0, 12))); + main.add(textPanel); + + add(main); + } + + private void createWidgets() { + main = new JPanel(); + buttons = new JPanel(); + textArea = new JTextArea(10, 10); + fileName = new JTextField(30); + save = new JButton("Save"); + load = new JButton("Load"); + textScroll = new JScrollPane(textArea); + menuBar = new JMenuBar(); + loadMenuItem = new JMenuItem(); + saveMenuItem = new JMenuItem(); + exitMenuItem = new JMenuItem(); + } + + private void setupStyle() { + main.setBorder(BorderFactory.createEmptyBorder(12,12,12,12)); + + Font font = textArea.getFont(); + float size = font.getSize() + 2.0f; + textArea.setFont(font.deriveFont(size)); + + Dimension maxSize = fileName.getPreferredSize(); + fileName.setMaximumSize(maxSize); + + buttons.add(Box.createGlue()); + buttons.setMaximumSize(new Dimension(buttons.getMaximumSize().width, + buttons.getPreferredSize().height)); + } +} diff --git a/src/editor/ApplicationRunner.java b/src/editor/ApplicationRunner.java deleted file mode 100644 index b7f538c..0000000 --- a/src/editor/ApplicationRunner.java +++ /dev/null @@ -1,7 +0,0 @@ -package editor; - -public class ApplicationRunner { - public static void main(String[] args) { - new TextEditor(); - } -} diff --git a/src/editor/TextEditor.java b/src/editor/TextEditor.java deleted file mode 100644 index 228c84b..0000000 --- a/src/editor/TextEditor.java +++ /dev/null @@ -1,11 +0,0 @@ -package editor; - -import javax.swing.*; - -public class TextEditor extends JFrame { - public TextEditor() { - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(300, 300); - setVisible(true); - } -} \ No newline at end of file