Layoutaufteilung

Status
Nicht offen für weitere Antworten.
M

medi

Gast
hätte gerne einen beispielcode der mir einfach ein fenster in 2 Teile aufspaltet (links und rechts) aber der rechte Teil soll nur ein drittel belegen und der linke 2/3 des Fensters.
hab bisher immer nur mit einfachen Programmen gearbeitet und würde mit meinem momentanten wissensstand nur 3 gleichgroße Spalten hinkriegen anstatt 2 mit der oben genannten aufteilung.
weiss nicht wie das hier bei euch so im forum läuft aber wenn jemand grad zeit und lust hat kann er/sie mir bitte einen kleinen beispielcode schicken :)
ich bedanke mich im voraus dafür!

medi
 

hdi

Top Contributor
Wie gross deine einzelnen Komponenten sind setzt du mit preferredSize.

Code:
JPanel p = new JPanel() // hat standardmässig das FlowLayout, heisst es setzt alle Komponenten von links nach rechts ein
JPanel sub1 = new JPanel();
JPanel sub2 = new JPanel();

int fensterBreite = 100;
int fensterHöhe = 200;

sub1.setPreferredSize((int)((fensterBreite/100.0) * 66), fensterHöhe); // 66% der Breite
sub2.setPreferredSize((int)((fensterBreite/100.0) * 33), fensterHöhe); // 33% der Breite
p.add(sub1);
p.add(sub2);

JFrame frame = new JFrame();
frame.add(p);
frame.pack(); // <-- Das berechnet dir jetz die Grösse aus der preferredSize der Komponenten
frame.setVisible(true);
 
G

Guest

Gast
The method setPreferredSize(Dimension) in the type JComponent is not applicable for the arguments (int, int)
The method setPreferredSize(Dimension) in the type JComponent is not applicable for the arguments (int, int)

das sind die beiden fehlermeldungen die er mir gibt. (?)
 

hdi

Top Contributor
Ach shit sry, die Methode setPreferredSize wil ne Dimension.

also:

setPreferredSize(new Dimension((int)((fensterBreite/100.0) * 66), fensterHöhe));

bei sowas, wenn man nicht genau weiss welche Methoden es für ein Objekt (in deinem Fall ein JPanel) gibt, kann man
in der API nachkucken:

http://java.sun.com/javase/6/docs/api/

Links in der Liste "JPanel" suchen, dort siehst du dann für diese Klasse alle Methoden, und dort siehst du auch dass du eine Dimension brauchst bei dieser Methode. Und wenn du wiederum nicht weisst, was ne Dimension ist, kuckst du dir halt die Klasse Dimension an, da siehst du die Konstruktoren.

Die API is sehr wichtig, bookmark dir das
 

Zed

Bekanntes Mitglied
medi? Bist du mein ex Studienkollege?

Mach ein Gridbaglayout und add dir 2 Panels die eine Komponente machst eine x Ausdehung von 0.66 die andere von 0.33
Code:
/**
    * Fügt eine Componenten in das GridbagLayout ein
    * @param aComp
    * @param gridX
    * @param gridY
    * @param gridWidth  
    * @param gridHeight
    * @param weightX <-- Denn Wert meine ich mit X Ausdehung
    * @param weightY
    * @param anchor
    * @param fill
    * @param insets
    */
   public void addComponentInLayout(Component aComp, int gridX, int gridY, int gridWidth, int gridHeight, double weightX,
         double weightY, int anchor, int fill, Insets insets) {
      GridBagConstraints theConstraints = new GridBagConstraints(gridX, gridY, gridWidth, gridHeight, weightX,
            weightY, anchor, fill, insets, 0, 0);

      add(aComp, theConstraints);
   }

/**
    * Fügt eine Componenten in ein z.B. Panel ein.
    * @param Ein Container
    * @param aComp
    * @param gridX
    * @param gridY
    * @param gridWidth
    * @param gridHeight
    * @param weightX
    * @param weightY
    * @param anchor
    * @param fill
    * @param insets
    */
   public void addComponentInContainer(JComponent aPanel,Component aComp, int gridX, int gridY, int gridWidth, int gridHeight, double weightX,
         double weightY, int anchor, int fill, Insets insets) {
      GridBagConstraints theConstraints = new GridBagConstraints(gridX, gridY, gridWidth, gridHeight, weightX,
            weightY, anchor, fill, insets, 0, 0);
      aPanel.add(aComp, theConstraints);
      
   }
 
M

medi

Gast
danke für die zahlreichen antworten. ich werde gleich mal alles ausprobieren und schauen was wohl die beste lösung für mich ist. ob ich studienkollege bin oder nicht ist mir unbekannt ^^ frag einfach mal in reallife ob ich "ich" bin ;)
danke nochmals
 
G

Guest

Gast
ich hab jetzt mal einen lösungsversuch gemacht und das klappt auch soweit, nur dass ers irgendwie nicht so darstellt wie man es gern hätte .. :-/


Code:
import java.awt.*;
import java.net.*;
import javax.swing.*;
import javax.swing.border.*;


public class Introduction1 extends JPanel {
 
    private JLabel blankSpace;
    private JLabel blankSpace2;
    private JLabel jLabel1;
    private JLabel jLabel2;
    private JLabel jLabel3;
    private JLabel jLabel4;
    private JLabel jLabel5;
    private JLabel jLabel6;
    private JLabel jLabel7;

    private JLabel welcomeTitle;
    private JPanel contentPanel;
    
    public Introduction1() {
        
        contentPanel = getContentPanel();
        contentPanel.setBorder(new EmptyBorder(new Insets(10, 10, 10, 10)));

        setLayout(new BorderLayout());
        add(contentPanel, BorderLayout.CENTER);
    }
    
    
    private JPanel getContentPanel() {
        
        JPanel contentPanel = new JPanel();
        JPanel sub1 = new JPanel();
        JPanel sub2 = new JPanel();
        JPanel p = new JPanel();  
        welcomeTitle = new JLabel();
        blankSpace = new JLabel();
        blankSpace2 = new JLabel();
        jLabel1 = new JLabel();
        jLabel2 = new JLabel();
        jLabel3 = new JLabel();
        jLabel4 = new JLabel();
        jLabel5 = new JLabel();
        jLabel6 = new JLabel();
        jLabel7 = new JLabel("Schritt 1");
    	int fensterBreite = 100; 
    	int fensterHöhe = 200; 

        contentPanel.setLayout(new GridLayout(0,1));

        welcomeTitle.setFont(new java.awt.Font("MS Sans Serif", Font.BOLD, 11));
        welcomeTitle.setText("Willkommen");
        contentPanel.add(welcomeTitle, BorderLayout.NORTH);

        sub1.setLayout(new GridLayout(0, 1));
        sub2.setLayout(new GridLayout(0, 1));
        
    	sub1.setPreferredSize(new Dimension((int)((fensterBreite/100.0) * 66), fensterHöhe));  // 66% der Breite 
    	sub2.setPreferredSize(new Dimension((int)((fensterBreite/100.0) * 33), fensterHöhe));  // 33% der Breite 
    	p.add(sub1); 
    	p.add(sub2); 

        

        sub1.add(jLabel6);
        
        sub2.add(jLabel7);

        contentPanel.add(p, BorderLayout.CENTER);
        return contentPanel;
        
    }
 
}


idee?
 
M

medi

Gast
das ist voll zusammengedrückt und ich komm nicht weiter mit der problematik.. *grummel* kann sich das bitte jemand mal anschauen?
 

Zed

Bekanntes Mitglied
Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Introduction1 extends JPanel {

   
	private static final long serialVersionUID = 1L;
	
	public Introduction1() {
       this.setLayout(new GridBagLayout());
       addComponentInLayout(getWelcomePanel(),
    		   0, 0, 1, 1, 
    		   0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0));
       addComponentInLayout(getSplitPanel(),
    		   0, 1, 1, 1, 
    		   1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0));
    	
    }
   
   
    private JPanel getWelcomePanel() {
    	JPanel welcomePanel = new JPanel();
    	welcomePanel.setLayout(new FlowLayout());
    	welcomePanel.setMinimumSize(new Dimension(150,22));
    	welcomePanel.setPreferredSize(new Dimension(150,22));
    	
    	JLabel welcomeLabel = new JLabel("Willkommen...");
    	
    	welcomePanel.add(welcomeLabel);
    	
    	return welcomePanel;
	}


	private JPanel getSplitPanel() {
       
        JPanel splitPane = new JPanel();
        JPanel sub1 = new JPanel();
        sub1.setBackground(Color.red);
        
        JPanel sub2 = new JPanel();
        sub2.setBackground(Color.BLACK);
    
        splitPane.setLayout(new GridBagLayout());

       addComponentInContainer(splitPane, sub1, 
    		   0, 0, 1, 1, 
    		   0.33, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0));
       addComponentInContainer(splitPane, sub2, 
    		   1, 0, 1, 1, 
    		   0.66, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0));
       
       

       
        return splitPane;
       
    }
    /**
     * Fügt eine Componenten in das GridbagLayout ein
     * @param aComp
     * @param gridX
     * @param gridY
     * @param gridWidth 
     * @param gridHeight
     * @param weightX <-- Denn Wert meine ich mit X Ausdehung
     * @param weightY
     * @param anchor
     * @param fill
     * @param insets
     */
    public void addComponentInLayout(Component aComp, int gridX, int gridY, int gridWidth, int gridHeight, double weightX,
          double weightY, int anchor, int fill, Insets insets) {
       GridBagConstraints theConstraints = new GridBagConstraints(gridX, gridY, gridWidth, gridHeight, weightX,
             weightY, anchor, fill, insets, 0, 0);

       add(aComp, theConstraints);
    } 
    /**
     * Fügt eine Componenten in ein z.B. Panel ein.
     * @param Ein Container
     * @param aComp
     * @param gridX
     * @param gridY
     * @param gridWidth
     * @param gridHeight
     * @param weightX
     * @param weightY
     * @param anchor
     * @param fill
     * @param insets
     */
    public void addComponentInContainer(JComponent aPanel,Component aComp, int gridX, int gridY, int gridWidth, int gridHeight, double weightX,
          double weightY, int anchor, int fill, Insets insets) {
       GridBagConstraints theConstraints = new GridBagConstraints(gridX, gridY, gridWidth, gridHeight, weightX,
             weightY, anchor, fill, insets, 0, 0);
       aPanel.add(aComp, theConstraints);
      
    } 

}

Ich habs mal bissel umgebastellt
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben