Anfängerfrage zu Swing (JPanel und JScrollPane)

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo,
ich bin gerade dabei mir eine simple GUI, bestehen aus einem Panel und einem Button zu erstellen. Ich habe mir dazu eine Klasse GraphicsPanel geschrieben, die mir meine gewünschten Grafiken darstellt. Lediglich beim Layout habe ich Verständnisprobleme:

public GUI(int rows, int cols) {

JButton button = new JButton("OK");
JPanel panel = new JPanel();
GraphicsPanel graphicspanel = new GraphicsPanel();
JScrollPane scroll = new JScrollPane(panel);

panel.setLayout(new GridLayout(rows, cols));
this.add(button, BorderLayout.SOUTH);
this.add(panel, BorderLayout.CENTER);
this.add(scroll, BorderLayout.CENTER);
}

public static void main(String[] args) {

JFrame jFrame = new JFrame("Swing");

jFrame.setContentPane(new GUI(100,100));

jFrame.setLocation(512,384);

jFrame.setSize(320,240);

jFrame.pack();

jFrame.setVisible(true);

jFrame.setResizable(false);

}

class GraphicsPanel extends JPanel implements MouseListener {...}

Zum Verständnis:
Ich erstelle mir erstmal einen Button und ein Panel. In das Panel packe ich mein JScrollPane. Nun habe ich wie gesagt bei der Anordnung der einzelnen Elemente Probleme. Brauche in mein "panel", wenn ich mein "graphicspanel" habe?
Wie sage ich ihm, dass sobald meine Grafik nicht mehr komplett in das Fenster passt, er die Scollbalken einfügen soll?
 

noisebreath

Bekanntes Mitglied
ähm.. also sicher bin ich mir nicht aber auf den ersten blick seh ich nur dass du 3 elemente in dein frame packst. du packst nichts in dein scrollpane. dementsprechend kann sich das scrollpane auch an nichts anpassen. in dein frame kannst n panel packen in welches du wieder ein scrollpane packst (je nachdem wie deine oberste eben ausschauen soll) und in das scrollpane packst dann ein element rein oder mehrere und wenns das dann sprengt kannst scrollen..
 

Ebenius

Top Contributor
Hier hast Du Dich verhaspelt. Wahrscheinlich möchtest Du das?
Code:
JButton button = new JButton("OK"); 
// JPanel panel = new JPanel(); 
GraphicsPanel graphicspanel = new GraphicsPanel(); 
JScrollPane scroll = new JScrollPane(graphicspanel); 

// panel.setLayout(new GridLayout(rows, cols)); 
this.add(button, BorderLayout.SOUTH); 
// this.add(panel, BorderLayout.CENTER); 
this.add(scroll, BorderLayout.CENTER);

So erzeugt man ein scroll pane, das die scroll bars nur anzeigt, wenn diese benötigt werden:
Code:
new JScrollPane(view, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

Hope that helps, Ebenius
 

Ebenius

Top Contributor
PaddyW hat gesagt.:
Könntest Du mir evtl. zeigen wie Du das meinst? Mit

Code:
JScrollPane scroll = new JScrollPane(panel);

packe ich doch das ScollPane in mein Panel, oder?

Nö. Das panel auf den viewport des scroll pane. Am besten, Du liest Dich hier mal ein.

Grüße, Ebenius
 
S

SlaterB

Gast
> Nö. Das panel auf den viewport des scroll pane.

klar geht das mit dem Konstruktor


weiherhin sei noch anzumerken, dass GUI wohl ein JPanel ist?
standardmäßig hat ein JPanel KEIN BorderLayout,
dann bringen Befehle wie
> this.add(button, BorderLayout.SOUTH);
eher Probleme als dass sie weiterhelfen, könnte aber noch funktioniert, SOUTH wird einfach ignoriert

-------

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        JButton button1 = new JButton("OK1");
        JButton button2 = new JButton("OK2");
        JPanel panel = new JPanel();
        panel.add(button1);
        JScrollPane scroll = new JScrollPane(panel);


        JPanel gui = new JPanel();
        gui.setLayout(new BorderLayout());
        gui.add(button2, BorderLayout.SOUTH);
        gui.add(scroll, BorderLayout.CENTER);


        JFrame jFrame = new JFrame("Swing");
        jFrame.setContentPane(gui);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setLocation(512, 384);
        jFrame.setSize(320, 240);
        jFrame.pack();
        jFrame.setVisible(true);
        jFrame.setResizable(false);

    }
}
 
S

SlaterB

Gast
die Frage war ursprünglich, ob im JScrollPane was drin ist oder nicht,
mit dem Konstruktor wird erfolgreich das JPanel in das JScrollPane eingefügt,

du bezogst dich nur auf den Wortdreher wie ich gerade sehe
 

babuschka

Top Contributor
Okay, also ich habe nun folgendes:

public GUI(int rows, int cols) {

JButton button = new JButton("OK");
graphicspanel = new GraphicsPanel();
JScrollPane scroll = new JScrollPane(graphicspanel);
//graphicspanel.setLayout(new GridLayout(rows, cols));
this.add(button);
this.add(scroll, BorderLayout.CENTER);


// Hier zum Test fülle ich mein GraphicsPanel mit kleinen Bildchen
for (int i=1;i<=(rows*cols);i++) {
graphicspanel.add(new JLabel(new ImageIcon("Tree.jpg"))); }
}

Aber es scorllt immer noch nichts. Ich erstelle ja die GUI mit zwei Parametern für die Reihe und Spalte.
 
S

SlaterB

Gast
du kannst nicht nur Bruchstücke posten, es muss ein vollständiges Programm sein, siehe z.B. mein Posting

falls in graphicspanel nur die JLabels drin sind, dann muss es ja keine eigene Klasse sein,
 

babuschka

Top Contributor
Okay sorry. Hier der gewünschte Auszug:

Code:
public class GUITest extends JPanel{
	
	private GraphicsPanel graphicspanel;

    public GUITest(int rows, int cols) {
    	
        JButton nextButton = new JButton("OK");

        graphicspanel = new GraphicsPanel();
        this.add(nextButton);
        
        JScrollPane scroll = new JScrollPane(graphicspanel);
        graphicspanel.setLayout(new GridLayout(rows, cols));
        this.add(scroll);
                // DIENT ZUM TESTEN. test.jpg = 10x10 Pixel
		for (int i=1;i<=(rows*cols);i++) {
			graphicspanel.add(new JLabel(new ImageIcon("test.jpg"))); }
    }
    
    public static void main(String[] args) {
    	
        JFrame jFrame = new JFrame("Swing");
        
        jFrame.setContentPane(new GUI(10,10));
        
        jFrame.setLocation(512,384);
        
        jFrame.pack();
        
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        
        jFrame.setSize(320,240);
        
        jFrame.setVisible(true);
        
        jFrame.setResizable(false);
    	
    }
    
   class GraphicsPanel extends JPanel implements MouseListener {
        ....
        
        public GraphicsPanel() {
            this.setPreferredSize(new Dimension(CELL * ROWS, CELL * COLUMNS));
            this.addMouseListener(this);
        }

		@Override
		public void mouseClicked(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			
		}

}}
 
S

SlaterB

Gast
wieso gleich ImageIcon?..

versuche erstmal
graphicspanel.add(new JLabel("a"));

damit gehts bei mir
 

babuschka

Top Contributor
Also bei mir ist der Button direkt links vom Panel. Wie kann ich die untereinander anordnen? Und die Scrollbalken sind auch nicht da?!

Ich wollte das so machen:

Ein Fenster. Darin ganz unten ein Button "OK". Darüber mein Panel, was die gesamte Fenstergröße ausfüllt. Wenn der Inhalt des Panels zu groß wird, sollen Scollbalken eingeblendet werden.
 
S

SlaterB

Gast
du stellst für meinen Geschmack zu viele
'wie macht man xy? - ich will dafür keine Tutorials lesen'
-Fragen

Layout ist ne komplizierte Sache..


hier noch eine Version zum Ausprobieren,
ansonsten von mir keine weiteren Antworten


Code:
 public GUITest(int rows, int cols)
    {

        JButton nextButton = new JButton("Next step");

        graphicspanel = new GraphicsPanel();
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(nextButton);

        graphicspanel.setLayout(new GridLayout(rows, cols));
        graphicspanel.setPreferredSize(new Dimension(300, 300));
        // DIENT ZUM TESTEN. test.jpg = 10x10 Pixel
        for (int i = 1; i <= (rows * cols); i++)
        {
            graphicspanel.add(new JLabel("aaaaa"));
        }
        JScrollPane scroll = new JScrollPane(graphicspanel);
        scroll.setPreferredSize(new Dimension(100, 100));
        this.add(scroll);

    }
 

babuschka

Top Contributor
Ich hatte einfach das Gefühl, dass wir aneinander vorbeigeredet haben.
Natürlich musst Du mir nicht helfen, wenn Du nicht willst. Ich danke Dir trotzdem ganz herzlich für deine Mühe.

Das Layouten eine komplizierte Sache ist, habe ich heute die letzten 5 Stunden, nur zu genüge gespürt.
Irgendwann kommt man zu dem Punkt wo man im Forum um Hilfe sucht. Das hat nichts mit Faulheit, oder wie Du es sagst "Ich will nichts Lesen" zu tun, sondern einfach weil man irgendwann überfordert ist und ab und zu mal ein Erfolgserlebnis haben möchte. Man kann schließlich auch von Lösungen lernen.
 

Tankwart

Mitglied
Hi, ich glaube du machst es dir alles in allem umständlicher als es nötig ist. Ich hab deinen Code mal ein bischen umgeschrieben und hoffe dass es auch das ist was du haben willst.

Grundsätzlich solltest du dich nochmal über das Thema LayoutManager belesen. Diese kann man quasi in einander "schachteln" um komplexere Layouts zu bekommen.

Hier jetzt mal der Code
Code:
public class MySimpleGUI extends JFrame{ 
    
   private GraphicsPanel graphicspanel;
   

    public MySimpleGUI() { 
        super("Simple Swing GUI")
		Container cp = getContentPane();
		cp.setLayout(new BorderLayout());
				
        JButton nextButton = new JButton("OK"); 
		nextButton.addActionListener(this);
		cp.add(nextButton, "South");
		
		int cols = 10;
		int rows = 10;
		
        graphicspanel = new GraphicsPanel(); 
		graphicspanel.setLayout(new GridLayout(rows, cols)); 
        
		
		// DIENT ZUM TESTEN. test.jpg = 10x10 Pixel 
		for (int i=1;i<=(rows*cols);i++) {
			graphicspanel.add(new JLabel(new ImageIcon("test.jpg")));
		}
		
		cp.add(new JScrollPane(graphicspanel), "Center");
    } 
    
    public static void main(String[] args) { 
        
		MySimpleGui frame = new MySimpleGUI();       
        frame.setLocation(512,384); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setSize(320,240); 
        frame.setResizable(false);
        frame.setVisible(true); 
    } 
    
   class GraphicsPanel extends JPanel implements MouseListener { 
        
	   /*
		   What ever
		*/

	}
}

Ich habs jetzt nicht ausprobiert. Ich hoffe ich habe nicht zu viel Mist gemacht (bin auch kein wirklicher Profi) und das es weiterhilft.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Anfängerfrage: Swing und LayoutManager AWT, Swing, JavaFX & SWT 4
5 Anfängerfrage: Wie starte ich meine ersten Swing-Programme AWT, Swing, JavaFX & SWT 4
E Swing Anfängerfrage zum thema MVC AWT, Swing, JavaFX & SWT 2
R Anfängerfrage: Ansichten des JTree AWT, Swing, JavaFX & SWT 1
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
C LayoutManager GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 5
M Swing Anfängerfrage: ActionPerformed AWT, Swing, JavaFX & SWT 3
E Swing Anfängerfrage JTable AWT, Swing, JavaFX & SWT 2
S GridBagLayout - Anfängerfrage AWT, Swing, JavaFX & SWT 9
S anfängerfrage zu frame in awt AWT, Swing, JavaFX & SWT 2
G Panel austauschen - Anfängerfrage AWT, Swing, JavaFX & SWT 9
G Anfängerfrage: Startbildschirm AWT, Swing, JavaFX & SWT 4
T Anfängerfrage zum Layout AWT, Swing, JavaFX & SWT 5
G Anfängerfrage: Fensterinhalt ändern AWT, Swing, JavaFX & SWT 4
E [Anfängerfrage] JFrame mit ActionListener AWT, Swing, JavaFX & SWT 2
M Anfängerfrage: JScrollPane AWT, Swing, JavaFX & SWT 5
S Problem mit Eventhandling (Anfängerfrage) AWT, Swing, JavaFX & SWT 12
G Einfaches frame mit einigen Rechtecken (Anfängerfrage) AWT, Swing, JavaFX & SWT 6
G anfängerfrage:background und buttonimages AWT, Swing, JavaFX & SWT 3
R Anfängerfrage:anzeige von Gui elementen AWT, Swing, JavaFX & SWT 2
G GUI Anfängerfrage AWT, Swing, JavaFX & SWT 2
XWing Jave swing overly benutzten. AWT, Swing, JavaFX & SWT 3
J Anzeige ID und Markierung für Knoten in Eclipse & Swing AWT, Swing, JavaFX & SWT 4
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

Ähnliche Java Themen


Oben