Swing Die täglichen Swing-Probleme

Status
Nicht offen für weitere Antworten.

banshee

Bekanntes Mitglied
Hallo,

irgendwie frustriert mich Swing so langsam. Es gibt eigentlich nichts, was auch nur mal annähernd auf Anhieb klappt oder so aussieht, wie ich das will. Zugegebenermaßen sind meine Erfahrungen im Umgang damit noch nicht wirklich ausgereift, aber ich habe einfach keine Zeit dazu, die komplette Dokumentation durchzulesen und muss das wohl oder übel nebenher machen.
Hier mal mein neustes Problem:

Java:
import javax.swing.AbstractListModel;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

public class Test extends JPanel
{
	Test()
	{
		JSplitPane jSplitPane1 = new JSplitPane();
        JPanel jPanel9 = new JPanel();
        JPanel jPanel12 = new JPanel();
        JPanel jPanel14 = new JPanel();
        JPanel jPanel2 = new JPanel();
        JPanel jPanel4 = new JPanel();
        JPanel jPanel5 = new JPanel();
        JPanel jPanel6 = new JPanel();
        JPanel jPanel7 = new JPanel();
        JPanel jPanel8 = new JPanel();
        JPanel jPanel3 = new JPanel();
        JPanel jPanel10 = new JPanel();
        JPanel jPanel13 = new JPanel();
        JPanel jPanel11 = new JPanel();
        JPanel jPanel1 = new JPanel();
        JScrollPane jScrollPane1 = new JScrollPane();
        JList jList1 = new JList();
        JScrollPane jScrollPane2 = new JScrollPane();
        JList jList2 = new JList();
        JPanel jPanel15 = new JPanel();
        JButton jButton1 = new JButton();
        JButton jButton2 = new JButton();
        
        setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.LINE_AXIS));

        jPanel9.setLayout(new java.awt.GridLayout(3, 3));
        jPanel9.add(jPanel12);
        jPanel9.add(jPanel14);
        jPanel9.add(jPanel2);
        jPanel9.add(jPanel4);

        jPanel5.add(jPanel6);
        jPanel5.add(jPanel7);
        jPanel5.add(jPanel8);

        jPanel9.add(jPanel5);
        jPanel9.add(jPanel3);
        jPanel9.add(jPanel10);
        jPanel9.add(jPanel13);
        jPanel9.add(jPanel11);

        jSplitPane1.setLeftComponent(jPanel9);
                       
        jPanel1.setLayout(new BoxLayout(jPanel1, BoxLayout.PAGE_AXIS));

        jList1.setModel(new AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane1.setViewportView(jList1);

        jPanel1.add(jScrollPane1);

        jList2.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        jScrollPane2.setViewportView(jList2);

        jPanel1.add(jScrollPane2);

        jPanel15.setLayout(new BoxLayout(jPanel15, BoxLayout.LINE_AXIS));

        jButton1.setText("jButton1");
        jPanel15.add(jButton1);

        jButton2.setText("jButton2");
        jPanel15.add(jButton2);

        jPanel1.add(jPanel15);

        jSplitPane1.setRightComponent(jPanel1);
        jSplitPane1.setDividerLocation(0.5);

        add(jSplitPane1);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		JFrame frame = new JFrame();
		frame.setVisible(true);
		JPanel panel = new Test();
		frame.add(panel);

	}

}

Das kann man einfach in den Konstruktor einer von JPanel abgeleiteten Klasse stecken. Das Problem ist, dass der Divider meinen Aufruf einfach ignoriert und viel zu weit links bleibt. Scheinbar beanspruchen die beiden Listen den Platz irgendwie für sich.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Das kann man einfach in den Konstruktor einer von JPanel abgeleiteten Klasse stecken.

Und warum muss das derjenige machen, der dir vielleicht helfen will? :noe: (1 cent für jedes mal wo ich bisher schon "public static void main" geschrieben habe...:reflect: ;) )

Probier' ggf. mal das setDividerLocation mit SwingUtilities.invokeLater in die Queue zu stecken. Ich glaub' da war irgendwas... ???:L
 
B

bananenkasper

Gast
Code:
jSplitPane1.setDividerLocation(0.8);
probiers dochmal mit
Code:
jSplitPane1.setDividerLocation(0.5);
Dann sollte es mittig sein.
Allerdings nur, wenn die SplitPane auch genug Platz bereitstellt.
 

banshee

Bekanntes Mitglied
Mit invokeLater funktioniert es leider nicht. Und 0.5 funktioniert auch nicht. Es scheint wie gesagt so, als ob die Listen den Platz beanspruchen und ich kriege den divider nicht über ~0.2 hinaus. Im Programm selbst kann ich ihn dann allerdings ohne Probleme verschieben.
 
B

bananenkasper

Gast
Die SplitPane wird einen Komponenten (weiss nicht genau welcher, glaube der rechte) auf jedenfall "voll" darstellen.
D.h. so, dass er vollständig zu sehen ist.
Verschiebst du die Pane dann später, kann der Component teilweise überdeckt werden.
Den User stört das nicht unbedingt, aber du kannst die Pane nicht so initialisieren.
 

diggaa1984

Top Contributor
hm ads divider-problem begegnete mir kürzlichst auch .. erst lief alles wunderbar so wie es sollte, dann habe ich minimals was am layout geändert (fürn user sah alles immer noch gleich aus, vielleicht ne Border geändert oder so) und schwupps .. blieb das ding ganz oben. Vielleicht komm ich nochmal darauf worans lag.
 

Ebenius

Top Contributor
Spiel mal mit PreferredSize und MinimumSize der beiden SplitPane-Seiten rum. Damit bekommst Du's bestimmt in den Griff. JSplitPane ist wirklich ein Mistding.

Ebenius
 

Michael...

Top Contributor
Mit invokeLater funktioniert es leider nicht.
Das setDividerLocation funktioniert erst nach dem die SplitPane sichtbar ist (vermutlich, da sie vorher ihre Größe nicht kennt). Daher funktioniert nur invokeLater oder das setzen der Position nach dem die Pane garantiert angezeigt wird. Hier mal die zwei Möglichkeiten:
Java:
import java.awt.*;

import javax.swing.*;

public class SplitPaneInvokeLaterDemo extends JFrame {
	public static SplitPaneWithoutInvokeLater splitWIL;
	
	public SplitPaneInvokeLaterDemo() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(0, 0, 800, 600);
		setLocationRelativeTo(null);
		
		setLayout(new GridLayout(2,1));
		getContentPane().add(new SplitPaneInvokeLater());
		getContentPane().add(splitWIL =new SplitPaneWithoutInvokeLater());
	}
	
	public static void main(String[] args){
		SwingUtilities.invokeLater(new Runnable() { 
            public void run() { 
				new SplitPaneInvokeLaterDemo().setVisible(true);
				splitWIL.setDivider(0.8);
            }
		});
	}
	
	class SplitPaneInvokeLater extends JPanel {
		private final JSplitPane splitPane;
		
		public SplitPaneInvokeLater() {
			splitPane = new JSplitPane();
			setLayout(new BorderLayout());
			add(splitPane, BorderLayout.CENTER);
			
	        SwingUtilities.invokeLater(new Runnable() { 
	            public void run() { 
	            	splitPane.setDividerLocation(0.8);
	            }
	        });
		}
	}
	
	class SplitPaneWithoutInvokeLater extends JPanel {
		private final JSplitPane splitPane;
		
		public SplitPaneWithoutInvokeLater() {
			splitPane = new JSplitPane();
			setLayout(new BorderLayout());
			add(splitPane, BorderLayout.CENTER);
		}
		
		public void setDivider(double d) {
			splitPane.setDividerLocation(d);
		}
	}
}
 

André Uhres

Top Contributor
Ein invokeLater im Konstruktor bringt nur etwas, wenn die GUI auf den EDT gestartet wird, etwa so:
Java:
public static void main(final String[] args) {
    Runnable gui = new Runnable() {

        @Override
        public void run() {
            JFrame frame = new JFrame();
            frame.setSize(800, 600);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JPanel panel = new Test();
            frame.add(panel);
            frame.setVisible(true);
        }
    };
    //GUI must start on EventDispatchThread:
    SwingUtilities.invokeLater(gui);
}
Du kannst es aber auch noch mit jSplitPane1.setResizeWeight(0.5) versuchen.
Die GUI muss aber in der Regel sowieso immer auf dem EventDispatchThread gestartet werden. Das setVisible vom JFrame sollte man immer erst um Schluss machen.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben