Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird

Kaddl

Mitglied
Hey Leute,
ich werkel seit gestern an meinem Problem rum. Ich will einfach nur eine ScrollBar sehen, wenn ich das Frame verkleinere... ich bekomme das einfach nicht hin. Hab schon mit
Code:
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
gearbeitet, aber der versteht nicht, wann ich die sehen will.

hier mein bisheriger code..

Code:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JScrollBar;
import javax.swing.JCheckBox;
import javax.swing.ScrollPaneConstants;
import javax.swing.JTextPane;
import java.awt.GridLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JButton;


public class FrmOrderDetail extends JFrame {

    private JPanel contentPane;

    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FrmOrderDetail frame = new FrmOrderDetail();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
    * Create the frame.
    */
    public FrmOrderDetail() {
       
        // Look And Feel
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }

        // placements
        setVisible(true);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
       
        setBounds(100, 100, 1772, 1010);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        //hier JScrollPane hinzufügen, aber wie?


    }
}

Folgendes hab ich versucht:

Code:
    JScrollPane scrollPane = new JScrollPane();
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        contentPane.add(scrollPane);

Jetzt ist es aber so, dass das JScrollPane seine größe mit verändert, ich aber trotzdem keine Balken sehe. Ich hab wirklich alles versucht und komme nicht mehr weiter. Mit .setPreferredSize(new Dimension()); hab ich auch schon gearbeitet :/ klappt alles irgendwie nicht.

Hoffentlich kann mir jemand helfen.

Danke. Grüße Katja.
 
Das liegt daran dass du noch nichts in der ScrollPane liegen hast. Daher kann die ScrollPane nicht wissen welcher Bereich dargestellt werden kann. Füge mal das hier ein:
Java:
    JPanel panel = new JPanel();
     panel.setPreferredSize( new Dimension( 1700, 950 ) );
     final JScrollPane scrollPane = new JScrollPane( panel );
     contentPane.add( scrollPane );
Nebenbei: Es ist besser ein Frame erst sichtbar zu machen, nachdem das Layout fertig ist. Also setVisible am besten am Ende des Konstuktors aufrufen.
 
Hey, danke das hat funktioniert.
Also wenn ich das Fenster kleiner mache, dann kommen die Scrollbars. Perfekt.

Allerdings hat sich ein neues Problem aufgetan.
Ich habe einen Button dem JPanel hinzugefügt. Der ist sichtbar, aber sobald ich das Fenster verkleinere und die Scrollbars erscheinen und ich dann scrolle.. dann ist der Button verschwunden.

Woran liegt das?

Code:
    public FrmOrderDetail() {
       
        // Look And Feel
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
        }

        // placements

        //setResizable(false);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
       
        setBounds(100, 100, 1700, 900);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(1600, 700));
        final JScrollPane scroll = new JScrollPane (panel);
        panel.setLayout(null);
       
        JButton btnNewButton = new JButton("New button");
        btnNewButton.setBounds(877, 774, 89, 23);
        panel.add(btnNewButton);
        contentPane.add(scroll);
       
       
        setVisible(true);
       
    }
 

Zurück
Oben