PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Flexible GUI Elemente



Herr Ritschwumm
14-01-2007, 16:38
Hi,

für ein Programm suche ich nach einer Möglichkeit eine Liste aus GUI-Objekten (z.B. Panels) zu erstellen. Ich habe dabei den Firefox-Download Manager vor Augen, also eine Liste, in die Elemente hinzugefügt werden können, welche selber aus mehreren Elementen bestehen (beim Download Manager Text und Progress-Bar).

Gibt es so etwas in Java in irgendeiner Form? Wenn nicht, hat einer von euch eine Idee, wie ich das möglichst einfach machen kann?

Vielen Dank für eure Antworten!

Gruß
Ritschwumm

bischi
14-01-2007, 18:51
Sollte doch beispielsweise mit Panels kein Problem sein?!

MfG Bischi

Waxolunist
15-01-2007, 10:06
Ich habe den genauen Downloadmanager von Firefox nur mehr vage in Erinnerung, aber soweit ich weiß wäre das in Java umgesetzt, auch schon mit einem einfach BorderLayout möglich. Einfach alles ganz normal in den Norden setzen.

Servet
18-01-2007, 10:06
Hi!

Vielleicht so:

Nimm einen Vector, und stecke dort für jede Zeile ein JPanel hinein.
In diesem Panel solltest du deine gewünschten GUI-Elemente hineingepackt haben. Du könntest das FlowLayout benutzen, das die Elemente einfach hintereinander in das Parent-Objekt packt.
Nun erstelle noch einen toplevel-JPanel, das mit GridLayout gelayoutet ist. In dieses einspaltige Top-Level-Panel steckst du nacheinander alle JPanels hinein, die du in dem Vector findest.

Gruß,
Servet

Waxolunist
18-01-2007, 10:24
Das GridLayout füllt allerdings den vorgegebenen Platz zur Gänze aus, weshalb hier das BorderLayout besser wäre.

Herr Ritschwumm
18-01-2007, 15:11
Hi,

danke für die Antworten! Ich hatte es selber mit einer JList probiert, aber der Code wurde von Java auf zwei verschiedene Weisen interpretiert. Hab mal nen Screenshot angehängt und hier der Code:


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

public class Main {
public static void main(String[] args) {
theWindow mainWindow=new theWindow("ListTest");
}
}
class theWindow extends JFrame {
public theWindow(String title) {
super(title);
this.setSize(200, 200);
this.setVisible(true);
this.setLayout(null);
this.setResizable(false);

JList theList=new JList();
theList.setBounds(0, 0, 150, 150);
theList.setLayout(new GridLayout()); //Ich weiß, dass ein GridLayout ohne Parameter nicht schön ist, aber mit nem FlowLayout sieht das Ergebnis ähnlich aus...
theList.setBackground(Color.black);

JPanel thePanel[]=new JPanel[3];
for (int i=0; i<3; i++) {
thePanel[i]=new JPanel();
thePanel[i].setSize(150, 50);
}
thePanel[0].setBackground(Color.green);
thePanel[1].setBackground(Color.yellow);
thePanel[2].setBackground(Color.red);


for (int i=0; i<3; i++) {
theList.add(thePanel[i]);
}
theList.remove(0);
this.add(theList);
System.out.print(theList.getComponentCount());
SwingUtilities.updateComponentTreeUI(this);
}
}

Vielleicht habt ihr dazu ja eine Idee.

Das mit Panel und Vector werde ich auf jeden Fall mal versuchen.

Gruß
Herr Ritschwumm

Waxolunist
18-01-2007, 15:46
Ein paar Sachen zu deinem Programmierstil.

Class-Namen fangen immer mit einem Großbuchstaben an und sollten sprechende Namen besitzen, also nicht unbedingt Main.

Desweiteren solltest du die Methode getContentPane verwenden. Also add nur mit getContentPane verwenden. Oder bin ich da noch von der alten Schule?

Wenn du ein Objekt ohnehin nicht mehr verwendest wie hier
theWindow mainWindow=new theWindow("ListTest");
dann reicht auch: new theWindow("ListTest");

Ansonsten interessiert mich zwar dein Beispiel, aber mir fehlt die Zeit. Ich möchte dir aber folgende Seite ans Herz legen:
http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JList.html

lg, Christian