W
Wolfgang R.
Gast
Hallo zusammen,
ich bin gerade am Verzweifeln. Ich bin soweit, dass ich sage mit Delphi läßt sich's immer noch am besten ein GUI entwickeln.
Ich versuche ein Access-Endlos-Formular nachzuprogrammieren. Ich versuch's hier mal einigermaßen darszustellen. Ich habe ein Panel in dem sich 4 Elemente befinden. Ein TextFeld für eine Zahl, die die Position angibt. Eine JTextPane für beliebig langen Text. Die Pane soll aber immer ca. 4 cm hoch sein. Falls der Text darüber hinaus geht soll ein vertikaler Scrollbalken gezeigt werden. Bei Größenänderung in der Breite soll diese TextPane den Platz bekommen. Die anderen Elemente sollen eine fixe Breite haben. Danach kommen noch zwei Felder für einen Euro-Betrag. Optisch sieht's ungefähr so aus:
Dieses Panel habe ich mit Hilfe des GridBagLayouts aufgebaut und ist für sich allein auch OK.
Es sollen beliebig viele solcher Panels untereinander angeordnet werden können. Dazu kommen diese Panels wieder in ein überrgeordnetes Panel, das Scrollable implementiert und und einer ScrollPane zugewiesen wird. Wenn der Benutzer viele Positionen eingegeben hat, soll er die Liste vertikal scrollen können.
Ich plaziere nun ein solches Positionen-Panel in dem übergeordneten Panel, das die Liste darstellen soll. Alles wunderbar, die Felder sind noch alle leer, die Größe von allen Elementen ist genau wie gewünscht. Bei Größenveränderung des umschließenden Frame ist alles wie gewünscht.
Sobald ich aber ein paar Zeilen Text in die TextPane eintrage und ein Neuzeichnen des Frames veranlasse in dem ich minimal die Breite des Frames ändere, bläst ich das Positionspanel auf. Sieht dann ungefähr so aus:
Ich haber Versuche mit verschiedenen Layout-Managern gemacht. Und zwar geht es um das Panel, das die Positions-Panel auf nimmt und das wiederum der ScrollPane übergeben wird. Ich habe es mit einem GridBagLayout, einem GridLayout und einem BorderLayout versucht. Das Ergebnis ist immer dasselbe, sobald meherzeileiger Text eingetragen wird und ein Neuzeichner erfolgt, schwuppst bläst sich das Postions-Panel in der Höhe auf.
Auch ein:
für das Positions-Panel hilft nicht. Und nu bin ich ratlos.
Ich poste hier noch den Code für das Postions-Panel. Falls sich jemand meiner an nimmt und noch mehr Information braucht, liefere ich die gerne. Schon mal danke für's Lesen des Ganzen.
Gruß
Wolfgang
ich bin gerade am Verzweifeln. Ich bin soweit, dass ich sage mit Delphi läßt sich's immer noch am besten ein GUI entwickeln.
Ich versuche ein Access-Endlos-Formular nachzuprogrammieren. Ich versuch's hier mal einigermaßen darszustellen. Ich habe ein Panel in dem sich 4 Elemente befinden. Ein TextFeld für eine Zahl, die die Position angibt. Eine JTextPane für beliebig langen Text. Die Pane soll aber immer ca. 4 cm hoch sein. Falls der Text darüber hinaus geht soll ein vertikaler Scrollbalken gezeigt werden. Bei Größenänderung in der Breite soll diese TextPane den Platz bekommen. Die anderen Elemente sollen eine fixe Breite haben. Danach kommen noch zwei Felder für einen Euro-Betrag. Optisch sieht's ungefähr so aus:
Code:
Position Beliebiger Text, der, wenn eer zu lange wird einen vertikalen Euro-Betrag Euro-Betrag
Scrollbalken bekommen soll. Es werden ca. 5 Zeilen angezeigt
bis der Scrollbar erscheint.
Es sollen beliebig viele solcher Panels untereinander angeordnet werden können. Dazu kommen diese Panels wieder in ein überrgeordnetes Panel, das Scrollable implementiert und und einer ScrollPane zugewiesen wird. Wenn der Benutzer viele Positionen eingegeben hat, soll er die Liste vertikal scrollen können.
Ich plaziere nun ein solches Positionen-Panel in dem übergeordneten Panel, das die Liste darstellen soll. Alles wunderbar, die Felder sind noch alle leer, die Größe von allen Elementen ist genau wie gewünscht. Bei Größenveränderung des umschließenden Frame ist alles wie gewünscht.
Sobald ich aber ein paar Zeilen Text in die TextPane eintrage und ein Neuzeichnen des Frames veranlasse in dem ich minimal die Breite des Frames ändere, bläst ich das Positionspanel auf. Sieht dann ungefähr so aus:
Code:
.
Position Beliebiger Text, der, wenn eer zu lange wird einen vertikalen Euro-Betrag Euro-Betrag
Scrollbalken bekommen soll. Es werden ca. 5 Zeilen angezeigt
bis der Scrollbar erscheint.
Auch ein:
Code:
this.setMaximumSize(new Dimension(100, 100));
Ich poste hier noch den Code für das Postions-Panel. Falls sich jemand meiner an nimmt und noch mehr Information braucht, liefere ich die gerne. Schon mal danke für's Lesen des Ganzen.
Gruß
Wolfgang
Code:
package de.wro.gui.PositionenZusammenstellen.AngebotAuftragsbestaetigung;
import javax.swing.*;
import java.awt.*;
public class PanelAnlagePosition extends JPanel {
public static final int OBERER_RAND_BREITE = 6;
public PanelAnlagePosition(int position) {
this.setLayout(new GridBagLayout());
this.setBackground(Color.decode("12632256"));
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
this.setMaximumSize(new Dimension(100, 100));
textFieldPosition = new JTextField(new Integer(position).toString());
textFieldPosition.setFont(new Font(FrameAnlageAngebot.FONT_NAME, Font.PLAIN, FrameAnlageAngebot.FONT_SIZE));
textFieldPosition.setHorizontalAlignment(JTextField.CENTER);
this.add(textFieldPosition, new GridBagConstraints(0, 0, // Zelle
1, 1, // Ausdehung über Zellen
0, 0, // Überschüßiger Platz den die Zelle bekommt, realtive Angabe
GridBagConstraints.NORTHWEST, // Ankerpunkt
GridBagConstraints.CENTER, // Ausfüllen der Zelle bei GrößenÄnderung
new Insets(OBERER_RAND_BREITE, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE + 2, 5, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE),
FrameAnlageAngebot.POSITIONS_BREITE, 1)); // Minimalgröße
editorPaneText = new JEditorPane();
editorPaneText.setFont(new Font(FrameAnlageAngebot.FONT_NAME, Font.PLAIN, FrameAnlageAngebot.FONT_SIZE));
//scrollPaneEditor = new JScrollPane(editorPaneText);
scrollPaneEditor = new JScrollPane(editorPaneText, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPaneEditor.setMaximumSize(new Dimension(100,100));
this.add(scrollPaneEditor, new GridBagConstraints(1, 0, // Zelle
1, 1, // Ausdehung über Zellen
1, 0, // Überschüßiger Platz den die Zelle bekommt, realtive Angabe
GridBagConstraints.NORTHWEST, // Ankerpunkt
GridBagConstraints.HORIZONTAL, // Ausfüllen der Zelle bei GrößenÄnderung
new Insets(OBERER_RAND_BREITE, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE, 0, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE),
10, 100)); // Minimalgröße
textFieldMinderleistung = new JTextField("");
textFieldMinderleistung.setFont(new Font(FrameAnlageAngebot.FONT_NAME, Font.PLAIN, FrameAnlageAngebot.FONT_SIZE));
textFieldMinderleistung.setHorizontalAlignment(JTextField.RIGHT);
this.add(textFieldMinderleistung, new GridBagConstraints(2, 0, // Zelle
1, 1, // Ausdehung über Zellen
0, 0, // Überschüßiger Platz den die Zelle bekommt, realtive Angabe
GridBagConstraints.NORTHWEST, // Ankerpunkt
GridBagConstraints.CENTER, // Ausfüllen der Zelle bei GrößenÄnderung
new Insets(OBERER_RAND_BREITE, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE, 5, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE),
FrameAnlageAngebot.MINDER_MEHRLEISTUNG_BREITE, 1)); // Minimalgröße
textFieldMehrleistung = new JTextField("");
textFieldMehrleistung.setFont(new Font(FrameAnlageAngebot.FONT_NAME, Font.PLAIN, FrameAnlageAngebot.FONT_SIZE));
textFieldMehrleistung.setHorizontalAlignment(JTextField.RIGHT);
this.add(textFieldMehrleistung, new GridBagConstraints(3, 0, // Zelle
1, 1, // Ausdehung über Zellen
0, 0, // Überschüßiger Platz den die Zelle bekommt, realtive Angabe
GridBagConstraints.NORTHWEST, // Ankerpunkt
GridBagConstraints.CENTER, // Ausfüllen der Zelle bei GrößenÄnderung
new Insets(OBERER_RAND_BREITE, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE, 5, FrameAnlageAngebot.LINKER_RECHTER_RAND_BREITE + 2),
FrameAnlageAngebot.MINDER_MEHRLEISTUNG_BREITE, 1)); // Minimalgröße
}
private JTextField textFieldPosition;
private JEditorPane editorPaneText;
private JTextField textFieldMinderleistung;
private JTextField textFieldMehrleistung;
private JScrollPane scrollPaneEditor;
}