import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class Travelling_SalesmanGUI extends JFrame
{
// background
// anfangsabfrage abbrechen
// button icon
private int anzahlKnoten = 0;
private JButton bSetzeStrassen = null;
private JButton bSetzeKnoten = null;
private JButton bHilfe = null;
private JButton bLoesen = null;
private JLabel lAnzahlKnoten = null;
private boolean knotenModus = false;
private boolean strassenModus = false;
private boolean[][] costMatrix = null;
private ArrayList<JToggleButton> knotenListe = null;
private LineBorder lineDefault = null;
private LineBorder lineGruen = null;
private LineBorder lineBlau = null;
private JLabel lKnotenX = null;
public Travelling_SalesmanGUI() {
setTitle("Travelling Salesman");
int hoehe = Toolkit.getDefaultToolkit().getScreenSize().height - Toolkit.getDefaultToolkit().getScreenSize().height
/ 5;
int breite = Toolkit.getDefaultToolkit().getScreenSize().width - Toolkit.getDefaultToolkit().getScreenSize().width
/ 5;
setBounds(breite / 10, hoehe / 10, breite, hoehe);
getContentPane().setBackground(Color.white);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
final int maxKnoten = 40;
// Setzt die Größe des Arrays anhand der Eingabe
lineDefault = new LineBorder(new Color(122, 138, 152), 1);
lineGruen = new LineBorder(new Color(0, 200, 0), 3);
lineBlau = new LineBorder(new Color(0, 0, 255), 2);
knotenListe = new ArrayList<JToggleButton>();
lAnzahlKnoten = new JLabel(anzahlKnoten + "/" + maxKnoten + "Knoten");
lAnzahlKnoten.setBounds(10, hoehe - 90, 150, 50);
lAnzahlKnoten.setHorizontalAlignment(JLabel.CENTER);
lAnzahlKnoten.setVerticalAlignment(JLabel.CENTER);
lAnzahlKnoten.setFont(new Font("Arial", Font.BOLD, 16));
lAnzahlKnoten.setBorder(new LineBorder(new Color(255, 0, 0), 2));
lAnzahlKnoten.setBackground(new Color(255, 255, 100));
lAnzahlKnoten.setOpaque(true);
lKnotenX = new JLabel(new ImageIcon("knotenX.png"));
lKnotenX.setVisible(false);
bSetzeStrassen = new JButton(new ImageIcon("setzeStrassen.png"));
bSetzeStrassen.setBounds(breite - 117, hoehe - 100, 100, 60);
bSetzeStrassen.setBackground(new Color(190, 255, 255));
bSetzeStrassen.setMnemonic('s');
bSetzeStrassen.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
if (!strassenModus) {
strassenModus = true;
setAllKnoten(true);
bSetzeStrassen.setBorder(lineBlau);
bSetzeKnoten.setEnabled(false);
bLoesen.setEnabled(false);
} else {
bSetzeStrassen.setBorder(lineDefault);
strassenModus = false;
setAllKnoten(false);
if (anzahlKnoten < maxKnoten)
bSetzeKnoten.setEnabled(true);
bLoesen.setEnabled(true);
}
}
});
bSetzeKnoten = new JButton(new ImageIcon("stadt.png"));
bSetzeKnoten.setBounds(breite - 117, hoehe - 170, 100, 60);
bSetzeKnoten.setBackground(new Color(190, 255, 255));
bSetzeKnoten.setMnemonic('k');
bSetzeKnoten.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
if (!knotenModus) {
knotenModus = true;
bSetzeKnoten.setBorder(lineGruen);
bSetzeStrassen.setEnabled(false);
bLoesen.setEnabled(false);
} else {
bSetzeKnoten.setBorder(lineDefault);
knotenModus = false;
bSetzeStrassen.setEnabled(true);
bLoesen.setEnabled(true);
}
}
});
bHilfe = new JButton(new ImageIcon("info.png"));
bHilfe.setBounds(breite - 112, 5, 100, 60);
bHilfe.setBackground(new Color(200, 255, 200));
bHilfe.setMnemonic('i');
bHilfe.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
new Travelling_Salesman_InfoGUI();
}
});
bLoesen = new JButton(new ImageIcon("loesen.png"));
bLoesen.setBounds(5, 5, 100, 60);
bLoesen.setBackground(new Color(255, 231, 186));
bLoesen.setMnemonic('l');
bLoesen.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
}
});
addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent e) {
if (strassenModus) {
} else
if (knotenModus) {
if (!getButtonAt(e.getX() - 45, e.getY() - 65)) {
anzahlKnoten++;
lAnzahlKnoten.setText(anzahlKnoten + "/" + maxKnoten + "Knoten");
RunderButton rund = new RunderButton(new ImageIcon("knoten.png"));
rund.setBounds(e.getX() - 45, e.getY() - 65, 75, 75);
rund.setName(String.valueOf(anzahlKnoten));
rund.setVerticalTextPosition(3);
knotenListe.add(rund);
add(rund);
repaint();
if (anzahlKnoten >= maxKnoten) {
bSetzeKnoten.setBorder(lineDefault);
bSetzeKnoten.setEnabled(false);
knotenModus = false;
bSetzeStrassen.setEnabled(true);
}
} else {
lKnotenX.setBounds(e.getX() - 45, e.getY() - 65, 75, 75);
lKnotenX.setVisible(true);
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
lKnotenX.setVisible(false);
}
}
}
/**
* Kontrolliert ob der zuerstellende Button einen anderen bereits
* existierenden Button überlagert.
*
* @param x
* Die x Koordinate des zuerstellenden Button
* @param y
* Die y Koordinate des zuerstellenden Button
* @return false wenn der zuerstellende Button keinen überlagert, sonst
* true
*/
private boolean getButtonAt(int x, int y) {
boolean ret = false;
for (int i = 0; i < knotenListe.size() && !ret; i++)
if (Math.abs(x - knotenListe.get(i).getX()) <= 80 && Math.abs(x - knotenListe.get(i).getX()) >= 0
&& Math.abs(y - knotenListe.get(i).getY()) <= 80 && Math.abs(y - knotenListe.get(i).getY()) >= 0)
ret = true;
return ret;
}
});
add(bLoesen);
add(bSetzeStrassen);
add(bSetzeKnoten);
add(bHilfe);
add(lAnzahlKnoten);
setVisible(true);
add(lKnotenX);
}
public static void main(String[] args) {
new Travelling_SalesmanGUI();
}
/**
* Setzt alle Knoten in knotenListe entweder aktiv (wenn b true ist) oder
* inaktiv ( wenn b false ist).
*
* @param b
*/
private void setAllKnoten(boolean b) {
JToggleButton t = null;
if (b) {
for (int i = 0; i < knotenListe.size(); i++) {
t = knotenListe.get(i);
t.setSelected(false);
t.setSelectedIcon(new ImageIcon("knotenSelected.png"));
knotenListe.set(i, t);
}
} else{
for (int i = 0; i < knotenListe.size(); i++) {
t = knotenListe.get(i);
t.setSelected(false);
t.setSelectedIcon(null);
knotenListe.set(i, t);
}
}
}
}