Swing Inhalte von Scroll-Panes werden nicht gezeichnet

Skrodde

Aktives Mitglied
Hallo zusammen,
ich bin gerade dabei, mich in Swing einzuarbeiten. Dazu haben ich ein TabbedPane angelegt, mit dem zwei Tabs angezeigt werden sollen. Auf jedem soll ein Scroll Pane zu sehen sein, auf dem dann wiederum ein oder zwei Buttons liegen. Allerdings werden weder das ScrollPane noch die Buttons angezeigt.
Was ist da wohl schiefgelaufen?
Vielen Dank, Gruß, Skrodde

Java:
package optGUI;

import java.awt.FlowLayout;
import java.awt.HeadlessException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;

import OptController.OptController;

public class OptGUI extends JFrame {

	private static final long serialVersionUID = 1L;
	private OptController optController;
	
	/**
	 * @throws HeadlessException
	 */
	public OptGUI(OptController optController) throws HeadlessException {
		//Name the frame "Optimization"
		super("Optimization");
		this.optController = optController;
		
		//Place the frame in the middle of the screen
		setLocationRelativeTo(null);
		
		//End the program via System.exit() when user clicks on (X) of the frame
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//User can not resize the frame
		//this.setResizable( false );
		
		//Create a Tabs-Object
		JTabbedPane tabs = new JTabbedPane();
		this.add(tabs);
		
		//ScrollPane for the Definition of Variables
		//------------------------------------------
		//Scroll Pane can be scrolled vertically, but not horizontally
			JScrollPane pane_1 = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
			tabs.addTab("(1) Define Variables", null, pane_1, "Define all necessary variables that are used in the optimization problem.");
		//Continue Button that continues to Scroll Pane 2
			JButton btn_continue1 = new JButton("Continue");
			pane_1.add(btn_continue1);
		
			
		//ScrollPane for the Definition of Constraints
		//--------------------------------------------
		//Scroll Pane can be scrolled vertically, but not horizontally
			JScrollPane pane_2 = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
			tabs.addTab("(2) Define Objective Function", null, pane_2, "Define the Type of the Optimization and the objective Function.");
		//Continue Button that continues to Scroll Pane 3
			JButton btn_continue2 = new JButton("Continue");
			pane_2.add(btn_continue2);
		//Backwards Button that goes back to Pane 1
			JButton btn_back2 = new JButton("Back");
			pane_2.add(btn_back2);
			
		JLabel l = new JLabel( "Lebe immer First-Class, sonst tun es deine Erben! Das ist eine alte Weisheit, beachte sie!" );
	    this.add( l );
		
		
		this.pack();
		this.setVisible(true);
		this.setLayout(new FlowLayout());
	}
	
}
 

c_sidi90

Top Contributor
Bin ich jetzt blöd oder fügst du dein Panel dem JFrame garnicht hinzu?

Java:
add(tabs);

ausserdem setzt man das Layout nicht nachdem man setVisible aufruft.
 
Zuletzt bearbeitet:

c_sidi90

Top Contributor
Probier es einfach mal aus, dann wirst du den Unterschied merken. Dein Fenster wird sichtbar, bevor du das Layout übergibst.
 

Skrodde

Aktives Mitglied
Hm, ich habe jetzt die letzten zwei Zeilen meines Codes getauscht, also
[JAVA=68]
this.setLayout(new FlowLayout());
this.setVisible(true);
[/code]
Allerdings sehe ich keine Veränderung, mein Fenster sieht gleich (schlecht) aus :autsch:

EDIT: Ich habe gerade gelesen, dass die add() Methode für den Container JScrollPane nicht geeignet ist, also habe ich mir Panels angelegt, diese in die Tabs eingelegt und dann die ScrollPanes mit
Code:
setViewPortView()
auf die Panels losgelassen. Das ganze sieht nun so aus wie unten im Code, allerdings sehe ich jetzt gar keine Tabs mehr.

Java:
package optGUI;

import java.awt.FlowLayout;
import java.awt.HeadlessException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;

import OptController.OptController;

public class OptGUI extends JFrame {

	private static final long serialVersionUID = 1L;
	private OptController optController;
	
	/**
	 * @throws HeadlessException
	 */
	public OptGUI(OptController optController) throws HeadlessException {
		//Name the frame "Optimization"
		super("Optimization");
		this.optController = optController;
		
		//Place the frame in the middle of the screen
		setLocationRelativeTo(null);
		
		//End the program via System.exit() when user clicks on (X) of the frame
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//User can not resize the frame
		//this.setResizable( false );
		
		//Create a Tabs-Object
		JTabbedPane tabs = new JTabbedPane();
		this.add(tabs);
		
		//ScrollPane for the Definition of Variables
		//------------------------------------------
		//Panel for the content of the first tab
			JPanel panel1 = new JPanel();
			tabs.addTab("(1) Define Variables", null, panel1, "Define all necessary variables that are used in the optimization problem.");
		//Scroll Pane can be scrolled vertically, but not horizontally
			JScrollPane scrollpane1 = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
			scrollpane1.setViewportView(panel1);
		//Continue Button that continues to Scroll Pane 2
			JButton btn_continue1 = new JButton("Continue");
			panel1.add(btn_continue1);
		
			
		//ScrollPane for the Definition of Constraints
		//--------------------------------------------
		//Panel for the content of the second tab
			JPanel panel2 = new JPanel();
			tabs.addTab("(2) Define Objective Function", null, panel2, "Define the Type of the Optimization and the objective Function.");
		//Scroll Pane can be scrolled vertically, but not horizontally
			JScrollPane scrollpane2 = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
			scrollpane2.setViewportView(panel2);
		//Continue Button that continues to Scroll Pane 3
			JButton btn_continue2 = new JButton("Continue");
			panel2.add(btn_continue2);
		//Backwards Button that goes back to Pane 1
			JButton btn_back2 = new JButton("Back");
			panel2.add(btn_back2);
		
		JLabel l = new JLabel( "Lebe immer First-Class, sonst tun es deine Erben! Das ist eine alte Weisheit, beachte sie!" );
	    this.add( l );
	    
		this.pack();
		this.setLayout(new FlowLayout());
		this.setVisible(true);
	}
	
}
 
Zuletzt bearbeitet:

c_sidi90

Top Contributor
Also, generell scheinst du dir die Grundlagen von Swing nicht richtig angeschaut zu haben. Dein Programm wird von oben nach unten gelesen. Da macht es wenig Sinn z.B. einen Button zu erzeugen, nachdem du ihn bereits deiner scrollPane übergibst. Des Weiteren, übergibst du den Button falsch.

Ich hab deinen "Horror" Code mal ein wenig strukturiert und dir ein Beispiel implementiert. Danach richtest du dich am besten für die weiteren Anpassungen.

Java:
import java.awt.FlowLayout;
import java.awt.HeadlessException;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
 

 
public class OptGUI extends JFrame {
 
    private static final long serialVersionUID = 1L;

    private JPanel panel1;
    private JTabbedPane tabs;
    private JScrollPane pane_1; 
    private JButton btn_continue1;
    /**
     * @throws HeadlessException
     */
    public OptGUI() throws HeadlessException {
        super("Optimization");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        
        tabs = new JTabbedPane();
        btn_continue1 = new JButton("Continue");
        pane_1 = new JScrollPane(btn_continue1);
        pane_1.setViewportView(btn_continue1);
        tabs.addTab("(1) Define Variables", null, pane_1, "Define all necessary variables that are used in the optimization problem.");
      
        this.add(tabs);
        this.pack();
        this.setVisible(true);
        this.setLayout(new FlowLayout());
    }
    
    public static void main(String[]rgs){
    	new OptGUI();
    }
}

[EDIT]P.S Ich habe deinen Konstruktor geändert, da ich deine Controllerklasse nicht habe, das musst du natürlich alles wieder ändern. Auch den Inhalt der Tabs etc.[/EDIT]
 
B

bygones

Gast
@c_sidi90
warum ein Layout setzen nachdem alles angezeigt wird bzw wenn nur ein element hinzugefuegt wird.

weiterhin ist es kein problem eine Component unfertig zu erzeugen, einem Container zu geben und dann weiter zu initialisieren. Solange noch nix gezeichnet wurde ists das kein Problem.
 

Skrodde

Aktives Mitglied
Ich hab deinen "Horror" Code mal ein wenig strukturiert und dir ein Beispiel implementiert. Danach richtest du dich am besten für die weiteren Anpassungen.

Vielen Dank für die Hilfe und entschuldige den "Horror". Ich werde mich wohl doch noch etwas mit Swing beschäftigen :rtfm:, bevor ich hier ernsthafte Versuche mache. Dieses Beispiel klappt nun aber wunderbar mit dem unten genannten Code und dafür vielen Dank an c_sidi90 :toll:

Java:
package optGUI;

import java.awt.FlowLayout;
import java.awt.HeadlessException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;

import OptController.OptController;

public class OptGUI extends JFrame {

	private static final long serialVersionUID = 1L;
	private OptController optController;
	private JPanel panel1,panel2;
    private JTabbedPane tabs;
    private JScrollPane scrollpane1, scrollpane2; 
    private JButton btn_continue1,btn_continue2,btn_back2;
    
	/**
	 * @throws HeadlessException
	 */
	public OptGUI(OptController optController) throws HeadlessException {
		//Name the frame "Optimization"
		super("Optimization");
		this.optController = optController;
		
		//Place the frame in the middle of the screen
		setLocationRelativeTo(null);
		
		//End the program via System.exit() when user clicks on (X) of the frame
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//Do not let the user resize the frame
		this.setResizable( false );
		
		tabs = new JTabbedPane();
        
		btn_continue1 = new JButton("Continue");
        scrollpane1 = new JScrollPane();
        panel1 = new JPanel();
        panel1.add(btn_continue1);
        scrollpane1.setViewportView(panel1);
        tabs.addTab("(1) Variables", null, scrollpane1, "Define all necessary variables that are used in the optimization problem.");
      
        btn_continue2 = new JButton("Continue");
        btn_back2 = new JButton("Back");
        scrollpane2 = new JScrollPane();
        panel2 = new JPanel();
        panel2.add(btn_continue2);
        panel2.add(btn_back2);
        scrollpane2.setViewportView(panel2);
        tabs.addTab("(2) Objective Function", null, scrollpane2, "Define Objective Function and Optimization Type");
        
        this.add(tabs);
        this.pack();
        this.setVisible(true);
        this.setLayout(new FlowLayout());
	}
	
}
 

c_sidi90

Top Contributor
@c_sidi90
warum ein Layout setzen nachdem alles angezeigt wird bzw wenn nur ein element hinzugefuegt wird.

Hab ich vergessen aus seinem Code zu nehmen, das hab ich in meinem Post ja bereits erwähnt das das kein Sinn macht. Das es nichts ausmacht die Komponenten zu übergeben ohne zu initialisieren ist richtig, machen tut es trotzdem niemand, zumindest keiner der seinen Code übersichtlich halten will.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
thobren JavaFX Inhalte aus dynamischen vbox mit TextArea auslesen AWT, Swing, JavaFX & SWT 9
J Swing unterschiedliche Inhalte in einem JFrame AWT, Swing, JavaFX & SWT 3
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
OnDemand Box Inhalte rechsbündig AWT, Swing, JavaFX & SWT 6
I JTable Inhalte löschen ohne den JTable zu verändern! AWT, Swing, JavaFX & SWT 5
E Swing JTable Inhalte löschen..Was ist Sinnvoll? AWT, Swing, JavaFX & SWT 5
R Tab-Inhalte aktualisieren AWT, Swing, JavaFX & SWT 4
F Swing jScrollPane Inhalte AWT, Swing, JavaFX & SWT 2
M Datenbanktabellen Inhalte in JLabel anzeigen AWT, Swing, JavaFX & SWT 2
T Problem mit der Programmierung von Fenster und deren Inhalte AWT, Swing, JavaFX & SWT 4
M Platzhalter: Inhalte nicht vergrößern AWT, Swing, JavaFX & SWT 2
L Alle Inhalte in BorderLayout.CENTER löschen? AWT, Swing, JavaFX & SWT 2
R Manchmal werden die Inhalte des JFrames nicht angezeigt AWT, Swing, JavaFX & SWT 3
S JDialog und 'Inhalte' schliessen bzw. leeren AWT, Swing, JavaFX & SWT 9
O Inhalte in JTable löschen AWT, Swing, JavaFX & SWT 3
C JList Inhalte abfragen AWT, Swing, JavaFX & SWT 2
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
C Inhalte in immer das gleiche Fenster ausgeben? AWT, Swing, JavaFX & SWT 3
D Alle Inhalte einer JTextArea in einem JScrollPane löschen AWT, Swing, JavaFX & SWT 2
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
WetWer Scroll Pane AWT, Swing, JavaFX & SWT 2
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
L JTable nicht komplett scroll bar AWT, Swing, JavaFX & SWT 5
X Auto-Scroll versagt ab und zu -.- AWT, Swing, JavaFX & SWT 8
C Swing JScrollPane und Scroll-Geschwindigkeit AWT, Swing, JavaFX & SWT 8
O Seltsames Scroll-Problem AWT, Swing, JavaFX & SWT 7
Developer_X Swing Java JTextArea auto scroll down AWT, Swing, JavaFX & SWT 6
F JScrollPane mit JPanel drinne zeigt keine Scroll-Leisten AWT, Swing, JavaFX & SWT 7
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
C Jtextarea scroll problem AWT, Swing, JavaFX & SWT 3
G Scroll Problem AWT, Swing, JavaFX & SWT 2
H Scroll-Problem bei JScrollPane+JTextPane AWT, Swing, JavaFX & SWT 2
E Verknüpfung verschiedener Scroll-Leisten AWT, Swing, JavaFX & SWT 3
S JTextarea in JScrollpane -> scroll, Zeilenbeschränkung AWT, Swing, JavaFX & SWT 2
S Scroll-Rad in java AWT, Swing, JavaFX & SWT 2
Z JavaFX Pane für wechselnde Sub-Panes mit Auto-Resize AWT, Swing, JavaFX & SWT 2
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
M JavaFX Panes wie "children" anordnen AWT, Swing, JavaFX & SWT 10
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
darekkay Tabbed Panes ohne Tab-Titel? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben