# haben panels von anfang an einen dummen rand?



## Onkel markus (20. Okt 2006)

Hi, der Titel sagt alles
Denn bei mir werden (egal moit welchem Layout und obwohl die Zahlen zu 100% stimmen) die Kompüonenten immer leicht versetzt angezeigt.
Wie kann man den rand (wenn es daran liegt) entfernen?
Mfg


----------



## SlaterB (20. Okt 2006)

danke, dass du von all deinen zahllosen Beispielen, an denen man das Problem genau erkennt, nicht ein einziges postest,

da darf man sich also die Arbeit selber machen 
ich sehe bei mir keinen Versatz:


```
package test;

import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestFrame extends JFrame {

    public TestFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        int breite = 300;
        int hoehe = 200;
        JPanel last = new JPanel();
        last.setLayout(null);
        getContentPane().add(last);

        for (int i = 0; i < 50; i++) {
            JPanel p = new JPanel();
            p.setLayout(null);
            p.setBounds(0, 0, breite, hoehe);
            p.setBorder(BorderFactory.createLineBorder(Color.BLUE));

            last.add(p);
            last = p;
            breite -= 3;
            hoehe -= 2;
        }
        JLabel l = new JLabel("here");
        l.setBounds(3,3,100,20);
        last.add(l);

        setSize(400, 300);
        setVisible(true);
    }

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

genauso bei AWT, wo ich aber nur begrenzt viele Panels verschachteln darf,
sonst gibts bei mir ne Exception?!..


```
package test;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestFrame extends Frame {

    public TestFrame() {
        // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent arg0) {
                System.exit(0);
            }
        });

        int breite = 300;
        int hoehe = 200;
        Panel last = new Panel();
        add(last);
        last.setLayout(null);
        for (int i = 0; i < 45; i++) {
            Panel p = new Panel();
            p.setLayout(null);
            p.setBounds(0, 0, breite, hoehe);
            p.setBackground(new Color((int) ( Math.random() * 200000 )));

            last.add(p);
            last = p;
            breite -= 3;
            hoehe -= 2;
        }
        Label l = new Label("here");
        l.setBounds(3, 3, 100, 20);
        last.add(l);
        setSize(400, 300);
        setVisible(true);
    }

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


----------



## Onkel markus (20. Okt 2006)

Naja wenn ich allgemeine Fragen habe wird das kaum was bringen den Code zu posten, oder?
Hmm wie gesagt bei mir ists so: je mehr Panels ineinander, umso mehr rand....
sonen gammel();


----------



## Beni (20. Okt 2006)

Nicht das ich dein Problem nachvollziehen könnte (Screenshot?), aber Ränder setzt man mit "setBorder" (ich geh mal davon aus, dass deine Layouts korrekt konfiguriert sind).


----------



## Onkel markus (21. Okt 2006)

naja schjon allein die tatsache dass in ein panel mit vorgesetzter größe (zum Beispiel 100*100) nur zwei teile reinpassen die zusammen ca 90 ergeben (sonst verschwindet das zweite unten) sollte eigentlich daraufhinweisen dass es da nen rand gibt. oder?


----------



## Beni (21. Okt 2006)

"ca", "hinweisen"... das sind keine Beweise. Zeig den Code der das zusammenbaut, dann werden wir viel schneller eines von:
- dir zustimmen
- einen Denkfehler finden
- garnichts finden und uns ebenfals wundern
... tun


----------



## André Uhres (21. Okt 2006)

Du meinst vielleicht die Zwischenräume beim FlowLayout: 5 ist default,
musst du halt auf 0 setzen. Beispiel:

```
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
```


----------



## Onkel markus (27. Okt 2006)

Sorry hab den thread ganz vergessen
Das ist BorderLayout.
Und SOUTH. (Die MenuBar).
Da ist IMMER nen Rand drunter(habs mal farbig gemacht damit mans besser sehen kann....

http://img139.imageshack.us/img139/9406/jpgkopiegv1.jpg
mfg


----------



## André Uhres (27. Okt 2006)

Onkel markus hat gesagt.:
			
		

> ..Da ist IMMER nen Rand drunter..


Die Panels sind ja in einem SplitPane, das hat nix mit dem LayoutManager zu tun.
Was du siehst sind einfach die Insets vom JSplitPane  :wink:


----------



## Onkel markus (27. Okt 2006)

is nur nen Beispiel. Ich könnt das selbe mit nem Normalen Panel machen....


----------



## André Uhres (27. Okt 2006)

Onkel markus hat gesagt.:
			
		

> is nur nen Beispiel. Ich könnt das selbe mit nem Normalen Panel machen....


Hab's mit nem Normalen Panel probiert, da ist aber kein Rand zu sehen  :roll:


----------



## Onkel markus (27. Okt 2006)

stimmt, wird an meinem java liegen...
wenn ich zwei Componenten nebeneinander haben will ensteht ein rand.


----------



## André Uhres (27. Okt 2006)

Onkel markus hat gesagt.:
			
		

> stimmt, wird an meinem java liegen...


Naja, Java ist Java. Du hast wahrscheinlich die letzte Version,
obschon dieses Problem wohl kaum von der Javaversion abhängt.



			
				Onkel markus hat gesagt.:
			
		

> wenn ich zwei Componenten nebeneinander haben will ensteht ein rand.


Nicht bei normalen JPanels im BorderLayout  :wink:


----------



## Onkel markus (27. Okt 2006)

mmmh.... ich weiß net. Also wie ist denn das: wenn ich bei einer Komponente ne preferred Size reinkippe. Kann das saran liegen? (Muss im BorderLayout die  Höhe bei EAST und WEST gleich sein?


----------



## André Uhres (27. Okt 2006)

Onkel markus hat gesagt.:
			
		

> mmmh.... ich weiß net. Also wie ist denn das: wenn ich bei einer Komponente ne preferred Size reinkippe. Kann das saran liegen? (Muss im BorderLayout die  Höhe bei EAST und WEST gleich sein?


Bei EAST/WEST spielt nur die Breite ein Rolle, bei NORTH/SOUTH nur die Höhe, bei CENTER gar nix.

```
/*
 * RandTest.java
 */
package layout;
import java.awt.*;
import javax.swing.*;
public class RandTest extends JFrame {
    public RandTest() {
        try{
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
        }catch(Exception ex){}
        panel1 = new JPanel();
        panel2 = new JPanel();
        button = new JButton();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("Title");
        panel1.setBackground(new Color(0, 255, 0));
        panel1.setPreferredSize(new Dimension(250, 10));
        getContentPane().add(panel1, BorderLayout.WEST);
        panel2.setBackground(new Color(255, 0, 0));
        panel2.setPreferredSize(new Dimension(101, 10));
        button.setText("Datei bearbeiten");
        button.setFocusable(false);
        panel2.add(button);
        getContentPane().add(panel2, BorderLayout.CENTER);
        setSize(800,600);
        setLocationRelativeTo(null);
    }
    public static void main(String args[]) {
        new RandTest().setVisible(true);
    }
    private JButton button;
    private JPanel panel1;
    private JPanel panel2;
}
```


----------



## Onkel markus (27. Okt 2006)

Hä? net andersrum?


----------



## André Uhres (27. Okt 2006)

Onkel markus hat gesagt.:
			
		

> Hä? net andersrum?


Nein, das ist schon richtig so.
Wenn du "RandTest" anschaust und ausprobierst, dann siehst du, daß für WEST nur die Breite zählt und
für CENTER gar nix  :wink:


----------



## Onkel markus (27. Okt 2006)

wie meinst du das jetzt?
Das das BorderLayout die PreferredSize bei EAST+WEST und Höhe halt ignoriert oder das EAST und WEST bei höhe nen andern Wert haben können (und folglich halt das´nn verschieden aussehen?
(das selbe bei NORTH und WSOUUTH bei breite)


----------



## André Uhres (27. Okt 2006)

Die Dimensionen von denen ich sagte, daß sie für die PreferredSize ohne Bedeutung sind, 
passen sich automatisch an den verfügbaren Platz an: das ist der Vorteil eines LayoutManagers


----------



## Onkel markus (27. Okt 2006)

jo jetzt versteh ich dich.. ich dachte du meintest das mit den verschiedenen Größen. Und von EAST zu WEST dürfen ben halt nur die Breiten unterschiedlich sein...


----------

