import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
public class GUI {
// Klasa wyswietlajaca cale GUI, nie rysuje symulacji
// 28 kwietnia-dodano listenera do "uruchom symulacje"---linijka 486-500
// 28 kwietnia-zamiana modyfikatora symulacji na final---linijka 441
// 29 kwietnia-Symulacja wy�wietlanie informacji panel---linijka 443
// Deklaracja zmiennych oraz stalych uzywanych globalnie w gui
JFrame mainframe;
JPanel opispanel;
JPanel ustawieniapanel;
JPanel symulacja_panel;
JMenuBar mb;
JTabbedPane tabpane;
FileLoader loader = new FileLoader();
String file_name="mhj.ust";
int wybor=1;
String[] algorithm_list = new String[4];
protected static final int fwidth = 1000;
protected static final int fheight = 750;
boolean accepted_settings = false;
Planeta lista_planet[] = new Planeta[5];
public GUI() {
//
Image ship = null;
try {
ship = ImageIO.read(new File("ship.jpg"));
} catch (IOException e1) {
}
mainframe = new JFrame();
mainframe.setSize(fwidth, fheight);
mainframe.setResizable(false);
mainframe.setTitle("Symulacja lotu statku kosmicznego");
mainframe.setIconImage(ship);
opispanel = new JPanel();
ustawieniapanel = new JPanel();
symulacja_panel = new JPanel();
tabpane = new JTabbedPane();
GridBagLayout gbl = new GridBagLayout();
algorithm_list[0] = "Metoda Hooka-Jeevesa"; // Odpowiada za ni� Anna
// Tomaszewska
algorithm_list[1] = "Metoda Newtona"; // Odpowiada za ni� Bartosz
// Wyspia�ski
algorithm_list[2] = "Metoda Neldera i Maeda"; // Odpowiada za ni� Damian
// Popadycz
algorithm_list[3] = "Bez metody optymalizacji";
// OPIS
opispanel.setBackground(Color.white);
// Tworzenie EditorPane
JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
java.net.URL helpURL = GUI.class.getResource("opis.html");
if (helpURL != null) {
try {
editorPane.setPage(helpURL);
} catch (IOException e) {
System.err.println("Attempted to read a bad URL: " + helpURL);
}
} else {
System.err.println("Couldn't find file: TextSamplerDemoHelp.html");
}
// Wklada EditorPane do JScrollPane
JScrollPane editorScrollPane = new JScrollPane(editorPane);
editorScrollPane
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
editorScrollPane.setPreferredSize(new Dimension(1000, 750));
editorScrollPane.setMinimumSize(new Dimension(10, 10));
//
opispanel.add(editorScrollPane);
tabpane.addTab("Opis", null, opispanel, "Opis");
tabpane.setMnemonicAt(0, KeyEvent.VK_1);
// USTAWIENIA
ustawieniapanel.setLayout(gbl);
ustawieniapanel.setBackground(Color.white);
// DEKLARACJA ELEMENTOW GUI DLA USTAWIEN
JLabel algorithm_label = new JLabel("Wybierz metod� optymalizacji: ");
JLabel planeta1_label = new JLabel("Planeta nr1");
JLabel planeta2_label = new JLabel("Planeta nr2");
JLabel planeta3_label = new JLabel("Planeta nr3");
JLabel planeta4_label = new JLabel("Planeta nr4");
JLabel planeta5_label = new JLabel("Planeta nr5");
//
JLabel x_label = new JLabel("Wsp. X");
JLabel y_label = new JLabel("Wsp. Y");
JLabel m_label = new JLabel("Masa");
//
final JTextField planeta1_x = new JTextField("", 30);
final JTextField planeta1_y = new JTextField("", 30);
final JTextField planeta1_m = new JTextField("", 30);
//
final JTextField planeta2_x = new JTextField("", 30);
final JTextField planeta2_y = new JTextField("", 30);
final JTextField planeta2_m = new JTextField("", 30);
//
final JTextField planeta3_x = new JTextField("", 30);
final JTextField planeta3_y = new JTextField("", 30);
final JTextField planeta3_m = new JTextField("", 30);
//
final JTextField planeta4_x = new JTextField("", 30);
final JTextField planeta4_y = new JTextField("", 30);
final JTextField planeta4_m = new JTextField("", 30);
//
final JTextField planeta5_x = new JTextField("", 30);
final JTextField planeta5_y = new JTextField("", 30);
final JTextField planeta5_m = new JTextField("", 30);
//
JLabel statek_m_label = new JLabel("Masa statku");
final JTextField statek_m = new JTextField("", 30);
//
JLabel statek_v_label = new JLabel("Predkosc poczatkowa");
final JTextField statek_v = new JTextField("", 30);
//
statek_m.setEditable(false);
statek_v.setEditable(false);
//
JLabel stala_grawitacji_label = new JLabel("Stala grawitacji");
JTextField stala_grawitacji = new JTextField("", 30);
stala_grawitacji.setText("" + Silnik.G);
//
JLabel cel_label = new JLabel("Cel");
JLabel cel_x_label = new JLabel("Wsp. X");
JLabel cel_y_label = new JLabel("Wsp. Y");
final JTextField cel_x = new JTextField("", 30);
final JTextField cel_y = new JTextField("", 30);
//
JButton accept_settings = new JButton("Zaakceptuj ustawienia");
//
accept_settings.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
accepted_settings = true;
lista_planet[0] = new Planeta(Integer.parseInt(planeta1_x
.getText()), Integer.parseInt(planeta1_y.getText()),
Double.parseDouble(planeta1_m.getText()));
lista_planet[1] = new Planeta(Integer.parseInt(planeta2_x
.getText()), Integer.parseInt(planeta2_y.getText()),
Double.parseDouble(planeta2_m.getText()));
lista_planet[2] = new Planeta(Integer.parseInt(planeta3_x
.getText()), Integer.parseInt(planeta3_y.getText()),
Double.parseDouble(planeta3_m.getText()));
lista_planet[3] = new Planeta(Integer.parseInt(planeta4_x
.getText()), Integer.parseInt(planeta4_y.getText()),
Double.parseDouble(planeta4_m.getText()));
lista_planet[4] = new Planeta(Integer.parseInt(planeta5_x
.getText()), Integer.parseInt(planeta5_y.getText()),
Double.parseDouble(planeta5_m.getText()));
Punkt punkt = new Punkt(Integer.parseInt(cel_x.getText()),
Integer.parseInt(cel_y.getText()));
Silnik.acceptSettings(punkt, 0, 0);
symulacja_panel.updateUI();
}
});
//
JButton load_default_settings = new JButton(
"Wczytaj domyslne ustawienia dla problemu");
load_default_settings.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loader.loadFile(file_name);
//
planeta1_x.setText(loader.planeta1_x);
planeta1_y.setText(loader.planeta1_y);
planeta1_m.setText(loader.planeta1_m);
//
planeta2_x.setText(loader.planeta2_x);
planeta2_y.setText(loader.planeta2_y);
planeta2_m.setText(loader.planeta2_m);
//
planeta3_x.setText(loader.planeta3_x);
planeta3_y.setText(loader.planeta3_y);
planeta3_m.setText(loader.planeta3_m);
//
planeta4_x.setText(loader.planeta4_x);
planeta4_y.setText(loader.planeta4_y);
planeta4_m.setText(loader.planeta4_m);
//
planeta5_x.setText(loader.planeta5_x);
planeta5_y.setText(loader.planeta5_y);
planeta5_m.setText(loader.planeta5_m);
//
cel_x.setText(loader.cel_x);
cel_y.setText(loader.cel_y);
//
statek_m.setText(loader.statek_m);
statek_v.setText(loader.statek_v);
//
}
});
final JComboBox algorithm_box = new JComboBox(algorithm_list);
algorithm_box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String choose = (String) algorithm_box.getSelectedItem();
if (choose.equals("Metoda Hooka-Jeevesa")) {
wybor=1;
file_name="mhj.ust";
} else {
if (choose.equals("Metoda Newtona")) {
wybor=2;
file_name="mne.ust";
} else if (choose.equals("Metoda Neldera i Maeda")) {
wybor=3;
file_name="mnm.ust";
} else {
wybor=4;
}
}
}
});
// DODAWANIE ELEMENTOW DO PANELU PRZY URZYCIU GRID_BAG_LAYOUT
GridBagConstraints gbcu = new GridBagConstraints();
gbcu.weightx = 111;
gbcu.weighty = 53;
//
gbcu.gridwidth = 1;
gbcu.gridheight = 1;
//
gbcu.gridx = 0;
gbcu.gridy = 0;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(algorithm_label, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 0;
ustawieniapanel.add(algorithm_box, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 1;
ustawieniapanel.add(x_label, gbcu);
//
gbcu.gridx = 2;
gbcu.gridy = 1;
ustawieniapanel.add(y_label, gbcu);
//
gbcu.gridx = 3;
gbcu.gridy = 1;
ustawieniapanel.add(m_label, gbcu);
//
gbcu.gridx = 4;
gbcu.gridy = 1;
ustawieniapanel.add(statek_m_label, gbcu);
//
gbcu.gridx = 6;
gbcu.gridy = 1;
ustawieniapanel.add(cel_x_label, gbcu);
//
gbcu.gridx = 7;
gbcu.gridy = 1;
ustawieniapanel.add(cel_y_label, gbcu);
//
gbcu.gridx = 0;
gbcu.gridy = 2;
ustawieniapanel.add(planeta1_label, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta1_x, gbcu);
//
gbcu.gridx = 2;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta1_y, gbcu);
//
gbcu.gridx = 3;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta1_m, gbcu);
//
gbcu.gridx = 4;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(statek_m, gbcu);
//
gbcu.gridx = 5;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(cel_label, gbcu);
//
gbcu.gridx = 6;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(cel_x, gbcu);
//
gbcu.gridx = 7;
gbcu.gridy = 2;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(cel_y, gbcu);
//
gbcu.gridx = 0;
gbcu.gridy = 3;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(planeta2_label, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 3;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta2_x, gbcu);
//
gbcu.gridx = 2;
gbcu.gridy = 3;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta2_y, gbcu);
//
gbcu.gridx = 3;
gbcu.gridy = 3;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta2_m, gbcu);
//
gbcu.gridx = 4;
gbcu.gridy = 3;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(statek_v_label, gbcu);
//
gbcu.gridx = 0;
gbcu.gridy = 4;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(planeta3_label, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 4;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta3_x, gbcu);
//
gbcu.gridx = 2;
gbcu.gridy = 4;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta3_y, gbcu);
//
gbcu.gridx = 3;
gbcu.gridy = 4;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta3_m, gbcu);
//
gbcu.gridx = 4;
gbcu.gridy = 4;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(statek_v, gbcu);
//
gbcu.gridx = 0;
gbcu.gridy = 5;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(planeta4_label, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 5;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta4_x, gbcu);
//
gbcu.gridx = 2;
gbcu.gridy = 5;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta4_y, gbcu);
//
gbcu.gridx = 3;
gbcu.gridy = 5;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta4_m, gbcu);
//
gbcu.gridx = 4;
gbcu.gridy = 5;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(stala_grawitacji_label, gbcu);
//
gbcu.gridx = 0;
gbcu.gridy = 6;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(planeta5_label, gbcu);
//
gbcu.gridx = 1;
gbcu.gridy = 6;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta5_x, gbcu);
//
gbcu.gridx = 2;
gbcu.gridy = 6;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta5_y, gbcu);
//
gbcu.gridx = 3;
gbcu.gridy = 6;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(planeta5_m, gbcu);
//
gbcu.gridx = 4;
gbcu.gridy = 6;
gbcu.fill = GridBagConstraints.HORIZONTAL;
ustawieniapanel.add(stala_grawitacji, gbcu);
//
gbcu.gridwidth = 2;
gbcu.gridheight = 2;
gbcu.gridx = 0;
gbcu.gridy = 13;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(load_default_settings, gbcu);
gbcu.gridx = 3;
gbcu.gridy = 13;
gbcu.fill = GridBagConstraints.NONE;
ustawieniapanel.add(accept_settings, gbcu);
//
tabpane.addTab("Ustawienia", null, ustawieniapanel, "Ustawienia");
tabpane.setMnemonicAt(0, KeyEvent.VK_2);
// SYMULACJA
symulacja_panel.setLayout(gbl);
final Symulacja symulacja = new Symulacja(lista_planet);
JPanel symulacja_sysout = new JPanel();
symulacja_sysout.setSize(300, 750);
symulacja_sysout.setMinimumSize(new Dimension(300, 750));
symulacja_sysout.setMaximumSize(new Dimension(300, 750));
// border
TitledBorder title;
Border blackline = BorderFactory.createLineBorder(Color.black);
title = BorderFactory.createTitledBorder(blackline, "Status");
title.setTitleJustification(TitledBorder.CENTER);
symulacja_sysout.setBorder(title);
//
Sysout sysout = new Sysout();
final Clock clock = new Clock();
symulacja_sysout.setLayout(gbl);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 1;
c.insets = new Insets(0, 0, 20, 15);
symulacja_sysout.add(sysout, c);
c.gridx = 0;
c.gridy = 0;
symulacja_sysout.add(clock, c);
GridBagConstraints gbcs = new GridBagConstraints();
//
gbcs.gridx = 0;
gbcs.gridy = 0;
symulacja_panel.add(symulacja, gbcs);
//
gbcs.gridx = 1;
gbcs.gridy = 0;
symulacja_panel.add(symulacja_sysout, gbcs);
//
tabpane.addTab("Symulacja", null, symulacja_panel, "Symulacja");
tabpane.setMnemonicAt(0, KeyEvent.VK_3);
//
// MENU GORNE
mb = new JMenuBar();
JMenu oMenu = new JMenu("Opcje");
JMenuItem sMenu = new JMenuItem("Uruchom symulacje", new ImageIcon(
"play.png"));
sMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (accepted_settings) {
if(wybor==4){
JOptionPane pane = new JOptionPane();
long mass = Long.parseLong(pane.showInputDialog("Podaj mase najblizszej planety"));
double kat = Double.parseDouble(pane.showInputDialog("Podaj Kat wystrzalu"));
}
symulacja.zmienWybor(wybor);
symulacja.stara_lista = null;
symulacja.watek.stop();
symulacja.watek = new Thread(symulacja, "MSID Sim");
symulacja.repaint();
symulacja.startSim();
clock.time = 0;
clock.odleglosc = 0;
clock.checkpointC = 0;
clock.odleglosc_od_pkt = 0;
clock.watek.stop();
clock.watek = new Thread(clock, "MSID Sim");
clock.watek.start();
} else {
JOptionPane op = new JOptionPane();
op.showMessageDialog(null, "Brak zaakceptowanych ustawien",
"Blad", JOptionPane.ERROR_MESSAGE);
}
}
});
JMenuItem hMenu = new JMenuItem("Pomoc");
hMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
HellpWindow h = new HellpWindow();
}
});
JMenuItem htmlMenu = new JMenuItem("Zapisz raport w pliku HTML");
htmlMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
JMenuItem zMenu = new JMenuItem("Zamknij");
zMenu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
oMenu.add(hMenu);
oMenu.add(htmlMenu);
oMenu.add(zMenu);
mb.add(oMenu);
mb.add(sMenu);
// USTAWIENIA KONCOWE
mainframe.add(mb, BorderLayout.NORTH);
mainframe.add(tabpane, BorderLayout.CENTER);
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainframe.setVisible(true);
}
// Metoda nic nie robiaca.
public void doMe() {
}
}