From 592e1a0f02a5fc6cac8353f8a12f5d32e3eb5a27 Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Fri, 23 Jun 2017 18:17:11 +0200 Subject: [PATCH] gui gui :D --- pom.xml | 7 +++++ src/main/java/App.java | 18 ++++++++++++ src/main/java/View/MainFrame.java | 35 +++++++++++++++++++++--- src/main/java/View/Panels/LMSPanel.java | 20 +++++++++++--- src/main/java/View/Panels/RMPanel.java | 13 +++++++-- src/main/resources/import.png | Bin 0 -> 1042 bytes src/main/resources/plot.png | Bin 0 -> 1735 bytes src/main/resources/start.png | Bin 0 -> 2879 bytes 8 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/import.png create mode 100644 src/main/resources/plot.png create mode 100644 src/main/resources/start.png diff --git a/pom.xml b/pom.xml index ea6a449..7f049aa 100644 --- a/pom.xml +++ b/pom.xml @@ -42,5 +42,12 @@ opencsv 3.9 + + + + com.jtattoo + JTattoo + 1.6.11 + \ No newline at end of file diff --git a/src/main/java/App.java b/src/main/java/App.java index 72e8791..625fd8c 100644 --- a/src/main/java/App.java +++ b/src/main/java/App.java @@ -2,8 +2,10 @@ import Model.Arrangement; import Presenter.Presenter; import View.MainFrame; import java.awt.Font; +import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. @@ -28,11 +30,27 @@ public class App { } } + private static void setLookAndFeel(JFrame view){ + try { + UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (UnsupportedLookAndFeelException e) { + e.printStackTrace(); + } + SwingUtilities.updateComponentTreeUI(view); + } + public static void main(String[] args) { SwingUtilities.invokeLater(() -> { MainFrame view = new MainFrame(); view.setPresenter(new Presenter(new Arrangement(), view)); + setLookAndFeel(view); setUIFont (new javax.swing.plaf.FontUIResource(new Font("Verdana",Font.PLAIN, 12))); }); diff --git a/src/main/java/View/MainFrame.java b/src/main/java/View/MainFrame.java index 4f4a418..0d04131 100644 --- a/src/main/java/View/MainFrame.java +++ b/src/main/java/View/MainFrame.java @@ -7,13 +7,19 @@ import View.Panels.MenuPanel; import View.Panels.OutputPanel; import View.Panels.RMPanel; import java.awt.BorderLayout; +import java.awt.ComponentOrientation; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; +import java.awt.Image; import java.awt.event.ActionEvent; import java.io.File; +import java.io.IOException; import java.util.List; +import javax.imageio.ImageIO; import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFileChooser; @@ -50,6 +56,7 @@ public class MainFrame extends JFrame { private LMSPanel lmsPanel; private RMPanel rmPanel; private JPanel pane; + private JPanel northPanel; private ArrangementDialog arrangement; private JDialog arrangementDialog; @@ -76,7 +83,7 @@ public class MainFrame extends JFrame { setCloseOperations(); setActionListeners(); - + setIcons(); disableFunctionality(); this.setVisible(true); } @@ -147,6 +154,8 @@ public class MainFrame extends JFrame { private void addComponents() { pane.add(arrangementButton); pane.add(importButton); + northPanel.add(menupanel); + northPanel.add(pane); setupSplitPane(); setupTabbedPane(); @@ -154,9 +163,9 @@ public class MainFrame extends JFrame { progressContent.add(progressBar, BorderLayout.NORTH); progressBar.setBorder(BorderFactory.createTitledBorder("Import...")); - this.add(pane, BorderLayout.SOUTH); + this.add(northPanel, BorderLayout.NORTH); this.add(splitpane, BorderLayout.CENTER); - this.add(menupanel, BorderLayout.NORTH); + } private void setupSplitPane() { @@ -185,7 +194,8 @@ public class MainFrame extends JFrame { private void setLayouts() { this.setLayout(new BorderLayout()); - pane.setLayout(new FlowLayout()); + pane.setLayout(new FlowLayout(FlowLayout.LEFT)); + northPanel.setLayout(new BoxLayout(northPanel, BoxLayout.Y_AXIS)); } private void initializeComponents() { @@ -194,6 +204,7 @@ public class MainFrame extends JFrame { lmsPanel = new LMSPanel(); rmPanel = new RMPanel(); menupanel = new MenuPanel(); + northPanel = new JPanel(); //Dialogs arrangementDialog = new JDialog(); @@ -212,6 +223,22 @@ public class MainFrame extends JFrame { importButton = new JButton(); } + private void setIcons(){ + try { + ClassLoader classLoader = getClass().getClassLoader(); + Image imgImport = ImageIO.read(classLoader.getResource("import.png")).getScaledInstance(16,16,Image.SCALE_SMOOTH); + Image imgPlot = ImageIO.read(classLoader.getResource("plot.png")).getScaledInstance(16,16,Image.SCALE_SMOOTH); + Image imgStart = ImageIO.read(classLoader.getResource("start.png")).getScaledInstance(32,32,Image.SCALE_SMOOTH); + + importButton.setIcon(new ImageIcon(imgImport)); + arrangementButton.setIcon(new ImageIcon(imgPlot)); + lmsPanel.getStartButton().setIcon(new ImageIcon(imgStart)); + rmPanel.getStartButton().setIcon(new ImageIcon(imgStart)); + } catch (IOException e) { + e.printStackTrace(); + } + } + private void setActionListeners() { arrangementButton.addActionListener((ActionEvent e) -> { Thread t = new Thread(() -> getPresenter().visualizeDualLines()); diff --git a/src/main/java/View/Panels/LMSPanel.java b/src/main/java/View/Panels/LMSPanel.java index ceb67ef..aec5218 100644 --- a/src/main/java/View/Panels/LMSPanel.java +++ b/src/main/java/View/Panels/LMSPanel.java @@ -2,10 +2,15 @@ package View.Panels; import View.PlotDialog; import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; @@ -50,7 +55,10 @@ public class LMSPanel extends JPanel { addTextfieldAndInput(0, "Konstante", 0.5); addTextfieldAndInput(1, "Fehler", 0.05); - this.startButton = new JButton("start"); + this.startButton = new JButton("Start"); + this.startButton.setFont(new Font("Verdana",Font.PLAIN, 16)); + this.startButton.setContentAreaFilled(false); + this.startButton.setFocusPainted(false); addButton(2, startButton); this.northPanel.add(continer, BorderLayout.CENTER); @@ -81,14 +89,18 @@ public class LMSPanel extends JPanel { } private void addButton(int row, JButton button) { + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); + + gbc.insets = new Insets(30, 0, 5, 0); - gbc.insets = new Insets(30, 5, 10, 0); gbc.gridx = 0; gbc.gridy = row; gbc.weightx = 0.05; gbc.weighty = 0.05; - - continer.add(button, gbc); + gbc.gridwidth = 1; + buttonPanel.add(button); + continer.add(buttonPanel, gbc); } public JButton getStartButton() { diff --git a/src/main/java/View/Panels/RMPanel.java b/src/main/java/View/Panels/RMPanel.java index 9ceb209..1459405 100644 --- a/src/main/java/View/Panels/RMPanel.java +++ b/src/main/java/View/Panels/RMPanel.java @@ -2,6 +2,7 @@ package View.Panels; import View.PlotDialog; import java.awt.BorderLayout; +import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; @@ -50,13 +51,19 @@ public class RMPanel extends JPanel { addTextfieldAndInput(0, "\u00df (0 < \u00df < 1)", 0.5); - this.startButton = new JButton("start"); - gbc.insets = new Insets(30, 5, 10, 0); + JPanel buttonPanel = new JPanel(); + buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); + this.startButton = new JButton("Start"); + this.startButton.setFont(new Font("Verdana",Font.PLAIN, 16)); + this.startButton.setContentAreaFilled(false); + this.startButton.setFocusPainted(false); + gbc.insets = new Insets(30, 0, 10, 0); gbc.gridx = 0; gbc.gridy = 2; gbc.weightx = 0.05; gbc.weighty = 0.05; - continer.add(startButton, gbc); + buttonPanel.add(startButton); + continer.add(buttonPanel, gbc); this.northPanel.add(continer, BorderLayout.CENTER); this.add(northPanel, BorderLayout.NORTH); diff --git a/src/main/resources/import.png b/src/main/resources/import.png new file mode 100644 index 0000000000000000000000000000000000000000..68701de33653dc19081960d644826ed202a9c669 GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#Vf4nJ za0`PlBg3pY5)2H?TRdGHLn`LHy|Xt+`gTuUAmJUO#8&OxcXap}fd{f1taY|kvauS`ObOnH58f6q=*T=~{}FN61K#*Si! zM=}i->>k6~Pe4oZWfdu=rZz!Gdb{KOAzs zGWF@z521IwGfR{b#DD(ZNK!RF7jt%8ng zfV5_(tYZ&|-tAw=(ylGDI+LNh;)myvt_7Y9a&<|DN-Lxr+V2bcDz6X*(uTfDE2MyQ zV5#y7As}5?s-z+9@V?!C{^tKm1t~fA`5%PtKD{z^W{$+^#^2`{&o`VtaK7t!EXzFR z<;CyrGrSA2dA7x5-hGpQ2};|1KgF+z5H4F)Bn(_D8=0} zEpt?@g{S=NusFT`M`3?}^!SwANHmrIzomM7o&J!hHH578a|c|R_kXGkbwQJl`z zcm4E3=l^<)i@WsLL%)>$xbU7qp*vyo!Smm%eq8v^z!0`l-0^)ozZ9dxR}Pgnek(?Y zpByP|{85Yto^UK_(E`F+XSiz1@j_-f7DdlAG4s@mD&3D^W^2Af*|vL1)d$0>4yUI9fzv<6nkn`6X}c?mfSH=X M)78&qol`;+098V>-T(jq literal 0 HcmV?d00001 diff --git a/src/main/resources/plot.png b/src/main/resources/plot.png new file mode 100644 index 0000000000000000000000000000000000000000..65e75509eb32e1cf67cf20871abd4ef399790572 GIT binary patch literal 1735 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 dB_$