Java Swing Ueberschrift

Hallo zusammen,

Ich verzweifle mit den ganzen JPanel, JFrame, Layoutmanager, GridBagLayout usw.

Habe bis jetzt ein Frame und kann auch die ganzen Elemente einfuegen. Aber die Elemente bleiben nicht zentriert, bzw. linksbuendig, sondern verschieben sich wenn sich der Inhalt der Textbox veraendert.

so sollte es am Ende aussehen.

| Ueberschrift zentriert
|
|
| Button Textbox (beides zentriert)
|
|

Footer linksbuendig

Vielen Dank schonmal!!

Hier noch bissal Quellcode:
Sorry, aber ich weiss nicht wie man Quellcode richtig einfuegt…
public MainGUI(){
startFrame = new JFrame(„Test“);
//startFrame.setLocationRelativeTo(upperPanel);
startFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container pane = startFrame.getContentPane();
pane.setLayout(new GridBagLayout());
gBC = new GridBagConstraints();
gBC.fill = GridBagConstraints.HORIZONTAL;
pane.setBackground(Color.WHITE);
init();
}

@Override
public void init() {
startFrame.setSize(FRAMEWIDTH,FRAMEHEIGHT);
startFrame.setLocation((int)SCREENWIDTH/2-FRAMEWIDTH/2,100);
pane = startFrame.getContentPane();
initHeader();
initMiddle();
initCopyright();
startFrame.setVisible(true);
}

@Override
public void initHeader() {
Container contentPane = startFrame.getContentPane();
header = new JLabel(HEADER);
header.setSize(new Dimension(450, 10));
header.setFont(new Font(„Times New Roman“, Font.BOLD, 50));
contentPane.add(header);
}

@Override
public void initCopyright() {

JLabel jtf = new JLabel(„© Paul 2012“, JLabel.CENTER);
jtf.setFont(new Font(BMW_FONT, Font.BOLD, 10));
pane.add(jtf, gBC);
Menu();
}

Hallo,

tut mir leid, ich kann dir da leider nicht weiterhelfen. Mit so einem Problem hatte ich noch nicht zu tun und hab leider auch keine Erklärung für dich parat.

Sorry und viel Glück noch bei der Lösungsfindung :wink:

Hi Paul,

sieht aus, als hättest du deinen Elementen gar keine Position zugewiesen.

Wie Layout Management in swing funktioniert:
http://docs.oracle.com/javase/tutorial/uiswing/layou…

Gruß vom Linuxxer

PS: Code schließt du in „pre“-Tags ein. Siehe:
http://www.wer-weiss-was.de/app/faqs/list/4?entries=…

Hallo Paul,

Jetzt hast Du mich erwischt - aufgrund der Arbeits-Überlastung vor einem drohenden Urlaub finde ich keine Zeit, mich wieder mit JAVA zu beschäftigen und Dein Problem richtig anzugehen. Ich hoffe aber auf genügend gute Ratschläge anderer Experten, so dass Du zu einer Lösung kommst.

Mit Gruß,
Frank-Thomas

Gibt es irgendeine Seite mit SWING Vorlagen??

Finde nix…

Gruss

Hallo Paul,

leider ist mir auch keine Quelle bekannt

Mit Gruß,
Frank-Thomas

Hallo Paul1328,

sorry für die späte Antwort; Urlaubszeit… :wink:

Ich kann gut verstehen, dass man von den vielen Layout-Möglichkeiten überwältigt wird.
Ich habe sehr positive Erfahrungen mit dem JGoodies FormLayout gemacht.

Damit könnte eine Lösung für Dein Problem wie folgt aussehen:

import static com.jgoodies.forms.layout.CellConstraints.*;

import java.awt.*;
import javax.swing.*;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class MainGUI
{
private static final int FRAMEWIDTH = 640;
private static final int FRAMEHEIGHT = 480;
private static final int SCREENWIDTH = 1024;
private static final String HEADER = „HEADER“;

public MainGUI()
{
JFrame startFrame = new JFrame(„Test“);
startFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
init(startFrame);

startFrame.setVisible(true);
}

public void init(JFrame startFrame)
{
startFrame.setSize(FRAMEWIDTH, FRAMEHEIGHT);
startFrame.setLocation((int) SCREENWIDTH / 2 - FRAMEWIDTH / 2, 100);

Container pane = startFrame.getContentPane();
pane.setBackground(Color.WHITE);

pane.setLayout(new FormLayout(„pref:grow“, „pref, pref:grow, pref“));
pane.add(getHeader(), new CellConstraints(1, 1, CENTER, DEFAULT));
pane.add(getMiddle(), new CellConstraints(1, 2, CENTER, DEFAULT));
pane.add(getCopyright(), new CellConstraints(1, 3, LEFT, DEFAULT));
}

private Component getHeader()
{
JLabel header = new JLabel(HEADER);
header.setSize(new Dimension(450, 10));
header.setFont(new Font(„Times New Roman“, Font.BOLD, 50));
return header;
}

private Component getMiddle()
{
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.add(new JButton(„Button“));
panel.add(new JTextField(„Textbox“));
return panel;
}

private Component getCopyright()
{
JLabel label = new JLabel(„© Paul 2012“, JLabel.CENTER);
label.setFont(new Font(„Arial“, Font.BOLD, 10));
return label;
}
}

Weitere Hinweise zum FormLayout findest Du z.B. im Quick Start Tutorial und im whitepaper „The JGoodies Forms Framework“.

Schöne Grüße,

Manfred

Voll cool!
Genauso brauch ich das!!

Hallo,

Swing ist nicht meine Stärke.
Und ich habe im Moment leider keine Zeit, mich da reinzudenken.

Tut mir leid.

Viele Grüße
Heike

Ich würde nicht gerade mit dem GridBagLayout herumfuhrwerken, wenn du dich damit nicht auskennst.

Besser: Entweder einen vernünftigen Fremd-Layoutmanager nehmen, wie z.B. JGoodies FormLayout oder aber Layoutmanager sinnvoll schachteln.

Aus deiner Skizze


| Ueberschrift zentriert
|
|
| Button Textbox (beides zentriert)
|
|

Footer linksbuendig

geht nicht hervor, wie sich die drei Elemente bzgl. Ihrer VERTIKALEN Größe verhalten sollen. Falls se gleich groß sein sollen/dürfen, könntest du schlicht ein GridLayout mit 3 Zeilen und einer Spalte nehmen. In die drei Zeilen packst du je ein JPanel. Das hat als Default ein FlowLayout mit Center-Alignment, d.h. du kannst es einfach lassen wie es ist, oder es anpassen, falls du Abstände brauchst.

Beispiel:

import java.awt.*;

import javax.swing.*;

public class BeispielFrame extends JFrame {

public BeispielFrame() {
setLayout(new GridLayout(3, 1));

JPanel headerPanel = new JPanel();
JLabel header = new JLabel(„Überschrift“);
headerPanel.add(header);
add(headerPanel);

JPanel centerPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 30, 0));
centerPanel.add(new JButton(„Ein Button“));
centerPanel.add(new JTextField(10));
add(centerPanel);

JPanel footerPanel = new JPanel();
JLabel footer = new JLabel(„Footer“);
footerPanel.add(footer);
add(footerPanel);

pack();
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new BeispielFrame().setVisible(true);
}
}

Gruß,
PicCarlit