Hallo erstmal!
Ich arbeite mich schon etwas länger mit einem Buch in Java ein.
Nur beinhaltet diese Lektüre keinerlei GUI-Elemente, leider.
Nun habe ich versucht mal mein erstes Programm mit GUI zu schreiben und scheitere bereits an den einfachsten Sachen.
Wo habe ich hier einen Denkfehler?
Es geht um folgendes:
Es gibt eine Hauptklasse, MainDialog.java.
Diese Hauptklasse soll Dialog-Elemente aus andere Klassen laden, wie z.B. aus der Klasse MainDialogTitleMenu und MainDialogAdapterList.
Edit: Das Hauptproblem mit der JMenuBar habe ich gelöst, es lag an der setLayout(new FlowLayout()); (keine ahnung, bin eben neu). Außerdem habe ich die Positionierung über BorderLayout.PAGE_START wieder aktiviert - und siehe da, es macht ausnahmsweise was ich will. Wenn das nur schon alle Probleme gewesen wären ... Die anderen stehen immer noch hier
Problem 1:
JMenuBar! Egal wie ich die implementiere, sie werden immer "zentriert" ausgerichtet, sprich im Vorschau-Dialog werden die Felder auf die größe der Menü-Einträge reduziert und dann auch noch zentriert. Egal ob ich sie in der MainDialog Klasse über ein bestimmtes BorderLayout aufrufe oder dem ganzen seiner Natur überlasse, das Ergebnis ist immer dasselbe. Und ich bekomme es einfach nicht hin die JMenuBar in ihrer Größe zu beeinflussen. Es gibt Methoden für Hintergrundbilder, aber keine um z.B. ein MouseOver(Hover) Effekt farblich anders zu unterlegen? Schande über mich, entweder denke ich zu kompliziert oder gar nicht.
Problem 2:
Ich habe es auch nach X versuchen noch nicht geschafft ein List Objekt zu initialisieren und brauchbar zu machen. Der unten gezeigte Code wurde etwa 50 mal komplett durcheinander auskommentiert, verschmückt, verschönert, auseinandergerissen und wieder auf das Wesentliche gekürzt. Mein Ziel war es ein Listen-Element in der Klasse "MainDialogAdapterList" zu erstellen und dieses über die Hauptklasse "MainDialog" zu laden. Alle weiteren Kernfunktionen sollten dabei in der MainDialogAdapterList stattfinden (ich wollte dort durch eine HashMap mit einem kleinen Out of the Box Erlebnis sämtliche Windows-Netzwerkadapter auslesen). Aber ich bekomme ja nicht mal die Liste hin.
Problem 3:
Wird schon in Problem#1 beschrieben, ich möchte meine Objekte einfach statisch positionieren können, weiß aber nicht wo und wie ich das erreichen kann.
Wenn ich mir Muster von anderen JMenuBar Codes ansehe, dann werden die immer Hauptfenster erstellt und geladen - und sind auch 100% horizintal gestreckt, sowie links oben ausgerichtet. Ich würde gerne die X und Y Koordinaten meiner Objekte selbst bestimmten, so wie deren Größe (es soll ein statisches Fenster werden). Wenn ich diese Methoden auf meinen Objekten anwende, dann verschwinden sie entweder oder es zeigt sich einfach keine Änderung, es ist zum Haareraufen.
Edit: Ich arbeite mit Eclipse
Die MainDialog.java
MainDialogDetails.java
Die MainDialogTitleMenue.java (ja mit e )
MeinDialogAdapterList.java
Vielleicht kann mich ja jemand entwirren :bahnhof:
Ich arbeite mich schon etwas länger mit einem Buch in Java ein.
Nur beinhaltet diese Lektüre keinerlei GUI-Elemente, leider.
Nun habe ich versucht mal mein erstes Programm mit GUI zu schreiben und scheitere bereits an den einfachsten Sachen.
Wo habe ich hier einen Denkfehler?
Es geht um folgendes:
Es gibt eine Hauptklasse, MainDialog.java.
Diese Hauptklasse soll Dialog-Elemente aus andere Klassen laden, wie z.B. aus der Klasse MainDialogTitleMenu und MainDialogAdapterList.
Edit: Das Hauptproblem mit der JMenuBar habe ich gelöst, es lag an der setLayout(new FlowLayout()); (keine ahnung, bin eben neu). Außerdem habe ich die Positionierung über BorderLayout.PAGE_START wieder aktiviert - und siehe da, es macht ausnahmsweise was ich will. Wenn das nur schon alle Probleme gewesen wären ... Die anderen stehen immer noch hier
Problem 1:
JMenuBar! Egal wie ich die implementiere, sie werden immer "zentriert" ausgerichtet, sprich im Vorschau-Dialog werden die Felder auf die größe der Menü-Einträge reduziert und dann auch noch zentriert. Egal ob ich sie in der MainDialog Klasse über ein bestimmtes BorderLayout aufrufe oder dem ganzen seiner Natur überlasse, das Ergebnis ist immer dasselbe. Und ich bekomme es einfach nicht hin die JMenuBar in ihrer Größe zu beeinflussen. Es gibt Methoden für Hintergrundbilder, aber keine um z.B. ein MouseOver(Hover) Effekt farblich anders zu unterlegen? Schande über mich, entweder denke ich zu kompliziert oder gar nicht.
Problem 2:
Ich habe es auch nach X versuchen noch nicht geschafft ein List Objekt zu initialisieren und brauchbar zu machen. Der unten gezeigte Code wurde etwa 50 mal komplett durcheinander auskommentiert, verschmückt, verschönert, auseinandergerissen und wieder auf das Wesentliche gekürzt. Mein Ziel war es ein Listen-Element in der Klasse "MainDialogAdapterList" zu erstellen und dieses über die Hauptklasse "MainDialog" zu laden. Alle weiteren Kernfunktionen sollten dabei in der MainDialogAdapterList stattfinden (ich wollte dort durch eine HashMap mit einem kleinen Out of the Box Erlebnis sämtliche Windows-Netzwerkadapter auslesen). Aber ich bekomme ja nicht mal die Liste hin.
Problem 3:
Wird schon in Problem#1 beschrieben, ich möchte meine Objekte einfach statisch positionieren können, weiß aber nicht wo und wie ich das erreichen kann.
Wenn ich mir Muster von anderen JMenuBar Codes ansehe, dann werden die immer Hauptfenster erstellt und geladen - und sind auch 100% horizintal gestreckt, sowie links oben ausgerichtet. Ich würde gerne die X und Y Koordinaten meiner Objekte selbst bestimmten, so wie deren Größe (es soll ein statisches Fenster werden). Wenn ich diese Methoden auf meinen Objekten anwende, dann verschwinden sie entweder oder es zeigt sich einfach keine Änderung, es ist zum Haareraufen.
Edit: Ich arbeite mit Eclipse
Die MainDialog.java
Java:
import javax.swing.*;
import java.awt.*;
public class MainDialog
{
//->Auflösungsermittlung für Zentrierung
private static int mainDisplayWidth = 500;
private static int mainDisplayHeight = 500;
private static int mainDisplayPositionWidth = 0;
private static int mainDisplayPositionHeight = 0;
//<-Auflösungsermittlung für Zentrierung
public static void main(String[] args)
{
try
{
//Info für das Forum: Es ist egal ob mit oder ohne, alles schon getestet
//->WebLookAndFeel style
UIManager.setLookAndFeel(com.alee.laf.WebLookAndFeel.class.getCanonicalName());
//<-WebLookAndFeel style
}
catch ( Throwable e )
{
//TODO
}
MainDialog g = new MainDialog();
}
public MainDialog()
{
//->Auflösungsermittlung für Zentrierung
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int resolutionWidth = (int) dim.getWidth();
int resolutionHeight = (int) dim.getHeight();
mainDisplayPositionWidth = resolutionWidth/2-mainDisplayWidth/2;
mainDisplayPositionHeight = resolutionHeight/2-mainDisplayHeight/2;
//<-Auflösungsermittlung für Zentrierung
//-> Dialog-Settings
MainDialogDetails maindialog = new MainDialogDetails();
maindialog.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//->Auflösungsermittlung für Zentrierung
maindialog.setLocation(mainDisplayPositionWidth, mainDisplayPositionHeight);
maindialog.setSize(mainDisplayWidth, mainDisplayHeight);
maindialog.setAlwaysOnTop(true);
maindialog.setResizable(false);
//<-Auflösungsermittlung für Zentrierung
//->Titlemenue
MainDialogTitleMenue menuframe = new MainDialogTitleMenue();
maindialog.add(menuframe.menuebar,BorderLayout.PAGE_START);
//<-Titlemenue
maindialog.setVisible(true);
//<- Dialog-Settings
}
}
MainDialogDetails.java
Java:
import javax.swing.*;
import java.awt.*;
public class MainDialogDetails extends JFrame
{
private static final long serialVersionUID = 526887145372086141L;
private JLabel maindialogdetails;
public MainDialogDetails()
{
super("Title bar");
setLayout(new FlowLayout());
//maindialogdetails = new JLabel(""); //Das war die Wurzel allen Übels
//maindialogdetails.setToolTipText("Beispiel Tooltip");
add(maindialogdetails);
}
}
Die MainDialogTitleMenue.java (ja mit e )
Java:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainDialogTitleMenue implements ActionListener
{
JMenuBar menuebar = new JMenuBar();
JMenu datei = new JMenu("Datei");
JMenu tools = new JMenu("Tools");
JMenu hilfe = new JMenu("Hilfe");
//Datei
JMenuItem beenden = new JMenuItem("Beenden");
//Tools
JMenuItem optionen = new JMenuItem("Optionen");
//Hilfe
JMenuItem ueber = new JMenuItem("Über");
public MainDialogTitleMenue()
{
menuebar.add(datei);
menuebar.add(tools);
menuebar.add(hilfe);
datei.add(beenden);
tools.add(optionen);
hilfe.add(ueber);
datei.addActionListener(this);
tools.addActionListener(this);
hilfe.addActionListener(this);
beenden.addActionListener(this);
optionen.addActionListener(this);
ueber.addActionListener(this);
menuebar.setFocusable(false);
}
@Override
public void actionPerformed(ActionEvent object)
{
if (object.getSource() == beenden)
{
System.out.println("Beenden wurde angeklickt");
System.exit(0);
}
if (object.getSource() == optionen)
{
System.out.println("Optionen wurde angeklickt");
}
if (object.getSource() == ueber)
{
System.out.println("Über wurde angeklickt");
}
}
}
MeinDialogAdapterList.java
Java:
import javax.swing.*;
public class MainDialogAdapterList
{
JPanel panel = new JPanel();
public MainDialogAdapterList()
{
String subject[] = {"Math", "Computer", "Phisics", "Chemestry"};
JList<Object> list = new JList<Object>(subject);
panel.add(list);
}
}
Vielleicht kann mich ja jemand entwirren :bahnhof:
Zuletzt bearbeitet: