C
Camino
Gast
Hallo,
ich hab eine etwas umfangreichere Swing-Anwendung erstellt, bei der im Hauptframe ein MainPanel in den CENTER-Bereich hinzugefügt wird. Dieses MainPanel wiederum ist ein JTabbedPane und kann mehrere Tabs (JPanel) hinzufügen, welche wieder um CardLayout haben und zwischen mehreren (ziemlich umfangreichen) Formularen hin- und herschalten können. Das funktioniert auch soweit. Diese Formulare werden in eine JScrollPane gelegt und diese JScrollPane dann dem CardLayout hinzugefügt. Nun ist mir aufgefallen, dass die Scrollgeschwindigkeit (wenn der Frame kleiner wie das Formular ist) ziemlich langsam ist. Warum ist das so? Zuerst dachte ich, das liegt evtl. an den umfangreichen Formularen (JPanel mit GridBagLayout und ziemlich vielen Komponenten). Dann hab ich mir aber zum Testen nochmal eine kleinere Anwendung erstellt, mit einem leeren JPanel in einem CardLayout. Dieses JPanel habe ich mit setPreferredSize grösser als den Frame gemacht, damit die Scrollbalken auftauchen. Und auch da bewegt sich mein Panel sehr langsam, wenn ich mit dem Mausrad rauf oder runter scrolle. Hab ich beim hinzufügen des Panels zum Scrollpane was falsch gemacht? Oder kann jemand sonst einen Fehler entdecken und mir weiterhelfen?
Hier kommt mal das Testprogramm (die zwei weiteren Panel im CardLayout sind nur zu Testzwecken angelegt und können nicht angezeigt werden, da es mir erst mal nur um die Scrollgeschwindigkeit geht):
Ergänzung: Eigentlich ist das mit dem CardLayout sogar egal. Wenn ich es einfach dem CENTER-Bereich des Frames hinzufüge, hab ich das gleiche. Das Panel lässt sich mit dem Mausrad nur sehr langsam scrollen. Also vermutlich hab ich da einen Fehler beim Zuweisen des Panels ins ScrollPane?
ich hab eine etwas umfangreichere Swing-Anwendung erstellt, bei der im Hauptframe ein MainPanel in den CENTER-Bereich hinzugefügt wird. Dieses MainPanel wiederum ist ein JTabbedPane und kann mehrere Tabs (JPanel) hinzufügen, welche wieder um CardLayout haben und zwischen mehreren (ziemlich umfangreichen) Formularen hin- und herschalten können. Das funktioniert auch soweit. Diese Formulare werden in eine JScrollPane gelegt und diese JScrollPane dann dem CardLayout hinzugefügt. Nun ist mir aufgefallen, dass die Scrollgeschwindigkeit (wenn der Frame kleiner wie das Formular ist) ziemlich langsam ist. Warum ist das so? Zuerst dachte ich, das liegt evtl. an den umfangreichen Formularen (JPanel mit GridBagLayout und ziemlich vielen Komponenten). Dann hab ich mir aber zum Testen nochmal eine kleinere Anwendung erstellt, mit einem leeren JPanel in einem CardLayout. Dieses JPanel habe ich mit setPreferredSize grösser als den Frame gemacht, damit die Scrollbalken auftauchen. Und auch da bewegt sich mein Panel sehr langsam, wenn ich mit dem Mausrad rauf oder runter scrolle. Hab ich beim hinzufügen des Panels zum Scrollpane was falsch gemacht? Oder kann jemand sonst einen Fehler entdecken und mir weiterhelfen?
Hier kommt mal das Testprogramm (die zwei weiteren Panel im CardLayout sind nur zu Testzwecken angelegt und können nicht angezeigt werden, da es mir erst mal nur um die Scrollgeschwindigkeit geht):
Java:
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Test
extends JFrame {
public Test() {
setTitle("Test");
setSize(600, 400);
// Frame auf dem Bildschirm zentrieren
setLocationRelativeTo(getParent());
add( BorderLayout.CENTER, new TestPanel() );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setVisible( true );
}
public static void main(String[] args) {
new Test();
}
class TestPanel
extends JPanel {
CardLayout card;
public TestPanel() {
card = new CardLayout();
this.setLayout(card);
JPanel panel1 = new JPanel();
JScrollPane scroll1 = new JScrollPane(panel1);
panel1.setPreferredSize(new Dimension(800, 600));
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
panel1.setBackground(Color.YELLOW);
panel2.setBackground(Color.RED);
panel3.setBackground(Color.BLUE);
add(scroll1, "1");
add(panel2, "2");
add(panel3, "3");
}
public void showPanel(String panel) {
card.show(this, panel);
}
}
}
Ergänzung: Eigentlich ist das mit dem CardLayout sogar egal. Wenn ich es einfach dem CENTER-Bereich des Frames hinzufüge, hab ich das gleiche. Das Panel lässt sich mit dem Mausrad nur sehr langsam scrollen. Also vermutlich hab ich da einen Fehler beim Zuweisen des Panels ins ScrollPane?
Java:
...
TestPanel testPanel = new TestPanel();
testPanel.setPreferredSize(new Dimension(800, 600));
JScrollPane scroll1 = new JScrollPane(testPanel);
add( BorderLayout.CENTER, scroll1 );
...
Zuletzt bearbeitet von einem Moderator: