Hallo,
ich habe ein JFrame, in welches ich ein JPanel (genannt mainPanel) setze, dieses mainPanel ist mit einem GridBagLayout versehen. Ich erstelle dann nach und nach neue Komponenten und füge diese mittels GridBagConstraints in das mainPanel ein.
Ich wollte einen Changelog machen, in welchen ich stets neuen Text einfüge. Ich dachte mir, ich mache das mit einem JTextPane, dessen ContentType ich auf "text/html" setze. Damit das scrollbar ist, habe ich davon ein JScrollPane erstellt. Dieses JScrollPane hänge ich dann ins mainPanel.
Das Problem dabei ist nun, dass, sobald der Text zu lange wird (also die Scrollbar tatsächlich auftritt) macht es mir das ganze Layout kaputt. Ich weiss einfach nicht woran es liegt.
Zur weiteren Erklärung hier ein Bild: (Ich bin mit der Forenregelung bzgl. Bilder nicht vertraut.. falls es zu gross ist kann ich es ändern.)
[Edit von L-ectron-X: Bild entfernt, hochgeladen und am Ende des Beitrages angehängt]
Zusätzlich noch die wichtigen Ausschnitte des Quellcodes:
[JAVA=42]private void initGUI(){
/*
* hier werden ein paar Elemente geladen
*/
chgLog=new JTextPane();
chgLog.setContentType("text/html");
chgLog.setEditable(false);
chgLogScroll=new JScrollPane(chgLog);
chgLog.addText("viele zeilenumbrüche")
//addText ist eine eigene Methode, fügt Text in die html Struktur ein
}
private void setGUI(){
GridBagConstraints c=new GridBagConstraints();
JPanel mainPanel=new JPanel(new GridBagLayout());
this.add(mainPanel);
//LINKE SEITE
c=new GridBagConstraints();
c.gridx=0; c.gridy=0; c.gridwidth=2;
mainPanel.add(mTopMenu, c);
c=new GridBagConstraints();
c.gridx=2; c.gridy=0; c.fill=GridBagConstraints.BOTH;
mainPanel.add(ctrlActionTxt,c);
c=new GridBagConstraints();
c.gridx=0; c.gridy=1; c.gridwidth=3; c.gridheight=10; c.fill=GridBagConstraints.BOTH;
mainPanel.add(drawArea,c);
drawArea.createBufferStrategy(2);
bufferStrategy=drawArea.getBufferStrategy();
c=new GridBagConstraints();
c.gridx=0; c.gridy=11;
c.insets=new Insets(10,0,0,0);
mainPanel.add(new JLabel("File Name: "),c);
c=new GridBagConstraints();
c.gridx=1; c.gridy=11; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(10,0,0,0);
mainPanel.add(fileName,c);
//RECHTE SEITE
c=new GridBagConstraints();
c.gridx=3; c.gridy=1; c.gridwidth=2; c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(0,10,0,0);
mainPanel.add(bMoveable,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=2; c.gridwidth=2; c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(30,10,0,0);
mainPanel.add(new JLabel("Density:"),c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=3; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(10,10,10,10);
mainPanel.add(sDensity,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=4; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(20,10,10,0);
mainPanel.add(new JLabel("Position:"),c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=5;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("X:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=5; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tPosX,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=6;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("Y:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=6; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tPosY,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=7; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(10,10,10,0);
mainPanel.add(new JLabel("Dimension:"),c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=8;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("X:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=8; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tDimX,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=9;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("Y:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=9; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tDimY,c);
/*
* HIER IST DAS SCROLLPANE
*/
c=new GridBagConstraints();
c.gridx=3; c.gridy=10; c.gridwidth=2; c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(30,10,0,0);
mainPanel.add(chgLogScroll,c);
/*
*
*/
c=new GridBagConstraints();
c.gridx=3; c.gridy=11; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(8,10,0,0);
mainPanel.add(sGrid,c);
}[/code]
Das Setzen von Maximum und Minimum Size hat .. überhaupt nichts gebracht, dieser Befehl scheint mir völlig unnütz zu sein, da er ignoriert zu werden scheint.
Ein weiteres Problem ist, dass sich das Textfeld einfach in die Breite ausdehnt, statt auch dort einen Scrollbalken zu erstellen, bis es auch da das ganze Layout zerstört.
Ich hoffe jemand weiss Rat, ich hätte gerne einen vollständigen Changelog und möchte nicht, dass ich stets "oben wegschneiden" muss.
ich habe ein JFrame, in welches ich ein JPanel (genannt mainPanel) setze, dieses mainPanel ist mit einem GridBagLayout versehen. Ich erstelle dann nach und nach neue Komponenten und füge diese mittels GridBagConstraints in das mainPanel ein.
Ich wollte einen Changelog machen, in welchen ich stets neuen Text einfüge. Ich dachte mir, ich mache das mit einem JTextPane, dessen ContentType ich auf "text/html" setze. Damit das scrollbar ist, habe ich davon ein JScrollPane erstellt. Dieses JScrollPane hänge ich dann ins mainPanel.
Das Problem dabei ist nun, dass, sobald der Text zu lange wird (also die Scrollbar tatsächlich auftritt) macht es mir das ganze Layout kaputt. Ich weiss einfach nicht woran es liegt.
Zur weiteren Erklärung hier ein Bild: (Ich bin mit der Forenregelung bzgl. Bilder nicht vertraut.. falls es zu gross ist kann ich es ändern.)
[Edit von L-ectron-X: Bild entfernt, hochgeladen und am Ende des Beitrages angehängt]
Zusätzlich noch die wichtigen Ausschnitte des Quellcodes:
[JAVA=42]private void initGUI(){
/*
* hier werden ein paar Elemente geladen
*/
chgLog=new JTextPane();
chgLog.setContentType("text/html");
chgLog.setEditable(false);
chgLogScroll=new JScrollPane(chgLog);
chgLog.addText("viele zeilenumbrüche")
//addText ist eine eigene Methode, fügt Text in die html Struktur ein
}
private void setGUI(){
GridBagConstraints c=new GridBagConstraints();
JPanel mainPanel=new JPanel(new GridBagLayout());
this.add(mainPanel);
//LINKE SEITE
c=new GridBagConstraints();
c.gridx=0; c.gridy=0; c.gridwidth=2;
mainPanel.add(mTopMenu, c);
c=new GridBagConstraints();
c.gridx=2; c.gridy=0; c.fill=GridBagConstraints.BOTH;
mainPanel.add(ctrlActionTxt,c);
c=new GridBagConstraints();
c.gridx=0; c.gridy=1; c.gridwidth=3; c.gridheight=10; c.fill=GridBagConstraints.BOTH;
mainPanel.add(drawArea,c);
drawArea.createBufferStrategy(2);
bufferStrategy=drawArea.getBufferStrategy();
c=new GridBagConstraints();
c.gridx=0; c.gridy=11;
c.insets=new Insets(10,0,0,0);
mainPanel.add(new JLabel("File Name: "),c);
c=new GridBagConstraints();
c.gridx=1; c.gridy=11; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(10,0,0,0);
mainPanel.add(fileName,c);
//RECHTE SEITE
c=new GridBagConstraints();
c.gridx=3; c.gridy=1; c.gridwidth=2; c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(0,10,0,0);
mainPanel.add(bMoveable,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=2; c.gridwidth=2; c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(30,10,0,0);
mainPanel.add(new JLabel("Density:"),c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=3; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(10,10,10,10);
mainPanel.add(sDensity,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=4; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(20,10,10,0);
mainPanel.add(new JLabel("Position:"),c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=5;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("X:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=5; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tPosX,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=6;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("Y:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=6; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tPosY,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=7; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(10,10,10,0);
mainPanel.add(new JLabel("Dimension:"),c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=8;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("X:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=8; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tDimX,c);
c=new GridBagConstraints();
c.gridx=3; c.gridy=9;
c.insets=new Insets(0,10,0,10);
mainPanel.add(new JLabel("Y:"),c);
c=new GridBagConstraints();
c.gridx=4; c.gridy=9; c.fill=GridBagConstraints.HORIZONTAL;
mainPanel.add(tDimY,c);
/*
* HIER IST DAS SCROLLPANE
*/
c=new GridBagConstraints();
c.gridx=3; c.gridy=10; c.gridwidth=2; c.fill=GridBagConstraints.BOTH;
c.insets=new Insets(30,10,0,0);
mainPanel.add(chgLogScroll,c);
/*
*
*/
c=new GridBagConstraints();
c.gridx=3; c.gridy=11; c.gridwidth=2; c.fill=GridBagConstraints.HORIZONTAL;
c.insets=new Insets(8,10,0,0);
mainPanel.add(sGrid,c);
}[/code]
Das Setzen von Maximum und Minimum Size hat .. überhaupt nichts gebracht, dieser Befehl scheint mir völlig unnütz zu sein, da er ignoriert zu werden scheint.
Ein weiteres Problem ist, dass sich das Textfeld einfach in die Breite ausdehnt, statt auch dort einen Scrollbalken zu erstellen, bis es auch da das ganze Layout zerstört.
Ich hoffe jemand weiss Rat, ich hätte gerne einen vollständigen Changelog und möchte nicht, dass ich stets "oben wegschneiden" muss.
Anhänge
Zuletzt bearbeitet von einem Moderator: