Mehrer Panesl: JScrollBar, JScrollPane?

Status
Nicht offen für weitere Antworten.

loadbrain

Bekanntes Mitglied
Hallo,
ich habe eine kleine GUI geschrieben, nur zum Spass, bin noch sehr am Anfang mit Java, klappt auch alles wunderbar, allerdings habe ich jetzt festgestellt, dass auf manchen PCs das Fenster zu gross ist und man sollte scrollen können.
Jetzt ist es allerdings so, ich habe 3 JPanels mit verschiedenen JLabels, JTextField u.ä.
Wenn ich das richtig verstehe, dann kann man in ein JScrollPane nur eine KOmponente einfügen oder?
Ich will ja aber, dass das ganze Fenster scrollbar ist, also muss ich JScrollBar nehmen, oder?

Oder muss ich einfach ein grosses JPanel machen & da die anderen alle einfügen, dann dieses dem JScrollPanel zuordnen?

Ralf
 

loadbrain

Bekanntes Mitglied
Und warum klappt das dann nicht?

Code:
/*
 * ScrollTest.java
 *
 * Created on 11. November 2006, 16:09
 */

package my.scroller;

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JScrollPane;

/**
 *
 * @author  ralf
 */
public class ScrollTest extends javax.swing.JFrame {
    
    /** Creates new form ScrollTest */
    public ScrollTest() {
        initComponents();
        jScrollPane1 = new JScrollPane(); 
        setSize(190,190);
        jPanelGross.setPreferredSize(new Dimension(200, 200)); 
        jPanelGross.add(jScrollPane1);
        jScrollPane1.setViewportView(jPanelGross);
        getContentPane().add(jScrollPane1, BorderLayout.CENTER);
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {
        jPanelGross = new javax.swing.JPanel();
        jPanelOben = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jPanelMitte = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jPanelUnten = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setText("ich bin oben");

        org.jdesktop.layout.GroupLayout jPanelObenLayout = new org.jdesktop.layout.GroupLayout(jPanelOben);
        jPanelOben.setLayout(jPanelObenLayout);
        jPanelObenLayout.setHorizontalGroup(
            jPanelObenLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelObenLayout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1)
                .addContainerGap(147, Short.MAX_VALUE))
        );
        jPanelObenLayout.setVerticalGroup(
            jPanelObenLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelObenLayout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1)
                .addContainerGap(71, Short.MAX_VALUE))
        );

        jButton1.setText("jButton1");

        jButton2.setText("jButton2");

        jButton3.setText("jButton3");

        jButton4.setText("jButton4");

        org.jdesktop.layout.GroupLayout jPanelMitteLayout = new org.jdesktop.layout.GroupLayout(jPanelMitte);
        jPanelMitte.setLayout(jPanelMitteLayout);
        jPanelMitteLayout.setHorizontalGroup(
            jPanelMitteLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelMitteLayout.createSequentialGroup()
                .add(jPanelMitteLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jButton1)
                    .add(jPanelMitteLayout.createSequentialGroup()
                        .addContainerGap()
                        .add(jButton4)))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanelMitteLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jButton3)
                    .add(jButton2))
                .addContainerGap(47, Short.MAX_VALUE))
        );
        jPanelMitteLayout.setVerticalGroup(
            jPanelMitteLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelMitteLayout.createSequentialGroup()
                .addContainerGap()
                .add(jPanelMitteLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jButton1)
                    .add(jButton2))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanelMitteLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jButton3)
                    .add(jButton4))
                .addContainerGap(30, Short.MAX_VALUE))
        );

        jLabel2.setText("Ich bin unten");

        org.jdesktop.layout.GroupLayout jPanelUntenLayout = new org.jdesktop.layout.GroupLayout(jPanelUnten);
        jPanelUnten.setLayout(jPanelUntenLayout);
        jPanelUntenLayout.setHorizontalGroup(
            jPanelUntenLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelUntenLayout.createSequentialGroup()
                .add(jLabel2)
                .addContainerGap(154, Short.MAX_VALUE))
        );
        jPanelUntenLayout.setVerticalGroup(
            jPanelUntenLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelUntenLayout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel2)
                .addContainerGap(85, Short.MAX_VALUE))
        );

        org.jdesktop.layout.GroupLayout jPanelGrossLayout = new org.jdesktop.layout.GroupLayout(jPanelGross);
        jPanelGross.setLayout(jPanelGrossLayout);
        jPanelGrossLayout.setHorizontalGroup(
            jPanelGrossLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanelGrossLayout.createSequentialGroup()
                .addContainerGap()
                .add(jPanelGrossLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelUnten, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelMitte, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jPanelOben, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanelGrossLayout.setVerticalGroup(
            jPanelGrossLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanelGrossLayout.createSequentialGroup()
                .addContainerGap()
                .add(jPanelOben, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanelMitte, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jPanelUnten, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanelGross, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(107, 107, 107)
                .add(jPanelGross, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        pack();
    }// </editor-fold>                        
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ScrollTest().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanelGross;
    private javax.swing.JPanel jPanelMitte;
    private javax.swing.JPanel jPanelOben;
    private javax.swing.JPanel jPanelUnten;
    // End of variables declaration                   

    private JScrollPane jScrollPane1;
    
}

Bekomme
Code:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding container's parent to itself

Wo ist denn mein Fehler, jetzt habe ich doch ein grosses JPanel gemacht, dem 3 kleine zugeordnet und dann das grosse JPanel dem JScrollPane...
 

Wildcard

Top Contributor
Code:
        jPanelGross.add(jScrollPane1);
        jScrollPane1.setViewportView(jPanelGross);
So geht das nicht. Eine JScrollPane hat nur ein Kind, das ist ihr Viewport.
Du fügst aber die ScrollPane in das Panel ein und anschließend das Panel in die ScollPane.
 

loadbrain

Bekanntes Mitglied
ok, habe das
Code:
jPanelGross.add(jScrollPane1);
weggelassen, jetzt lässt es sich kompilieren & läuft, allerdings wird in meinem Fenster nichts angezeigt....
Warum denn das jetzt schon wieder???
 

loadbrain

Bekanntes Mitglied
Hallo,
kann mir hier niemand einen Hinweis geben?
Oder wie macht ihr das, wenn ihr ein Fenster zum Scrollen braucht?

Ich habe quasi 3 ABschnitte,

  • oben ein JPanel mit einem Header
    mitte ein JPanel mit einer Bildanzeige mit Navigation
    unten ein JPanel mit Jlabels & JTextFields zum ausfüllen.

Und die 3 sollen in ein JScrollPane, damit man scrollen kann.

Oder sollte ich das vom Layout ganz anders aufbauen????

Ralf
 

loadbrain

Bekanntes Mitglied
Ok, habe jetzt ein neues Layout gewählt ohne JPanels, jetzt klappt es ohne Probleme....

Habe rausgefunden, dass es mit einem BorderLayout klappt, das ist wohl das problem...

Naja, wieder was gelernt...
 

loadbrain

Bekanntes Mitglied
Dank HIlfe aus www.netbeans-forum.de
1. Neue "JFrame form" anlegen
2. Ein JScrollPane adden und auf die Grösse des Forms anpassen
3. Ein JPanel nehmen und auf den ScrollPane ziehen
4. Im "Inspector" steht jetzt jPanel1 unter dem Scrollpane. Von diesem JPanel das
Kontextmenu öffnen und da dann auswählen "Design this Container" (das JPanel ist im
Inspektor jetzt fett und im Editor ausgewählt)
5. Jetzt im Editor nach Lust und Laune Panels hinzufügen und bei Bedarf diesen Panels
Komponenten drauflegen etc.

:D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Hinzufügen mehrer JPanels zu einem JFrame AWT, Swing, JavaFX & SWT 2
C Mehrer Fragen zu großem kompletten Swing Beispiel AWT, Swing, JavaFX & SWT 5
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
Kidao Mehrer Panels, mit Buttons in einem Frame abwechselnd laden? AWT, Swing, JavaFX & SWT 3
G Keys zuweisen, 1 Key für mehrer Button AWT, Swing, JavaFX & SWT 7
I Swing JScrollBar AWT, Swing, JavaFX & SWT 2
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
R Swing JScrollBar mit JTextField koppeln AWT, Swing, JavaFX & SWT 3
P JScrollBar designen oder unsichtbar machen AWT, Swing, JavaFX & SWT 10
G Swing Value von einer JScrollBar auf eine andere übertragen AWT, Swing, JavaFX & SWT 2
T Swing JScrollBar fetter machen? AWT, Swing, JavaFX & SWT 2
H JScrollBar nicht verstellbar AWT, Swing, JavaFX & SWT 2
B Swing JScrollBar in einem JPanel mit FlowLayout AWT, Swing, JavaFX & SWT 15
A Swing JPanel in JScrollBar scrollbar machen AWT, Swing, JavaFX & SWT 4
D Swing JScrollbar ganz nach unten scrollen AWT, Swing, JavaFX & SWT 2
A JScrollBar durch Button ersetzten AWT, Swing, JavaFX & SWT 2
xehpuk Swing JScrollBar wird nicht eingeblendet, wenn JTable befüllt wird AWT, Swing, JavaFX & SWT 4
B Swing JScrollPane - observen wann eine JScrollBar angezeigt wird? AWT, Swing, JavaFX & SWT 5
V Position der JScrollBar ändern AWT, Swing, JavaFX & SWT 5
N Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
D Swing JScrollbar zentrieren AWT, Swing, JavaFX & SWT 3
Asamandra Benutzerdefinierte JScrollBar AWT, Swing, JavaFX & SWT 4
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JScrollBar-Position festlegen.. AWT, Swing, JavaFX & SWT 3
R JScrollBar - Immer drei Zeilen weiter AWT, Swing, JavaFX & SWT 10
R JScrollBar mit eigenem look and feel AWT, Swing, JavaFX & SWT 6
C JScrollpane eigenen jScrollBar einfügen AWT, Swing, JavaFX & SWT 2
R JScrollBar / JScrollPane: Ermitteln ob ganz unten AWT, Swing, JavaFX & SWT 2
F JScrollbar Verschiebung des Viewport ermitteln AWT, Swing, JavaFX & SWT 3
M JScrollbar + JTable + Zeilen wie in Excel hinzufügen AWT, Swing, JavaFX & SWT 14
M JScrollbar + Adjustmentlistener + Button AWT, Swing, JavaFX & SWT 3
M Listener für Button auf JScrollbar AWT, Swing, JavaFX & SWT 10
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
J JScrollBar lässt sich nicht auf minimum setzten AWT, Swing, JavaFX & SWT 7
T JScrollbar UI verändern AWT, Swing, JavaFX & SWT 5
D Problem mit JScrollBar, AutoScroll und JTextArea AWT, Swing, JavaFX & SWT 2
B horizontale bzw. vertikale JScrollBar breite von JScrollPane AWT, Swing, JavaFX & SWT 5
K JTextArea + JScrollBar AWT, Swing, JavaFX & SWT 11
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
V Farben setzen bei einigen Komponenten (JScrollBar, . AWT, Swing, JavaFX & SWT 3
P Breite eines JScrollbar vergrößern, aber wie? AWT, Swing, JavaFX & SWT 8
M JScrollbar bei einer JTable AWT, Swing, JavaFX & SWT 5
L JScrollBar AWT, Swing, JavaFX & SWT 3
B Problem mit der Kombination von JScrollBar und JTextArea AWT, Swing, JavaFX & SWT 2
S Anzeige-Wirrwar in JScrollbar AWT, Swing, JavaFX & SWT 3
B Listener entfernen bei JScrollbar AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben