Layout Problem, Ideen gesucht

Status
Nicht offen für weitere Antworten.

metalfan

Aktives Mitglied
Hi,

habe ein Problem mit der Ergebnisausgabe meiner Suche, hier ein Screenshot:

http://img11.picsplace.to/img.php?file=img10/7/snapshot1_000.png

Auf der linken Seite gabs es einen Treffer, rechts mehrere. Das Problem ist das der eine Treffer nicht die gesamte verfügbare Höhe einnehmen soll sondern nur soviel wie er wirklich braucht.

Was wie gemacht wird:

Jedes Ergebnis besteht aus einem JPanel welches mehrer JLabels (Titel, Inventarnummer, ISBN..) und ein imageIcon beinhaltet. <- War jetzt meine erste idee da die Anzahl der Ergebnisse variabel ist.

Die JPanels (Ergebnisse) werden auf einem GridBagLayout plaziert, dabei wird in einer Schleife der Wert für gridy hochgezählt.

Momentan löse ich das Problem so das die Ergebnismenge abgefragt wird und für 1-5 Ergebnisse jeweils unterschiedliche viele JLabels(" "); erzeugt werden. Diese Lösung scheitert aber schon wenn die Anwendung von der Fenster Größe auf Vollbild umgestellt wird :(

Hat jemand eine Idee wie man die Platzaufteilung leichter bewerkstelligen kann?

Julius
 

André Uhres

Top Contributor
metalfan hat gesagt.:
..Jedes Ergebnis besteht aus einem JPanel welches mehrer JLabels
(Titel, Inventarnummer, ISBN..) und ein imageIcon beinhaltet...Diese Lösung scheitert aber schon
wenn die Anwendung von der Fenster Größe auf Vollbild umgestellt wird..
Hat jemand eine Idee wie man die Platzaufteilung leichter bewerkstelligen kann?
Code:
/*
 * TableLayoutDemo.java
 */
//package tableDemo;
import java.awt.*;
import java.net.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableLayoutDemo extends JFrame {
    public TableLayoutDemo() {
        super("TableLayout Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(600, 600);
        setLocationRelativeTo(null);
        table = new JTable(0,1);
        table.setDefaultRenderer(Object.class, new PanelRenderer());
        table.setRowHeight(270);
        table.setTableHeader(null);
        model = (DefaultTableModel)table.getModel();
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
        for (int i = 0; i < 5; i++) {
            model.addRow(new JPanel[]{new MyPanel()});
        }
    }
    public static void main(String args[]) {new TableLayoutDemo().setVisible(true);}
    private DefaultTableModel model;
    private JTable table;
    class PanelRenderer implements TableCellRenderer{
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            ((JPanel)value).setBackground(row % 2 != 0 ? null : bgColor );
            return (Component) value;
        }
        private Color bgColor = new Color(164,182,205);
    }
    class MyPanel extends JPanel{
        public MyPanel(){
            setLayout(new BorderLayout());
            JPanel left = new JPanel(new FlowLayout(FlowLayout.LEFT));
            left.setPreferredSize(new Dimension(150,10));
            JLabel l1 = new JLabel("Coldplay");
            l1.setPreferredSize(new Dimension(140,20));
            left.add(l1);
            JLabel l2 = new JLabel("von: X & Y");
            l2.setPreferredSize(new Dimension(140,20));
            left.add(l2);
            JLabel l3 = new JLabel(new ImageIcon(imgUrl));
            l3.setPreferredSize(new Dimension(140,140));
            left.add(l3);
            JLabel l4 = new JLabel("Inventarnummer: 4 ");
            l4.setPreferredSize(new Dimension(140,20));
            left.add(l4);
            JPanel center = new JPanel(new GridBagLayout());
            JLabel text = new JLabel("Beschreibung");
            center.add(text);
            add(left, BorderLayout.WEST);
            add(center, BorderLayout.CENTER);
            center.setOpaque(false);
            left.setOpaque(false);
        }
        private URL imgUrl;{
            try {
                imgUrl = new URL("http://img213.imageshack.us/img213/8093/jamesgosling2005a6hw.jpg");
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            }
        }
    }
}
 

metalfan

Aktives Mitglied
michi2: weiss ja selber nicht was ich will :(
Andre: danke das sieht ziemlich gut aus. gleich mal testen.

Julius
 

metalfan

Aktives Mitglied
Habe das Layout in mein Programm übernommen, das passt auch. Nun habe ich probiert die Zeilen über dem Bild auf die ganze Breite zu bekommen da einige Buch Titel länger sind als der Platz der im Bereich BorderLayout.WEST zur Verfügung steht..also dachte ich an folgenden Aufbau:

JPanel - Titel - ganze Breite (FlowLayout)
JPanel - Autor - ganze Breite (FlowLayout)
JPanel - Bild / Beschreibung....fürs erste feste Werte für das Bild (BorderLayout)

Das Problem ist nun das ich die JPanel nicht an den linken Rand bekomme sondern sie in der Mitte sitzen :(
Das Label mit der Aufschrift "Coldplay" wird innerhalb des JPanels linksBündig dargestellt, aber das JPanel an sich rutscht in die Mitte. Hat jemand eine Idee?

Code:
class MyPanel extends JPanel{
        public MyPanel(){

setLayout(new GridBagLayout());
        	GridBagConstraints h = new GridBagConstraints();
        		JPanel blala = new JPanel(new BorderLayout());
        			JPanel first = new JPanel(new FlowLayout(FlowLayout.LEFT));
        				blala.add(first, BorderLayout.WEST);
        					JLabel l1 = new JLabel("Coldplay");
        					l1.setPreferredSize(new Dimension(140,20));
        			first.add(l1);
        	h.gridx=0;
        	h.gridy=0;
        	h.gridwidth=1;
        	//h.fill  und oder anchor zeigen keine Wirkung
            add(blala,h);
 

metalfan

Aktives Mitglied
Habe das Layout in mein Programm übernommen, das passt auch. Nun habe ich probiert die Zeilen über dem Bild auf die ganze Breite zu bekommen da einige Buch Titel länger sind als der Platz der im Bereich BorderLayout.WEST zur Verfügung steht..also dachte ich an folgenden Aufbau:

JPanel - Titel - ganze Breite (FlowLayout)
JPanel - Autor - ganze Breite (FlowLayout)
JPanel - Bild / Beschreibung....fürs erste feste Werte für das Bild (BorderLayout)
JPanel - Weitere Angaben.... - ganze Breite

Das Problem ist nun das ich die JPanel nicht an den linken Rand bekomme sondern sie in der Mitte sitzen :(
Das Label mit der Aufschrift "Coldplay" wird innerhalb des JPanels linksBündig dargestellt, aber das JPanel an sich rutscht in die Mitte. Hat jemand eine Idee?

Code:
class MyPanel extends JPanel{
        public MyPanel(){

setLayout(new GridBagLayout()); // für die Anordnung der verschiedenen Labels untereinander
        	GridBagConstraints h = new GridBagConstraints();
        		JPanel blala = new JPanel(new BorderLayout()); // erste Ergebniszeile, zeigt den Titel an
        			JPanel first = new JPanel(new FlowLayout(FlowLayout.LEFT));
        				blala.add(first, BorderLayout.WEST);
        					JLabel l1 = new JLabel("Coldplay");
        					l1.setPreferredSize(new Dimension(140,20));
        			first.add(l1);
        	h.gridx=0;
        	h.gridy=0;
        	h.gridwidth=1;
        	//h.fill  und oder anchor zeigen keine Wirkung
            add(blala,h);
 

André Uhres

Top Contributor
Ich würde BorderLayout für MyPanel einfach beibehalten.

NORTH: Titel und Autor
WEST: Bild
CENTER: Beschreibung
SOUTH: Weitere Angaben
 

metalfan

Aktives Mitglied
Stimmt, sieht auf den ersten Versuch auch gar nicht so schlecht aus.

Code:
/*
* TableLayoutDemo.java
*/
import java.awt.*;
public class TableLayoutDemo extends JFrame {
    public TableLayoutDemo() {
        super("TableLayout Demo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(600, 600);
        setLocationRelativeTo(null);
        table = new JTable(0,1);
        table.setDefaultRenderer(Object.class, new PanelRenderer());
        table.setRowHeight(270);
        table.setTableHeader(null);
        model = (DefaultTableModel)table.getModel();
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
        for (int i = 0; i < 5; i++) {
            model.addRow(new JPanel[]{new MyPanel()});
            
        }
    }
    public static void main(String args[]) {new TableLayoutDemo().setVisible(true);}
    private DefaultTableModel model;
    private JTable table;
    class PanelRenderer implements TableCellRenderer{
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            ((JPanel)value).setBackground(row % 2 != 0 ? null : bgColor );
            return (Component) value;
        }
        private Color bgColor = new Color(164,182,205);
    }
    class MyPanel extends JPanel{
        public MyPanel(){
           setLayout(new BorderLayout());
           
           JPanel north = new JPanel(new FlowLayout(FlowLayout.LEFT));
           JLabel l0 = new JLabel("<html><body>Titel yxz 324324324324324324324" +
           		"
von: Autor1,2,3,4,5,6,7,8,4,432345324534534534543543</body></html>");
           north.add(l0);
           
           JPanel left = new JPanel(new FlowLayout(FlowLayout.LEFT));
           left.setPreferredSize(new Dimension(150,150));
           
           JLabel l3 = new JLabel(new ImageIcon(imgUrl));
           l3.setPreferredSize(new Dimension(140,140));
           left.add(l3);
            
           JPanel center = new JPanel(new FlowLayout(FlowLayout.LEFT));
           JLabel text = new JLabel("<html><body> Der 2005er Vorgänger Conspiracy In Mind gilt in der
" +
           		" Metalszene schon jetzt als Klassiker. Mit diesem Album hat man nicht nur sämtliche Leserpolls in Sachen „Newcomer
" +
           		" des Jahres“ gewonnen, sondern konnte sich auch kommerziell durchsetzen und vom Gros der
" +
           		" Debütanten-Kollegen emanzipieren. Völlig zu Recht, denn der jede Höchstnote rechtfertigende
" +
           		" Erstschlag begeistert auch heute noch als perfekte Mischung aus Sanctuary, Nevermore
" +
           		", Psychotic Waltz, Fates Warning, Opeth und Candlemass. Eine schwere Last, die auf den...");
           center.add(text);
          
           JPanel south = new JPanel(new FlowLayout(FlowLayout.LEFT));
           JLabel l4 = new JLabel("<html><body>Inventarnummer: 4 
" +
           		"Format: Audio CD (CD-Anzahl: 1)" +
           		"<html><body>");
           south.add(l4);
        
           
           
           
           add(north, BorderLayout.NORTH);
           add(left, BorderLayout.WEST);
           add(center, BorderLayout.CENTER);
           add(south, BorderLayout.SOUTH);
           north.setOpaque(false);
           left.setOpaque(false); 
           center.setOpaque(false);
           south.setOpaque(false);
            
        }
        private URL imgUrl;{
            try {
                imgUrl = new URL("http://images-eu.amazon.com/images/P/B000FDKC0A.01._SCTHUMBZZZ_.jpg");
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            }
        }
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Layout - Problem AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
F Layout-Problem AWT, Swing, JavaFX & SWT 2
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
A Problem mit Layout-Manager AWT, Swing, JavaFX & SWT 11
B LayoutManager Layout Problem AWT, Swing, JavaFX & SWT 14
A SWT Layout Problem AWT, Swing, JavaFX & SWT 15
K Swing Layout-Problem mit JTables und JLists (Mindestgrößen) AWT, Swing, JavaFX & SWT 11
N SWT Einfaches Problem beim Layout AWT, Swing, JavaFX & SWT 8
V Layout Problem AWT, Swing, JavaFX & SWT 5
M JPanel Layout Problem AWT, Swing, JavaFX & SWT 11
I Layout Problem beim Skalieren AWT, Swing, JavaFX & SWT 3
T Null Layout Problem. AWT, Swing, JavaFX & SWT 3
M Layout Problem: Zentriern in Panel AWT, Swing, JavaFX & SWT 3
M Layout-Problem: JTable AWT, Swing, JavaFX & SWT 3
A Layout-Problem AWT, Swing, JavaFX & SWT 5
W SWT, Anordung von Elementen - Layout Problem ? AWT, Swing, JavaFX & SWT 2
I Null-Layout-Problem AWT, Swing, JavaFX & SWT 2
M Problem mit NULL-Layout AWT, Swing, JavaFX & SWT 2
M Problem mit Layout wegen Textarea AWT, Swing, JavaFX & SWT 3
G Layout Problem AWT, Swing, JavaFX & SWT 6
M Layout / setSize Problem AWT, Swing, JavaFX & SWT 15
M Layout Problem (GrudBag- + BorderLayout) AWT, Swing, JavaFX & SWT 6
M Layout-Problem, Größe von Komponenten AWT, Swing, JavaFX & SWT 3
S Wiedermal SWT-Layout-Problem AWT, Swing, JavaFX & SWT 6
S SWT - Simples Layout Problem AWT, Swing, JavaFX & SWT 9
H Problem mit Layout Fenstern (Swing) AWT, Swing, JavaFX & SWT 3
M Layout Problem AWT, Swing, JavaFX & SWT 3
D Layout Problem / JTree und JPanel AWT, Swing, JavaFX & SWT 4
N Layout-Problem (JScrollPane, GridBagLayout) AWT, Swing, JavaFX & SWT 3
D Layout-Problem AWT, Swing, JavaFX & SWT 8
M Problem mit Layout/JLabel AWT, Swing, JavaFX & SWT 5
D Layout Problem mit Überdeckung AWT, Swing, JavaFX & SWT 6
J Kleines Layout Problem AWT, Swing, JavaFX & SWT 5
S Problem mit dem Layout - 3 JPanel's AWT, Swing, JavaFX & SWT 3
G Layout-Problem AWT, Swing, JavaFX & SWT 4
G Problem mit JDialog-Layout AWT, Swing, JavaFX & SWT 4
F Problem mit Panel-Layout AWT, Swing, JavaFX & SWT 3
M Layout Problem. AWT, Swing, JavaFX & SWT 6
E Problem mit GridBag Layout AWT, Swing, JavaFX & SWT 2
G Layout Problem AWT, Swing, JavaFX & SWT 3
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout reagiert nicht auf Constraints AWT, Swing, JavaFX & SWT 4
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben