webentwicklung-frage-antwort-db.com.de

Wie kann man einen JFrame in Java scrollbar machen?

Ich habe diesen Code, in den ich versuche, ein scrollbares Panel (JPanel) einzupassen, aber ich verstehe es nicht. Hier ist mein Code:

public class Sniffer_GUI extends JFrame {
Canvas c = new Canvas();
ConnectorPropertiesPanel props;
public Sniffer_GUI() {
    super("JConnector demo");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    getContentPane().setLayout(new GridBagLayout());
    init();

    getContentPane().add(new JLabel("Connectors example. You can drag the connected component to see how the line will be changed"),
                         new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
    getContentPane().add(initConnectors(),
                         new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
    getContentPane().add(props,
                         new GridBagConstraints(1, 1, 1, 1, 0, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(5, 0, 5, 5), 0, 0));
    setSize(800, 600);
    setLocationRelativeTo(null);

}

Danke im Voraus.

Ich bearbeite, um einen Code hinzuzufügen, der teilweise zu funktionieren scheint ...

public Sniffer_GUI() {
    super("JConnector demo");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel container = new JPanel();
    JScrollPane scrPane = new JScrollPane(container);
    add(scrPane);
    scrPane.setLayout(new ScrollPaneLayout());
    init();

    add(initConnectors());

    setSize(800, 600);
    setLocationRelativeTo(null);

}

Aber es ist immer noch nicht scrollbar, zumindest macht es seine Funktion in einem JScrollPane zu einem guten Schritt.

9
Joe Lewis

Machen Sie ein JPanel scrollbar und verwenden Sie es als Container, etwa wie folgt:

JPanel container = new JPanel();
JScrollPane scrPane = new JScrollPane(container);
add(scrPane); // similar to getContentPane().add(scrPane);
// Now, you can add whatever you want to the container
19
Eng.Fouad

So erweitern Sie die @ Eng.Fouad-Antwort:

public class Sniffer_GUI extends JFrame {
    Canvas c = new Canvas();
    ConnectorPropertiesPanel props;
    public Sniffer_GUI() {
        super("JConnector demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel container = new JPanel();
        JScrollPane scrPane = new JScrollPane(container);
        getContentPane().add(scrPane);
        container.setLayout(new GridBagLayout());
        init();

        container.add(new JLabel("Connectors example. You can drag the connected component to see how the line will be changed"),
                             new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
        container.add(initConnectors(),
                             new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
        container .add(props,
                             new GridBagConstraints(1, 1, 1, 1, 0, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(5, 0, 5, 5), 0, 0));
        setSize(800, 600);
        setLocationRelativeTo(null);

    }
}
6
Guillaume Polet

Vielleicht hilft das ...

JFrame frame = new JFrame();
JPanel panel = new JPanel();

// add something to you panel...
// panel.add(...);

// add the panel to a JScrollPane
JScrollPane jScrollPane = new JScrollPane(panel);
// only a configuration to the jScrollPane...
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

// Then, add the jScrollPane to your frame
frame.getContentPane().add(jScrollPane);

Um eine Komponente eines JFrame scrollbar zu machen, wickeln Sie die Komponente in ein JScrollPane ein:

    JScrollPane myJScrollPane = new JScrollPane(myJLabel,
         JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
         JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

und ersetzen Sie Erwähnungen von myJLabel durch myJScrollPane. Arbeitete für mich.

1
gherson

Wenn Sie sich nicht an der Basis befinden, korrigieren Sie mich einfach und korrigieren Sie mich, aber die Verwendung eines solchen JScrollPane-Objekts hat die unbeabsichtigte Folge, dass eine häufigere Fensteränderung erforderlich ist.

Ich hatte zum Beispiel ein Programm, in dem ich ein so genanntes JFrame-weites Scrollpane eingerichtet habe. Ich hatte auch eine JTextArea in einer Registerkarte in dem Frame, die dieselbe Größe wie der Inhaltsbereich hatte. Diese textArea befand sich auch in einem eigenen Scrollfenster (dies war eher ein umständliches Projekt als alles andere). Beim Laden von Inhalten aus einer Datei, die in der textArea-Datei abgelegt werden sollen, wurden die Bildlaufleisten im Textbereich ausgelöst.

Das Ergebnis war, dass mein, nennen wir es das innereScrollPane, jetzt aufgrund der Scrollbars, die zuvor nicht sichtbar waren, größer als der JFrame war. Dies löste dann das aus, was ich jetzt "outerScrollPane" nennen werde, um seine Bildlaufleisten anzuzeigen, die dann die inneren Bildlaufleisten verdeckten.

Dies wurde leicht behoben, indem ein zusätzliches window.pack () - Argument am Ende meiner Dateiöffnungsmethode hinzugefügt wurde, aber ich wollte es nur rausschmeißen. Die Bildlaufleisten können den Inhalt des Fensters verdecken, wenn Sie nicht aufpassen. Aber ... nun, es gibt eine Million Möglichkeiten, um dieses Problem zu verhindern, also ist es keine große Sache. Nur etwas zu beachten.

1
user2223059

Versuche dies:

JScrollPane sp = new JScrollPane();
this.add(sp).
sp.add( *GUI elements for your applications.*)

So etwas sollte für Sie funktionieren. Werfen Sie einen Blick auf this als auch:

0
Logard