Also ich habe ein Problem mit dem Layout von meinem Launcher (für ein Onlinegame). Es sah mal ordentlich aus aber jetzt...
Naja ich zeigs euch mal. So soll es aussehen:
und so sieht es aus:
und das Passwort-Feld ist auch ein fail...
und hier sind die Klassen die die ganze GUI erstellen und die Hauptfensterklasse. (Ich frage nach einer Lösung nicht nach Kritik zu meinem Programmierstil...)
MainWindow.class:
GUI.class:
LauncherGUI.class (Hier habe ich die verschiedenen "Pages" gespeichert):
ButtonHandler.class:
Ich freue mich auf eure Hilfe :toll:. Ich verzweifel echt ;(
Naja ich zeigs euch mal. So soll es aussehen:

und so sieht es aus:

und das Passwort-Feld ist auch ein fail...

und hier sind die Klassen die die ganze GUI erstellen und die Hauptfensterklasse. (Ich frage nach einer Lösung nicht nach Kritik zu meinem Programmierstil...)
MainWindow.class:
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class MainWindow extends JFrame implements WindowListener, MouseListener, MouseMotionListener, Runnable {
// Serial Version ID
private static final long serialVersionUID = -3880026026104218593L;
// globale Variablen
int x, y; // Position des Fensters
int width=700, height=600; // Breite und Höhe des Fensters
int mouseX=0, mouseY=0; // Variablen für Mausposition
boolean mouseDown;
String trenner=System.getProperty("file.separator");
String lineSep=System.getProperty("line.separator");
String userDir;
ImageHandler imgHandler=new ImageHandler(this);
ButtonHandler buttonHandler=new ButtonHandler(this, imgHandler);
GUI gui=new GUI(this, imgHandler, buttonHandler, this.getGraphics());
Initialize init;
// Login-Variablen
Login login;
String session;
Container cont=getContentPane();
// Konstruktor-Methode
public MainWindow() {
// Verzeichnis laden
try {
BufferedReader reader=new BufferedReader(new FileReader(new File("path.txt")));
userDir=reader.readLine();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Die Datei path.txt ist nicht vorhanden!", "Fehler!", JOptionPane.ERROR_MESSAGE);
try {
new Download(this).downloadFile(new URI("http://localhost/ef/mail_error.php?error="+e.getStackTrace()), false);
} catch (URISyntaxException e1) {
e.printStackTrace();
}
int returnVal=JOptionPane.showConfirmDialog(null, "Möchtest du diese Datei erstellen? (Achtung: Nur Ja drücken wenn du die .jar Datei direkt ausführst!)", "Datei erstellen?", JOptionPane.YES_NO_OPTION);
if(returnVal==JOptionPane.NO_OPTION) {
System.exit(-1);
}
else {
try {
userDir=System.getProperty("user.dir");
OutputStream out=new FileOutputStream(new File("path.txt"));
byte[] buffer = userDir.getBytes();
out.write(buffer, 0, userDir.length());
out.close();
} catch (IOException e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "Datei konnte nicht erstellt werden!", "Fehler!", JOptionPane.ERROR_MESSAGE);
System.exit(-1);
}
}
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Die Datei path.txt ist fehlerhaft!", "Fehler!", JOptionPane.ERROR_MESSAGE);
try {
new Download(this).downloadFile(new URI("http://localhost/ef/mail_error.php?error="+e.getStackTrace()), false);
} catch (URISyntaxException e1) {
e.printStackTrace();
}
System.exit(-1);
}
// hinzufügen von Listenern
this.addWindowListener(this);
this.addMouseListener(this);
this.addMouseMotionListener(this);
// Thread starten
Thread thread=new Thread(this);
thread.start();
gui.repaint();
}
// Initialisierung des Fensters (sichtbar machen, Größe festlegen, etc.)
public void initialize() {
// Fenster sichtbar machen
this.setVisible(true);
// Fenstergröße festlegen
this.setSize(width, height);
// Titel festlegen
BufferedReader reader=null;
try {
reader=new BufferedReader(new FileReader(new File(userDir+trenner+"version.txt")));
this.setTitle("Elementar Fighters V"+reader.readLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// Icon laden
String path=userDir+trenner+"img"+trenner+"logo.ico";
Image icon=Toolkit.getDefaultToolkit().getImage(path);
this.setIconImage(icon);
// mittlere Bildschirmposition erfassen und Fenster dort positionieren
x=(int) this.getToolkit().getScreenSize().getWidth()/2-width/2;
y=(int) this.getToolkit().getScreenSize().getHeight()/2-height/2;
this.setLocation(x, y);
this.setResizable(false);
}
public Dimension getScrSize() {
return this.getToolkit().getScreenSize();
}
public void destroyContent() {
buttonHandler.buttons=new MenuButton[100];
imgHandler.images=new ImageObject[100];
gui.cont=new Container();
}
// WindowListener-Funktionen
public void windowActivated(WindowEvent evt) {
}
public void windowClosed(WindowEvent evt) {
}
public void windowClosing(WindowEvent evt) { // Beim drücken auf "X" oder drücken von Alt+F4 o.ä. Programm beenden
this.dispose();
System.exit(0);
}
public void windowDeactivated(WindowEvent evt) {
}
public void windowDeiconified(WindowEvent evt) {
}
public void windowIconified(WindowEvent evt) {
}
public void windowOpened(WindowEvent evt) {
}
// MouseMotionListener-Funktionen
public void mouseDragged(MouseEvent evt) { // Falls die Maus gezogen wird Position erfassen und speichern
mouseX=evt.getX();
mouseY=evt.getY();
}
public void mouseMoved(MouseEvent evt) { // Falls die Maus bewegt wird Position erfassen und speichern
mouseX=evt.getX();
mouseY=evt.getY();
}
// MouseListener-Funktionen
public void mouseClicked(MouseEvent evt) {
try {
for(int i=0;i<buttonHandler.maxObjects;i++) {
int imgNum=buttonHandler.getButton(i).getImgNum();
if(mouseX>=imgHandler.getImageObject(imgNum).getX() && mouseY>=imgHandler.getImageObject(imgNum).getY() && mouseX<buttonHandler.getButton(i).getWidth()+imgHandler.getImageObject(imgNum).getX() && mouseY<buttonHandler.getButton(i).getHeight()+imgHandler.getImageObject(imgNum).getY()) {
post(buttonHandler.getButton(i).getAction());
}
}
} catch(NullPointerException e) {
}
}
private void post(String action) {
if(action.equals("Login")) {
gui.setActual("logging in");
login=new Login(this, imgHandler, gui.launch.username, gui.launch.password);
gui.launch.username=null;
gui.launch.password=null;
}
if(action.equals("Nochmal_versuchen")) {
gui.setActual("startLauncher");
}
}
public void mouseEntered(MouseEvent evt) {
}
public void mouseExited(MouseEvent evt) {
}
public void mousePressed(MouseEvent evt) {
mouseDown = true;
}
public void mouseReleased(MouseEvent evt) {
mouseDown = false;
}
public void run() {
int winState = this.getExtendedState();
for(;;) {
if(winState!=this.getExtendedState()) {
gui.repaint();
}
winState = this.getExtendedState();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void paint(Graphics g) {
for (int i=0; i<imgHandler.maxObjects; i++) {
try {
if (imgHandler.images[i].getVisible()==true && !imgHandler.images[i].button) {
g.drawImage(imgHandler.images[i].getImage(), imgHandler.images[i].getX(), imgHandler.images[i].getY(), this);
}
} catch (NullPointerException e) {
}
}
}
}
GUI.class:
Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
public class GUI {
//globale Variablen
MainWindow win;
ImageHandler imgHandler;
ButtonHandler buttonHandler;
Graphics g;
Container cont;
String actual="startLauncher";
LauncherGUI launch;
GameGUI game;
public GUI(MainWindow win, ImageHandler imgHandler, ButtonHandler buttonHandler, Graphics g) {
this.win=win;
this.imgHandler=imgHandler;
this.buttonHandler=buttonHandler;
this.g=g;
this.cont=win.cont;
launch=new LauncherGUI(win, imgHandler, buttonHandler, this);
game=new GameGUI(win, imgHandler, buttonHandler, this);
}
public void repaint() {
if(actual.equals("startLauncher")) {
launch.startLauncher();
}
if(actual.equals("logging in")) {
launch.loggingIn();
}
if(actual.equals("login failed")) {
launch.loginFailed();
}
if(actual.equals("login succesful")) {
launch.loginSuccess();
}
if(actual.equals("game loading")) {
game.loading();
}
if(actual.equals("main menu")) {
game.mainMenu();
}
win.repaint();
win.setBackground(Color.WHITE);
win.setContentPane(win.cont);
}
public void setActual(String actual) {
this.actual=actual;
repaint();
}
}
LauncherGUI.class (Hier habe ich die verschiedenen "Pages" gespeichert):
Java:
import java.io.File;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LauncherGUI {
//globale Variablen
MainWindow win;
ImageHandler imgHandler;
ButtonHandler buttonHandler;
GUI gui;
String normImg;
String hoverImg;
String activeImg;
JTextField username;
JPasswordField password;
News news;
public LauncherGUI(MainWindow win, ImageHandler imgHandler, ButtonHandler buttonHandler, GUI gui) {
this.win=win;
this.imgHandler=imgHandler;
this.buttonHandler=buttonHandler;
this.gui=gui;
this.news=new News(win);
}
public void startLauncher() {
win.destroyContent();
news.drawNews();
int launcherBG=imgHandler.freeImgID();
imgHandler.images[launcherBG]=new ImageObject(win, launcherBG);
imgHandler.images[launcherBG].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"launcher_bg.png"), 0, 0, "left", "bottom");
imgHandler.images[launcherBG].setVisible(true);
// Login-Button
normImg=win.userDir+win.trenner+"img"+win.trenner+"120x20_Login_normal.png";
hoverImg=win.userDir+win.trenner+"img"+win.trenner+"120x20_Login_hover.png";
activeImg=win.userDir+win.trenner+"img"+win.trenner+"120x20_Login_active.png";
buttonHandler.quickButton(normImg, hoverImg, activeImg, "Login", -20, 503, 120, 20, "right", "top");
// Optionen-Button
normImg=win.userDir+win.trenner+"img"+win.trenner+"120x20_Optionen_normal.png";
hoverImg=win.userDir+win.trenner+"img"+win.trenner+"120x20_Optionen_hover.png";
activeImg=win.userDir+win.trenner+"img"+win.trenner+"120x20_Optionen_active.png";
buttonHandler.quickButton(normImg, hoverImg, activeImg, "Optionen", -20, 535, 120, 20, "right", "top");
// Username-Feld
username=new JTextField();
username.setBounds(420, 508, 120, 20);
win.cont.add(username);
username.setText("username");
// Passwort-Feld
password=new JPasswordField();
password.setBounds(420, 540, 120, 20);
win.cont.add(password);
password.setText("passwort");
}
public void loggingIn() {
win.destroyContent();
news.drawNews();
int launcherBG=imgHandler.freeImgID();
imgHandler.images[launcherBG]=new ImageObject(win, launcherBG);
imgHandler.images[launcherBG].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"launcher_bg.png"), 0, 0, "left", "bottom");
imgHandler.images[launcherBG].setVisible(true);
// Login-Label
int login=imgHandler.freeImgID();
imgHandler.images[login]=new ImageObject(win, login);
imgHandler.images[login].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"logging_in.png"), 570, 515, "left", "top");
imgHandler.images[login].setVisible(true);
}
public void loginFailed() {
win.destroyContent();
news.drawNews();
int launcherBG=imgHandler.freeImgID();
imgHandler.images[launcherBG]=new ImageObject(win, launcherBG);
imgHandler.images[launcherBG].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"launcher_bg.png"), 0, 0, "left", "bottom");
imgHandler.images[launcherBG].setVisible(true);
// Fehlgeschlagen-Label
int login=imgHandler.freeImgID();
imgHandler.images[login]=new ImageObject(win, login);
imgHandler.images[login].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"login_failed.png"), 532, 500, "left", "top");
imgHandler.images[login].setVisible(true);
// Nochmal versuchen-Button
normImg=win.userDir+win.trenner+"img"+win.trenner+"180x20_Nochmal_versuchen_normal.png";
hoverImg=win.userDir+win.trenner+"img"+win.trenner+"180x20_Nochmal_versuchen_hover.png";
activeImg=win.userDir+win.trenner+"img"+win.trenner+"180x20_Nochmal_versuchen_active.png";
buttonHandler.quickButton(normImg, hoverImg, activeImg, "Nochmal_versuchen", -18, 535, 180, 20, "right", "top");
}
public void loginSuccess() {
win.destroyContent();
news.drawNews();
int launcherBG=imgHandler.freeImgID();
imgHandler.images[launcherBG]=new ImageObject(win, launcherBG);
imgHandler.images[launcherBG].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"launcher_bg.png"), 0, 0, "left", "bottom");
imgHandler.images[launcherBG].setVisible(true);
int patch=imgHandler.freeImgID();
imgHandler.images[patch]=new ImageObject(win, patch);
imgHandler.images[patch].createImage(new File(win.userDir+win.trenner+"img"+win.trenner+"patch.png"), 532, 500, "left", "top");
imgHandler.images[patch].setVisible(true);
}
}
ButtonHandler.class:
Java:
import java.io.File;
/*
* Button Verwaltung - ButtonHandler
*/
public class ButtonHandler implements Runnable {
// globale Variablen
int objectNum=0; // Anzahl der existierenden Buttons
int maxObjects=100; // Anzahl der maximalen Buttons
MenuButton[] buttons=new MenuButton[maxObjects]; // Die MenuButton-Instanzen
MainWindow win;
ImageHandler imgHandler;
public ButtonHandler(MainWindow win, ImageHandler imgHandler) {
this.win=win;
this.imgHandler=imgHandler;
Thread thread=new Thread(this);
thread.start();
}
public int freeButtonID() {
int num=0;
try {
for(int i=0;i<maxObjects;i++) {
num=i;
if(buttons[i]==null) {
return i;
}
}
} catch(NullPointerException e) {
return num;
}
return -1;
}
public void quickButton(String normImg, String hoverImg, String activeImg, String action, int x, int y, int width, int height, String halign, String valign) {
int buttonID=freeButtonID();
buttons[buttonID]=new MenuButton(win, win.imgHandler, buttonID);
getButton(buttonID).createButton(normImg, action);
int imgIDhover=imgHandler.freeImgID();
imgHandler.images[imgIDhover]=new ImageObject(win, imgIDhover);
imgHandler.images[imgIDhover].button=true;
imgHandler.images[imgIDhover].createImage(new File(hoverImg), x, y, halign, valign);
int imgIDactive=imgHandler.freeImgID();
imgHandler.images[imgIDactive]=new ImageObject(win, imgIDactive);
imgHandler.images[imgIDactive].button=true;
imgHandler.images[imgIDactive].createImage(new File(activeImg), x, y, halign, valign);
buttons[buttonID].setBounds(x, y, width, height);
buttons[buttonID].setHorizontalAlignment(halign);
buttons[buttonID].setVerticalAlignment(valign);
buttons[buttonID].setHoverButton(imgIDhover);
buttons[buttonID].setActiveButton(imgIDactive);
buttons[buttonID].setVisible(true);
}
// new-Methoden
public void newButton(int buttonNum, String img, String action) {
buttons[buttonNum]=new MenuButton(win, win.imgHandler, buttonNum);
getButton(buttonNum).createButton(img, action);
}
public void newButton(int buttonNum, String img, String action, int x, int y, int width, int height) {
buttons[buttonNum]=new MenuButton(win, win.imgHandler, buttonNum);
getButton(buttonNum).createButton(img, action);
getButton(buttonNum).setBounds(x, y, width, height);
}
// remove-Methoden
public void remove(int ID) {
buttons[ID]=null;
}
public void removeAll() {
buttons=new MenuButton[maxObjects];
}
// setter-Methoden
// getter-Methoden
public MenuButton getButton(int ID) {
return buttons[ID];
}
public void run() {
for(;;) {
for(int i=0;i<maxObjects;i++) {
try {
if(buttons[i] != null) {
if(win.mouseX>=buttons[i].getX() && win.mouseY>=buttons[i].getY() && win.mouseX<getButton(i).getWidth()+buttons[i].getX() && win.mouseY<getButton(i).getHeight()+buttons[i].getY()) {
if(win.mouseDown) {
imgHandler.images[buttons[i].normButton].setVisible(false);
imgHandler.images[buttons[i].hoverButton].setVisible(false);
imgHandler.images[buttons[i].activeButton].setVisible(true);
win.getGraphics().drawImage(imgHandler.images[buttons[i].activeButton].getImage(), buttons[i].getX(), buttons[i].getY(), win);
} else {
imgHandler.images[buttons[i].normButton].setVisible(false);
imgHandler.images[buttons[i].hoverButton].setVisible(true);
imgHandler.images[buttons[i].activeButton].setVisible(false);
win.getGraphics().drawImage(imgHandler.images[buttons[i].hoverButton].getImage(), buttons[i].getX(), buttons[i].getY(), win);
}
}
else {
imgHandler.images[buttons[i].normButton].setVisible(true);
imgHandler.images[buttons[i].hoverButton].setVisible(false);
imgHandler.images[buttons[i].activeButton].setVisible(false);
win.getGraphics().drawImage(imgHandler.images[buttons[i].normButton].getImage(), buttons[i].getX(), buttons[i].getY(), win);
}
}
} catch(NullPointerException e) {
} catch(ArrayIndexOutOfBoundsException e) {
}
}
try {
Thread.sleep(13);
} catch (InterruptedException e) {
}
}
}
}
Ich freue mich auf eure Hilfe :toll:. Ich verzweifel echt ;(
Zuletzt bearbeitet: