Richtiges einstellen der size von JPanels

N

Nali_karamba

Gast
Hallo habe ein problem einem Programm.
Ich fang mal mit der Ausgangssiutation an:
Mein JFrame bekommt ein ContentPane gesetzt

Java:
main_panel=new Main_content_Pane(userlist);
       
        this.setContentPane(main_panel);

dieses content Pane beinhalt ein Splitpane was wieder rum ein splitpane beinhaltet

Java:
Main_content_Pane(ArrayList userlist){
emailListe=new JTable(new Object[0][5],head_rows);
email=new JTextArea();
vertical=new JSplitPane(JSplitPane.VERTICAL_SPLIT,emailListe,email); // erstes SplitPane
postfaeher=new JTree();
horizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,postfaeher,vertical); //zweites SplitPane
this.add(horizontal)

dieses content Pane soll 500,500 sein bzw. wenn der rahmenvergrößert wird soll sich das Main_content_pane entsprechend anpassen.

ich hab nun schon einiges probiert und mit setMinimalSize(), setMaximumSize() und setPreferredSize() rumgespielt desweitern auch mit dem Flowlayout , aber funktioniert tut es immer noch nicht meine Idee ist den untersten componenten (email, emailListe, postfaeher) jeweils größen zuordnen an denen sich die obeeren dann orientieren aber irgendwie klappt das nicht richtig.
habt ihr da ne Idee.

PS: falls ich ausversehen ein unvollständigen Theard gepostet habe diesen bitte löschen :)
 

Marco13

Top Contributor
Ein KSKB würde helfen. Wenn man nur einem Panel eine PreferredSize gibt sollte das eigentlich passen, aber ich meine mich zu erinnern, dass JSplitPane da manchmal ein bißchen widerspenstig sind...
 

Nali_karamba

Mitglied
So hier nun mein KSKB :)

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bullshit;

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTree;

/**
 *
 * @author Jens Wipprich ==> jens.wipprich (at) uni-jena.de
 */
public class KSKB extends JFrame {

    public KSKB(){

        main_content panel= new main_content();
        this.setContentPane(panel);
        this.setMinimumSize(new Dimension(550,550));
        this.setVisible(true);
    }


    public class main_content extends JPanel{


        main_content(){
           String []head_rows={"test","test","test","test","test"};
           JTable emailListe=new JTable(new Object[0][5],head_rows);//content 1 für Splitpane "vertical"
           emailListe.setPreferredSize(new Dimension(400,250));
           JTextArea email=new JTextArea();               //content 2 für Splitpane "vertical"
           emailListe.setPreferredSize(new Dimension(400,250));
           JSplitPane vertical=new JSplitPane(JSplitPane.VERTICAL_SPLIT,emailListe,email); 
           //Splitpane vertical ; content 2 für splitpane "horizontal"

           JTree postfaecher=new JTree(); // content 1 für splitpane "horizontal"
           postfaecher.setPreferredSize(new Dimension(100,500));
           JSplitPane horizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,postfaecher,vertical);
//Splitpane "horizontal"
           this.add(horizontal);
       }
    }
 public static void main (String [] args){
    new KSKB();
 }
}


Im Moment hat das content Panel die size (500,500) und die das JFrame (550.550) allerdings wenn der nutzer was verschiebt sieht es jedesmal doof aus. Wie schaffe ich es das sich das content panel entsprechend vergrößert wenn der User das JFrame vergrößert !? Meine Idee wäre mit Rand abstand (Insets) wäre. ?
Bzw. auch für später zu wichtig zu wissen ich kann ich "sperren" das der Nutzer die größe des fensters verändern kann !?

:)
 

Marco13

Top Contributor
Hm... ???:L Meinst du sowas?
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

//package bullshit;

import java.awt.*;
import javax.swing.*;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTree;

/**
 *
 * @author Jens Wipprich ==> jens.wipprich (at) uni-jena.de
 */
public class KSKB2 extends JFrame {

    public KSKB2(){

        main_content panel= new main_content();
        this.setContentPane(panel);
        this.pack();
        this.setMinimumSize(this.getPreferredSize());
        this.setVisible(true);
    }


    public class main_content extends JPanel{


        main_content(){
           String []head_rows={"test","test","test","test","test"};
           JTable emailListe=new JTable(new Object[0][5],head_rows);//content 1 für Splitpane "vertical"
           emailListe.setPreferredSize(new Dimension(400,250));
           JTextArea email=new JTextArea();               //content 2 für Splitpane "vertical"
           emailListe.setPreferredSize(new Dimension(400,250));
           JSplitPane vertical=new JSplitPane(JSplitPane.VERTICAL_SPLIT,emailListe,email);
           //Splitpane vertical ; content 2 für splitpane "horizontal"

           JTree postfaecher=new JTree(); // content 1 für splitpane "horizontal"
           postfaecher.setPreferredSize(new Dimension(100,500));
           JSplitPane horizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,postfaecher,vertical);
//Splitpane "horizontal"
           this.setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
           this.setLayout(new GridLayout(1,1));
           this.add(horizontal);
       }
    }
 public static void main (String [] args){
    new KSKB2();
 }
}

Größenänderung vermeiden:
frame.setResizeable(false);
 

Nali_karamba

Mitglied
Ja genau das meinte ich, "horizontal" auf dem JPanel mit nem Layout zulegen und die entsprechende Border zu deklarieren. Mhh hätte ich selber drauf kommen können, dafür hat sich jetzt mein ganzes Verständnis von Panel, Frame und Content Panels erhöht.

DAfür Danke :) :toll:


PS: da ich den Theard als Gast geschrieben habe kann ich den jetzt irgendwie nicht "als erledigt markieren"
 

Nali_karamba

Mitglied
nun noch ein Problem mit folgendem Beispiel:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bullshit;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

/**
 *
 * @author Jens Wipprich ==> jens.wipprich (at) uni-jena.de
 */
public class KSKB2 extends JFrame {


    public KSKB2(){

        this.setContentPane(new panel());
        this.pack();
        this.setMinimumSize(this.getPreferredSize());
        this.setVisible(true);


    }
    public class panel extends JPanel{

        private JLabel Absender=new JLabel();
        private JLabel AbsenderText =new JLabel("Absender :");
        private JLabel Betreff=new JLabel();
        private JLabel BetreffText =new JLabel("Betreff :");
        private JLabel Datum=new JLabel();
        private JLabel DatumText =new JLabel("Datum :");
        private JTextArea email=new JTextArea();

        public panel(){
            createPanel();
        }

        public void createPanel(){
        this.setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        constraints=makeConstraints(1,1,1,1);
        AbsenderText.setPreferredSize(new Dimension(50,10));
        this.add(AbsenderText,constraints);
        constraints=makeConstraints(2,1,1,1);
        Absender.setPreferredSize(new Dimension(550,10));
        this.add(Absender,constraints);
        constraints=makeConstraints(1,2,1,1);
        BetreffText.setPreferredSize(new Dimension(50,10));
        this.add(BetreffText,constraints);
        constraints=makeConstraints(2,2,1,1);
        Betreff.setPreferredSize(new Dimension(550,10));
        this.add(Betreff,constraints);
        constraints=makeConstraints(1,3,1,1);
        DatumText.setPreferredSize(new Dimension(50,10));
        this.add(DatumText,constraints);
        constraints=makeConstraints(2,3,1,1);
        Datum.setPreferredSize(new Dimension(550,10));
        this.add(Datum,constraints);
        constraints=makeConstraints(1,4,2,1);
        email.setPreferredSize(new Dimension(600,230));
        this.add(email);
    }
    private GridBagConstraints makeConstraints (int gridx , int gridy , int gridwidth , int gridheight){
       GridBagConstraints constraints = new GridBagConstraints();
       constraints.gridx=gridx;
       constraints.gridy=gridy;
       constraints.gridwidth=gridwidth;
       constraints.gridheight=gridheight;
       constraints.insets = new Insets(2,2,2,2);
       return constraints;
    }
    }

    public static void main (String [] args){
        new KSKB2();
    }
}
Es soll dann so aussehen:

Absendertext(1,1,1,1) : Absender(1,2,1,1)
Betrefftext(1,2,1,1) : Betreff(2,2,1,1)
DatumText(1,3,1,1): Datum(2,3,1,1)
------------------>Email(1,4,2,1)<-----------------

in Klammer stehen immer die Zahlen für die constraints beim GridBagLayout (gridx,gridy,gridweight,gridheight) gebraucht werden.

leider funktioniert die ganze Sache nicht wie ich es mir vorstelle da er die Labels Rechts neben die TextArea schreibt anstatt sie darüber zusetzen.

und jetzt die Preisfrage warum !?

Lg
 

Marco13

Top Contributor
Hmpf. Das GridBagLayout ist ein Krampf, sollte man nur da verwenden wo es unbedingt nötig ist :noe:

Lies' dir die Dokus zu den Layouts (und Swing allgemein) durch, sonst wird das nix.
Java:
import java.awt.*;
import javax.swing.*;

public class KSKB3 extends JFrame {

    private JLabel absender=new JLabel();
    private JLabel betreff=new JLabel();
    private JLabel datum=new JLabel();
    private JTextArea email=new JTextArea();

    public KSKB3()
    {
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(createTitlePanel(), BorderLayout.NORTH);
        email.setPreferredSize(new Dimension(500, 500));
        getContentPane().add(email, BorderLayout.CENTER);

        pack();
        setMinimumSize(this.getPreferredSize());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);


    }

    private JPanel createTitlePanel()
    {
        JPanel titlePanel = new JPanel(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();

        constraints=makeConstraints(0,0,1,1);
        titlePanel.add(new JLabel("Absender :"),constraints);

        constraints=makeConstraints(1,0,1,1);
        titlePanel.add(absender,constraints);

        constraints=makeConstraints(0,1,1,1);
        titlePanel.add(new JLabel("Betreff :"),constraints);

        constraints=makeConstraints(1,1,1,1);
        titlePanel.add(betreff,constraints);

        constraints=makeConstraints(0,2,1,1);
        titlePanel.add(new JLabel("Datum :"),constraints);

        constraints=makeConstraints(1,2,1,1);
        titlePanel.add(datum,constraints);

        datum.setPreferredSize(new Dimension(500, 20));

        return titlePanel;
    }
    private static GridBagConstraints makeConstraints(
        int gridx , int gridy , int gridwidth , int gridheight)
    {
       GridBagConstraints constraints = new GridBagConstraints();
       constraints.gridx=gridx;
       constraints.gridy=gridy;
       constraints.gridwidth=gridwidth;
       constraints.gridheight=gridheight;
       constraints.insets = new Insets(2,2,2,2);
       return constraints;
    }

    public static void main (String [] args){
        new KSKB3();
    }
}
 

Nali_karamba

Mitglied
Ja es ist wirklich in Krampf, allerdings denke ich das man damit schon am meisten machen kann und jetzt kommt der Witz des Tages.
Eigentlich funktioniert auch mein Code allerdings hat sich bei mir ein ziemlich dummer Fehler eingeschlichen, weswegen man mich wohl offiziell hauen darf.

Java:
        constraints=makeConstraints(1,4,2,1);
        email.setPreferredSize(new Dimension(600,230));
        this.add(email);

gut wenn man die constraints richtig definiert, schlecht wenn man sie nicht benutzt um die Componete hinzuzufügen. -.-

Java:
        constraints=makeConstraints(1,4,2,1);
        email.setPreferredSize(new Dimension(600,230));
        this.add(email,constraints);

Als nächstes werde ich jetzt noch Borders hinzufügen, bei entsprechenden Problemen würde ich mich hier nochmal melden.
 

Nali_karamba

Mitglied
Ja das stimmt hab ich auch geändert, irgendwann fällt man damit bestimmt hin wenn mans falsch macht.
hab das ganze projekt jetzt nochmal ein bissel überarbeitet und komme auch so recht gut hin allerdings, hakt noch es noch ein einem einzigen Punkt.

Hier mal erst der Quellcode dazu:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bullshit;


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

public class KSKB3 extends JFrame {

    private JLabel Absender=new JLabel();
    private JLabel AbsenderText=new JLabel("Absender :");
    private JLabel Betreff=new JLabel();
    private JLabel BetreffText=new JLabel("Betreff :");
    private JLabel Datum=new JLabel();
    private JLabel DatumText=new JLabel("Datum :");
    private JTextArea email=new JTextArea();

    public KSKB3()
    {
        this.setContentPane(new Panel());
        this.setMinimumSize(this.getPreferredSize());
        this.pack();
        this.setVisible(true);


    }



    public class Panel extends JPanel{

        private TitlePanel titel=new TitlePanel();
        private EMailPanel emailPanel =new EMailPanel();


        public Panel(){
            titel.createTitlePanel();
        titel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        //titel.setPreferredSize(new Dimension(600,60));
        emailPanel.createEMailPanel();
        emailPanel.setPreferredSize(new Dimension(600,220));
        this.setLayout(new BorderLayout());
        this.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        this.add(titel, BorderLayout.NORTH);
        this.add(emailPanel, BorderLayout.CENTER);
        }


    }
    private static GridBagConstraints makeConstraints(
        int gridx , int gridy , int gridwidth , int gridheight)
    {
       GridBagConstraints constraints = new GridBagConstraints();
       constraints.gridx=gridx;
       constraints.gridy=gridy;
       constraints.gridwidth=gridwidth;
       constraints.gridheight=gridheight;
       constraints.insets = new Insets(2,2,2,2);
       return constraints;
    }




    public class TitlePanel extends JPanel{

        public TitlePanel(){
        }
        public void createTitlePanel(){
        this.setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        constraints=makeConstraints(0,0,1,1);
        constraints.anchor=constraints.NORTHWEST;
        AbsenderText.setPreferredSize(new Dimension(100,10));
        this.add(AbsenderText,constraints);
        constraints=makeConstraints(1,0,1,1);
        constraints.fill=constraints.VERTICAL;
        Absender.setPreferredSize(new Dimension(450,10));
        this.add(Absender,constraints);
        constraints=makeConstraints(0,1,1,1);
        BetreffText.setPreferredSize(new Dimension(100,10));
        this.add(BetreffText,constraints);
        constraints=makeConstraints(1,1,1,1);
        constraints.fill=constraints.VERTICAL;
        Betreff.setPreferredSize(new Dimension(450,10));
        this.add(Betreff,constraints);
        constraints=makeConstraints(0,2,1,1);
        DatumText.setPreferredSize(new Dimension(100,10));
        this.add(DatumText,constraints);
        constraints=makeConstraints(1,2,1,1);
        constraints.fill=constraints.VERTICAL;
        Datum.setPreferredSize(new Dimension(450,10));
        this.add(Datum,constraints);
        }

    }



    public class EMailPanel extends JPanel{

        public EMailPanel(){


        }
        public void createEMailPanel(){
            this.setLayout(new GridLayout(1,1));
            this.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
            this.add(email);
        }
    }



    public static void main (String [] args){
        new KSKB3();
    }
}

zu erklärung KSKB3 ist eigentlich ein JPanel was in einem Splitpane liegt dieses liegt in einem anderem Splitpane was in dem JFrame liegt. Allerdings wird man in einem TeilBereich des Progs auch KSKB3 direkt in einem JFrame aufrufen.

So nun zu meinem Problem wie man sieht ist das passt sich das EMailPanel der grösse des JFrames an, ebenso das TitlePanel (was man am schwarzen Rahmen sehr schön sieht), was ich allerdings doof finde ist das der Content von dem TitlePanel sich bei größern des JFrames verschiebt. was nicht so sein sollte, der Content sollte IMMER ganz links stehen und sich nicht verschieben. Wie kann man das realiesieren !?

Lg Jens
 

Marco13

Top Contributor
Lies - mehr - Doku
(und probier' an Minibeispielen rum!)

Java:
    private static GridBagConstraints makeConstraints(
        int gridx , int gridy , int gridwidth , int gridheight, double weightx)
    {
       GridBagConstraints constraints = new GridBagConstraints();
       constraints.gridx=gridx;
       constraints.gridy=gridy;
       constraints.gridwidth=gridwidth;
       constraints.gridheight=gridheight;
       constraints.weightx=weightx;
       constraints.insets = new Insets(2,2,2,2);
       return constraints;
    }




    public class TitlePanel extends JPanel{

        public TitlePanel(){
        }
        public void createTitlePanel(){
        this.setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();
        this.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        constraints=makeConstraints(0,0,1,1,0);
        constraints.anchor=constraints.NORTHWEST;
        //AbsenderText.setPreferredSize(new Dimension(100,10));
        this.add(AbsenderText,constraints);
        constraints=makeConstraints(1,0,1,1,1);
        constraints.fill=constraints.VERTICAL;
        //Absender.setPreferredSize(new Dimension(450,10));
        this.add(Absender,constraints);
        constraints=makeConstraints(0,1,1,1,0);
        //BetreffText.setPreferredSize(new Dimension(100,10));
        this.add(BetreffText,constraints);
        constraints=makeConstraints(1,1,1,1,1);
        constraints.fill=constraints.VERTICAL;
        //Betreff.setPreferredSize(new Dimension(450,10));
        this.add(Betreff,constraints);
        constraints=makeConstraints(0,2,1,1,0);
        //DatumText.setPreferredSize(new Dimension(100,10));
        this.add(DatumText,constraints);
        constraints=makeConstraints(1,2,1,1,1);
        constraints.fill=constraints.VERTICAL;
        //Datum.setPreferredSize(new Dimension(450,10));
        this.add(Datum,constraints);
        }

    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Point2D.Double Kurven - Beschriftung und richtiges Anklicken AWT, Swing, JavaFX & SWT 7
K richtiges Ausrichten mehrerer Labels AWT, Swing, JavaFX & SWT 3
J Spieleprogramm als "richtiges" Spiel starten AWT, Swing, JavaFX & SWT 19
S Richtiges Vorgehen bei GUI-Programmierung AWT, Swing, JavaFX & SWT 7
_user_q [JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf? AWT, Swing, JavaFX & SWT 6
I JOptionPane maximale Zeichen einstellen AWT, Swing, JavaFX & SWT 2
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
J SWT Scrollgeschwindigkeit einstellen AWT, Swing, JavaFX & SWT 4
C Button Größe einstellen klappt nicht (setBounds) AWT, Swing, JavaFX & SWT 8
H Fenstergröße bei Mac und Windows gleich einstellen? AWT, Swing, JavaFX & SWT 3
eLogic Look And Feel - Einstellen AWT, Swing, JavaFX & SWT 3
N Höhe einstellen JScrollPane AWT, Swing, JavaFX & SWT 3
L JFreeChart - Linienstärke einstellen AWT, Swing, JavaFX & SWT 2
J JMenu unterschiedliche Background einstellen AWT, Swing, JavaFX & SWT 5
O UIManager.put - Standardfarbe von JPanel einstellen? AWT, Swing, JavaFX & SWT 2
S "normales" Fenster als modal einstellen AWT, Swing, JavaFX & SWT 2
R Einstellen der Maus Rad Geschwindigkeit beim Scrollen AWT, Swing, JavaFX & SWT 3
P Komponente benutzerdefiniert einstellen AWT, Swing, JavaFX & SWT 2
B Abstand zwischen einzelnen Elementen einstellen AWT, Swing, JavaFX & SWT 2
J JTable - Zellengröße einstellen AWT, Swing, JavaFX & SWT 3
G Fenstergröße nur nach oben veränderbar einstellen AWT, Swing, JavaFX & SWT 7
P JFrame: Mindestgröße einstellen AWT, Swing, JavaFX & SWT 2
H GridBagLayout richtig einstellen AWT, Swing, JavaFX & SWT 11
M Focus einstellen AWT, Swing, JavaFX & SWT 3
L JavaFX Canvas max size? AWT, Swing, JavaFX & SWT 1
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
F GWT Screen size AWT, Swing, JavaFX & SWT 2
H preferred size abhängig von Fenstergröße berechnen AWT, Swing, JavaFX & SWT 11
M Font Size in FormsEditor AWT, Swing, JavaFX & SWT 2
S jTable size und Text darstellung AWT, Swing, JavaFX & SWT 2
1 Swing manual resize table column to min size AWT, Swing, JavaFX & SWT 2
E Jlable text an size scalieren AWT, Swing, JavaFX & SWT 6
G JOptionPane.showConfirmDialog size problem AWT, Swing, JavaFX & SWT 3
A Swing Frame-Size / JButton AWT, Swing, JavaFX & SWT 19
Dragonfire Swing CardLayout Maximum Size AWT, Swing, JavaFX & SWT 7
B SWT Problem mit Alignment/Size AWT, Swing, JavaFX & SWT 3
R Container Size Problem AWT, Swing, JavaFX & SWT 5
S JPanel ohne Size AWT, Swing, JavaFX & SWT 7
F JComboBox Size AWT, Swing, JavaFX & SWT 2
E Problem mit JPanel - Wann wird size berechnet? AWT, Swing, JavaFX & SWT 5
G JPanel immer max-size öffnen. Wie? AWT, Swing, JavaFX & SWT 9
O JFrame und Size der Komponenten AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben