1
0
mirror of https://github.com/2martens/uni.git synced 2026-05-07 03:46:25 +02:00

Merge branch 'id'

This commit is contained in:
Jim Martens
2014-05-13 10:52:53 +02:00
11 changed files with 592 additions and 0 deletions

View File

@ -0,0 +1,50 @@
\documentclass[a4paper,10pt]{scrartcl}
% Hier die Nummer des Blatts und Autoren angeben.
\newcommand{\blatt}{4}
\newcommand{\autor}{Florian B\"{o}hm, Christopher Gawehn, Ulrike Geries, Jim Martens}
\usepackage{hci}
\usepackage[utf8]{inputenc}
\usepackage{float}
\usepackage[official]{eurosym}
\begin{document}
% Seitenkopf mit Informationen
\kopf
\renewcommand{\figurename}{Figure}
\aufgabe{3}
\begin{enumerate}
\item Bei dem Pull-Down-Menü ergeben sich folgende Werte:\\
\begin{tabular}{c|c|c|c}
Option & Zieldistanz (in px) & Zielbreite (in px) & ID \\
\hline
Option 1 & 31.6 & 63.2 & 0.6 \\
Option 2 & 42.4 & 28.3 & 1.3 \\
Option 3 & 58.3 & 23.3 & 1.8 \\
Option 4 & 76.2 & 21.8 & 2.2
\end{tabular}
\\\\
Bei dem Pie-Menü ergeben sich folgende Werte:\\
\begin{tabular}{c|c|c|c}
Option & Zieldistanz (in px) & Zielbreite (in px) & ID \\
\hline
Option 1 & 20 & 40 & 0.6 \\
Option 2 & 20 & 40 & 0.6 \\
Option 3 & 20 & 40 & 0.6 \\
Option 4 & 20 & 40 & 0.6
\end{tabular}
\item
Pie-Menüs haben den klaren Vorteil, dass alle Menüelemente gleich weit weg sind vom Mauszeiger. Aufgrund der Kreiseigenschaft ist auch der Index of Difficulty gleich für jedes Element gleich. Außerdem ist das Klicken auf ein falsches Element sehr unwahrscheinlich. Desweiteren sind alle Optionen auf einen Blick sichtbar und es ist kein Scrollen, wie bei einer Liste nötig.
Allerdings haben diese Menüs auch klare Nachteile. So sind sie für viele Optionen ungeeignet, da einzelne Felder sehr klein werden. Optionen mit langer Beschriftung sind somit schwieriger zu implementieren. Abschließend brauchen diese Menüs auch verhältnismäßig viel Platz.
Pie-Menüs können sinnvoll verwendet werden bei Menüs in Konsolenspielen, die mit einem Controller bedient werden. Ein anderes sinnvolles Szenario sind Entscheidungssituationen, in denen mehr als zwei exklusive Optionen (mutually exclusive) vorhanden sind.
Weniger gut können diese Menüs bei der normalen Menüführung in Desktopanwendungen benutzt werden.
\end{enumerate}
\end{document}

View File

@ -0,0 +1,64 @@
import javax.swing.JFrame;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Controller {
private Temperature _temperature;
private UserInterface _ui;
private JFrame _frame;
public Controller() {
_temperature = new Temperature();
_ui = new UserInterface(this);
_frame = _ui.getUIFrame();
_temperature.addObserver(_ui);
_ui.initGUI();
registriereUIAktionen();
_ui.zeigeFenster();
}
private void registriereUIAktionen() {
_ui.getCelsius().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
_ui.getCelsiusSlider().setValue(Integer.valueOf(_ui.getCelsius().getText()));
}
});
_ui.getCelsiusSlider().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
int celsius = _ui.getCelsiusSlider().getValue();
_ui.getCelsius().setText(Integer.toString(celsius));
}
});
_ui.getFahrenheit().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
_ui.getFahrenheitSlider().setValue(Integer.valueOf(_ui.getFahrenheit().getText()));
}
});
_ui.getFahrenheitSlider().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
int fahrenheit = _ui.getFahrenheitSlider().getValue();
_ui.getFahrenheit().setText(Integer.toString(fahrenheit));
}
});
_ui.getCelsiusButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int celsius = _ui.getCelsiusSlider().getValue();
_temperature.setCelsiusTemperature(celsius);
}
});
_ui.getFahrenheitButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int fahrenheit = _ui.getFahrenheitSlider().getValue();
_temperature.setFahrenheitTemperature(fahrenheit);
}
});
}
}

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: Main

View File

@ -0,0 +1,27 @@
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Main {
public static void main(String[] argv) {
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager
.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException | InstantiationException
| IllegalAccessException
| UnsupportedLookAndFeelException e)
{
e.printStackTrace();
}
new Controller();
}
});
}
}

View File

@ -0,0 +1,41 @@
import java.util.Observable;
public class Temperature extends Observable {
private int _celsius;
private int _fahrenheit;
public Temperature() {
_celsius = 0;
_fahrenheit = 32;
}
public int getCelsiusTemperature() {
return _celsius;
}
public int getFahrenheitTemperature() {
return _fahrenheit;
}
public void setCelsiusTemperature(int celsius) {
_celsius = celsius;
_fahrenheit = convertToFahrenheit(_celsius);
setChanged();
notifyObservers();
}
public void setFahrenheitTemperature(int fahrenheit) {
_fahrenheit = fahrenheit;
_celsius = convertToCelsius(fahrenheit);
setChanged();
notifyObservers();
}
private int convertToFahrenheit(int celsius) {
return Math.round(1.8f * celsius + 32);
}
private int convertToCelsius(int fahrenheit) {
return Math.round(5.0f / 9.0f * (fahrenheit - 32));
}
}

View File

@ -0,0 +1,157 @@
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import java.util.Observer;
import java.util.Observable;
class UserInterface implements Observer {
public static final String NAME = "Temperature converter";
private Controller _controller;
private JFrame __frame;
private JPanel __panel;
private JTextField __celsius;
private JTextField __fahrenheit;
private JSlider __celsiusSlider;
private JSlider __fahrenheitSlider;
private JButton __convertCelsiusButton;
private JButton __convertFahrenheitButton;
private GridLayout __layout;
private static final int CELSIUS_MIN = -18;
private static final int CELSIUS_MAX = 100;
private static final int CELSIUS_INIT = 0;
private static final int FAHRENHEIT_MIN = 0;
private static final int FAHRENHEIT_MAX = 212;
private static final int FAHRENHEIT_INIT = 32;
public UserInterface(Controller controller) {
_controller = controller;
__frame = new JFrame();
__frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
__frame.setTitle(NAME);
}
public void update(Observable o, Object arg) {
if (o instanceof Temperature) {
Temperature temperature = (Temperature) o;
int celsius = temperature.getCelsiusTemperature();
int fahrenheit = temperature.getFahrenheitTemperature();
__celsius.setText(Integer.toString(celsius));
__celsiusSlider.setValue(celsius);
__fahrenheit.setText(Integer.toString(fahrenheit));
__fahrenheitSlider.setValue(fahrenheit);
}
}
public void initGUI() {
__panel = new JPanel();
__layout = new GridLayout(1, 3);
__panel.setLayout(__layout);
JPanel celsiusPanel = new JPanel();
BoxLayout boxLayoutCelsius = new BoxLayout(celsiusPanel, BoxLayout.Y_AXIS);
celsiusPanel.setLayout(boxLayoutCelsius);
__celsius = new JTextField();
__celsius.setText(Integer.toString(CELSIUS_INIT));
__celsiusSlider = new JSlider(JSlider.VERTICAL, CELSIUS_MIN, CELSIUS_MAX, CELSIUS_INIT);
celsiusPanel.add(__celsius);
celsiusPanel.add(__celsiusSlider);
celsiusPanel.add(new JLabel("Celsius"));
JPanel fahrenheitPanel = new JPanel();
BoxLayout boxLayoutFahrenheit = new BoxLayout(fahrenheitPanel, BoxLayout.Y_AXIS);
fahrenheitPanel.setLayout(boxLayoutFahrenheit);
__fahrenheit = new JTextField();
__fahrenheit.setText(Integer.toString(FAHRENHEIT_INIT));
__fahrenheitSlider = new JSlider(JSlider.VERTICAL, FAHRENHEIT_MIN, FAHRENHEIT_MAX, FAHRENHEIT_INIT);
fahrenheitPanel.add(__fahrenheit);
fahrenheitPanel.add(__fahrenheitSlider);
fahrenheitPanel.add(new JLabel("Fahrenheit"));
JPanel middlePanel = new JPanel();
middlePanel.setLayout(new BoxLayout(middlePanel, BoxLayout.Y_AXIS));
__convertCelsiusButton = new JButton("Convert to Fahrenheit");
__convertFahrenheitButton = new JButton("Convert to Celsius");
middlePanel.add(__convertCelsiusButton);
middlePanel.add(__convertFahrenheitButton);
__panel.add(celsiusPanel);
__panel.add(middlePanel);
__panel.add(fahrenheitPanel);
__frame.getContentPane().add(__panel, BorderLayout.CENTER);
__frame.pack();
}
/**
* Gibt das JFrame der UI zurück.
*
* @return Das JFrame der UI.
*/
public JFrame getUIFrame()
{
return __frame;
}
/**
* Zeigt das Hauptfenster an.
*/
public void zeigeFenster()
{
__frame.setLocationRelativeTo(null);
__frame.setVisible(true);
}
/**
* Schließt das Fenster.
*/
public void schliesseFenster()
{
__frame.dispose();
}
public JTextField getCelsius() {
return __celsius;
}
public JTextField getFahrenheit() {
return __fahrenheit;
}
public JSlider getCelsiusSlider() {
return __celsiusSlider;
}
public JSlider getFahrenheitSlider() {
return __fahrenheitSlider;
}
public JButton getCelsiusButton() {
return __convertCelsiusButton;
}
public JButton getFahrenheitButton() {
return __convertFahrenheitButton;
}
/**
* Aktualisiert das Layout.
*/
private void aktualisiereLayout()
{
__frame.validate();
}
}

View File

@ -0,0 +1,69 @@
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class HauptWerkzeug {
private Umrechner __rechner;
private HauptWerkzeugUI __ui;
private JFrame __frame;
public HauptWerkzeug(Umrechner rechner) {
__rechner = rechner;
__ui = new HauptWerkzeugUI();
__frame = __ui.getUIFrame();
__ui.initGUI();
registriereUIAktionen();
__ui.zeigeFenster();
}
private void registriereUIAktionen() {
__ui.getCelsius().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
__ui.getCelsiusSlider().setValue(Integer.valueOf(__ui.getCelsius().getText()));
}
});
__ui.getCelsiusSlider().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
int celsius = __ui.getCelsiusSlider().getValue();
__ui.getCelsius().setText(Integer.toString(celsius));
}
});
__ui.getFahrenheit().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
__ui.getFahrenheitSlider().setValue(Integer.valueOf(__ui.getFahrenheit().getText()));
}
});
__ui.getFahrenheitSlider().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
int fahrenheit = __ui.getFahrenheitSlider().getValue();
__ui.getFahrenheit().setText(Integer.toString(fahrenheit));
}
});
__ui.getCelsiusButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int celsius = __ui.getCelsiusSlider().getValue();
int fahrenheit = __rechner.convertToFahrenheit(celsius);
__ui.getFahrenheitSlider().setValue(fahrenheit);
__ui.getFahrenheit().setText(Integer.toString(fahrenheit));
}
});
__ui.getFahrenheitButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int fahrenheit = __ui.getFahrenheitSlider().getValue();
int celsius = __rechner.convertToCelsius(fahrenheit);
__ui.getCelsiusSlider().setValue(celsius);
__ui.getCelsius().setText(Integer.toString(celsius));
}
});
}
}

View File

@ -0,0 +1,140 @@
import java.awt.GridLayout;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
class HauptWerkzeugUI {
public static final String NAME = "Temperature converter";
private JFrame __frame;
private JPanel __panel;
private JTextField __celsius;
private JTextField __fahrenheit;
private JSlider __celsiusSlider;
private JSlider __fahrenheitSlider;
private JButton __convertCelsiusButton;
private JButton __convertFahrenheitButton;
private GridLayout __layout;
private static final int CELSIUS_MIN = -18;
private static final int CELSIUS_MAX = 100;
private static final int CELSIUS_INIT = 0;
private static final int FAHRENHEIT_MIN = 0;
private static final int FAHRENHEIT_MAX = 212;
private static final int FAHRENHEIT_INIT = 32;
public HauptWerkzeugUI() {
__frame = new JFrame();
__frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
__frame.setTitle(NAME);
}
public void initGUI() {
__panel = new JPanel();
__layout = new GridLayout(1, 3);
__panel.setLayout(__layout);
JPanel celsiusPanel = new JPanel();
BoxLayout boxLayoutCelsius = new BoxLayout(celsiusPanel, BoxLayout.Y_AXIS);
celsiusPanel.setLayout(boxLayoutCelsius);
__celsius = new JTextField();
__celsius.setText(Integer.toString(CELSIUS_INIT));
__celsiusSlider = new JSlider(JSlider.VERTICAL, CELSIUS_MIN, CELSIUS_MAX, CELSIUS_INIT);
celsiusPanel.add(__celsius);
celsiusPanel.add(__celsiusSlider);
celsiusPanel.add(new JLabel("Celsius"));
JPanel fahrenheitPanel = new JPanel();
BoxLayout boxLayoutFahrenheit = new BoxLayout(fahrenheitPanel, BoxLayout.Y_AXIS);
fahrenheitPanel.setLayout(boxLayoutFahrenheit);
__fahrenheit = new JTextField();
__fahrenheit.setText(Integer.toString(FAHRENHEIT_INIT));
__fahrenheitSlider = new JSlider(JSlider.VERTICAL, FAHRENHEIT_MIN, FAHRENHEIT_MAX, FAHRENHEIT_INIT);
fahrenheitPanel.add(__fahrenheit);
fahrenheitPanel.add(__fahrenheitSlider);
fahrenheitPanel.add(new JLabel("Fahrenheit"));
JPanel middlePanel = new JPanel();
middlePanel.setLayout(new BoxLayout(middlePanel, BoxLayout.Y_AXIS));
__convertCelsiusButton = new JButton("Convert to Fahrenheit");
__convertFahrenheitButton = new JButton("Convert to Celsius");
middlePanel.add(__convertCelsiusButton);
middlePanel.add(__convertFahrenheitButton);
__panel.add(celsiusPanel);
__panel.add(middlePanel);
__panel.add(fahrenheitPanel);
__frame.getContentPane().add(__panel, BorderLayout.CENTER);
__frame.pack();
}
/**
* Gibt das JFrame der UI zurück.
*
* @return Das JFrame der UI.
*/
public JFrame getUIFrame()
{
return __frame;
}
/**
* Zeigt das Hauptfenster an.
*/
public void zeigeFenster()
{
__frame.setLocationRelativeTo(null);
__frame.setVisible(true);
}
/**
* Schließt das Fenster.
*/
public void schliesseFenster()
{
__frame.dispose();
}
public JTextField getCelsius() {
return __celsius;
}
public JTextField getFahrenheit() {
return __fahrenheit;
}
public JSlider getCelsiusSlider() {
return __celsiusSlider;
}
public JSlider getFahrenheitSlider() {
return __fahrenheitSlider;
}
public JButton getCelsiusButton() {
return __convertCelsiusButton;
}
public JButton getFahrenheitButton() {
return __convertFahrenheitButton;
}
/**
* Aktualisiert das Layout.
*/
private void aktualisiereLayout()
{
__frame.validate();
}
}

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: Main

View File

@ -0,0 +1,28 @@
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Main {
public static void main(String[] argv) {
final Umrechner rechner = new Umrechner();
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
UIManager.setLookAndFeel(UIManager
.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException | InstantiationException
| IllegalAccessException
| UnsupportedLookAndFeelException e)
{
e.printStackTrace();
}
new HauptWerkzeug(rechner);
}
});
}
}

View File

@ -0,0 +1,10 @@
public class Umrechner {
public int convertToCelsius(int fahrenheit) {
return Math.round(5.0f / 9.0f * (fahrenheit - 32));
}
public int convertToFahrenheit(int celsius) {
return Math.round(1.8f * celsius + 32);
}
}