JPanel eingebettet in einem JScrollPane

Status
Nicht offen für weitere Antworten.

robb

Bekanntes Mitglied
Hi Leute,

ich bin gerade am erstellen einer GUI für eine Anzeige von verschiedenen Images, die zur Laufzeit generiert werden sollen. Wenn das Panel dann nicht mehr genügend Platz zur Verfügung hat soll eine Scrollbar erscheinen, allerding nur Vertikal. Bei einem Textbereich kann man eine Grenze einstellen fürs Horizontale. Gibt es dasselbe auch für Panels?
Stark vereinfacht sieht mein Code in etwa so aus:

Code:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

class Test extends JFrame{

        JPanel pnl = new JPanel();
  
        public Test(){

                set_GUI();
        }


        private void set_GUI(){
		
                
		JScrollPane sp = new JScrollPane(pnl);
		
		getContentPane().add(sp);
	}


        public static void main(String[] args){
		Test gui = new Test();
		gui.setLocation(100, 100);
		gui.setSize(800, 600);
		gui.setVisible(true);

	}   
}

In dem Panel "pnl" werden zur Laufzeit Images eingefügt und der Default Layoutmanager soll beibehalten werden,

mfg Robb
 
Gut, mit der Methode kann ich es umgehen, das mir Horizontal ein Scrollbar angezeigt wird. Allerding laufen die Images immer noch aus dem Panel raus... wenn ich das ganze ohne ScrollPane mache werden die Images wie gewünscht erst in einer Reihe und dann sobald der Platz in der ersten Reihe erreicht wurde dadrunter weiter angeordnet...
 
Der WrapLayout von Rob Camick: http://www.discoverteenergy.com/files/WrapLayout.java

Ein Beispiel:

Code:
package layout;
/*
 * WrapLayoutDemo.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WrapLayoutDemo {
    public static void main(String[] args) {
        final JPanel buttons = new JPanel();
        buttons.setLayout( new WrapLayout() );
        
        buttons.setSize(new Dimension(300, 1) );

        JFrame frame = new JFrame("WrapLayout");
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.getContentPane().add(buttons, BorderLayout.CENTER);
        
        final JScrollPane scrollPane = new JScrollPane(buttons);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setPreferredSize( new Dimension(200, 150) );
        buttons.setSize(scrollPane.getPreferredSize());
        scrollPane.addComponentListener( new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent e) {
                JScrollPane scrollPane = (JScrollPane)e.getComponent();
                JViewport viewport = scrollPane.getViewport();
                Dimension d = viewport.getSize();
                viewport.getView().setSize(d);
            }
        });
        frame.getContentPane().add(scrollPane);
        
        JToolBar toolbar = new JToolBar();
        frame.getContentPane().add(toolbar, BorderLayout.NORTH);
        JButton btAdd = new JButton("Add");
        toolbar.add(btAdd);
        btAdd.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                buttons.add( new JButton( "Button"  + (++k) ) );
                buttons.revalidate();
                
            }
        });
        
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
    private  static int k;
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben