JTable in JScrollPane - nach unten scrollen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich hab hier eine JTable in einer JScrollPane:
Code:
JScrollPane scroll = new JScrollPane(myTable);

In der Tabelle stehen Werte.

Ich hätte es gerne, dass die Tabelle automatisch nach ganz unten scrollt. Nur wie mach ich das?

In SWT geht das glaub ich mit scrollbar.setvalue(scrollbar.getMaximum());

Aber mit Swing?
 
S

SlaterB

Gast
genauso, wenn du erstmal das JScrollPane nach einer Methode abgesucht hast, die die die ScrollBar zurückliefert
 
G

Gast

Gast
Ok, gefunden
Code:
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());

Leider funktioniert's nicht. D.h. es wird dennoch nicht nach unten gescrollt....
 
G

Guest

Gast
Demo die zeigt, dass es nicht funktioniert:

Code:
public class DemoFrame extends JFrame{
	public DemoFrame(){
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Object[][] o = new Object[][]{{"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"},
								  {"df","df","df","df","df","df"}};
		
		JTable table = new JTable(o, new Object[]{"Spalte 1","Spalte 2"});
		
		JScrollPane scroll = new JScrollPane(table);
		scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());
		
		this.add(scroll,BorderLayout.CENTER);
		this.pack();
		this.setSize(600, 300);
		this.setVisible(true);
	}

	public static void main(String[] args) {	
		SwingUtilities.invokeLater(new Runnable(){
			public void run(){
				new DemoFrame();
			}
		});
	}
}
 
S

SlaterB

Gast
ja, leider dauert es teilweise eine Weile bis die ScrollBar überhaupt die Änderung des Inhalts mitbekommt oder ähnliches,

bei folgendem funktioniert es bei mir z.B. nie, recht ähnlich deinem:
Code:
public class TestGUI
    extends JFrame
{

    public TestGUI()
        throws Exception
    {
        final JScrollPane sp = new JScrollPane();
        final JScrollBar sb = sp.getVerticalScrollBar();
        add(sp);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(100, 300);
        setVisible(true);

        Thread.sleep(500);
        final JPanel p = new JPanel();
        p.setPreferredSize(new Dimension(100, 1000));
        SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    sp.setViewportView(p);
                    System.out.println(sb.getMaximum());
                    sb.setValue(sb.getMaximum());
                }
            });

    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }

}



dagegen funktioniert
Code:
        SwingUtilities.invokeAndWait(new Runnable()
            {
                public void run()
                {
                    sp.setViewportView(p);
                }
            });

        System.out.println(sb.getMaximum());
        sb.setValue(sb.getMaximum());
von der main aus immer (in einer Handvoll Tests), wenn auch mit dem unschönen Effekt, dass erst Scrollbar 0 zu sehen ist und dann auf das Maximum gesprungen wird,

wichtig ist aber dass invokeAndWait() nicht vom AWT-Thread aus, z.B. nicht von einem ActionListener aus aufgerufen werden darf,
also erst ein separater Thread gestartet werden muss, der das dann aufruft,

wie man es ganz anders richtig macht weiß vielleicht wer anders
 

Marco13

Top Contributor
Na, ihr seid ja humorig :lol:
Code:
JScrollPane scroll = new JScrollPane(table);
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());
Woher soll er denn wissen, wo er hinscrollen soll? Kann ja sein, dass das ganze in einen 100000x100000 großen Frame gepackt wird, dann ist nix mit scrollen (eher im Gegenteil ???:L :autsch: :wink: ) Also, das ganze muss wohl ... sichtbar ... oder zumindest "realized" sein, damit da was passieren kann. Vielleicht passt's ja so...
Code:
import javax.swing.*;
import java.awt.*;

public class DemoFrame extends JFrame{

   JScrollPane scroll;

   public DemoFrame(){
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      Object[][] o = new Object[][]{{"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"},
                          {"df","df","df","df","df","df"}};

      JTable table = new JTable(o, new Object[]{"Spalte 1","Spalte 2"});

      scroll = new JScrollPane(table);

      this.add(scroll,BorderLayout.CENTER);
      this.pack();
      this.setSize(600, 300);
      this.setVisible(true);
   }

   public void doit()
   {
      scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable(){
         public void run(){
             DemoFrame df = new DemoFrame();
             df.doit();
         }
      });
   }
}
 

André Uhres

Top Contributor
Oder die letzte Zeil selektieren:
Code:
package demo;
/*
 * TableSelectionDemo.java
 */
import javax.swing.*;
public class TableSelectionDemo extends JFrame {
    private JTable table;
    public TableSelectionDemo() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 300);
        setLocationRelativeTo(null);
        Object[][] o = new Object[25][];
        for (int row = 0; row < o.length; row++) {
            o[row] = new Object[]{"df", "df", "df", "df", "df", "df"};
        }
        table = new JTable(o, new Object[]{"Spalte 1", "Spalte 2"});
        add(new JScrollPane(table));
        table.changeSelection(table.getRowCount() - 1, 0, false, false);
    }
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TableSelectionDemo().setVisible(true);
            }
        });
    }
}
 
S

SlaterB

Gast
das ist ja bisschen tricky ohne JScrollPane, wie siehts in meinem Beispiel mit einem einfachen JPanel aus? ;)


> Woher soll er denn wissen, wo er hinscrollen soll? Kann ja sein, dass das ganze in einen 100000x100000 großen Frame gepackt wird, dann ist nix mit scrollen

und wo ist das Problem? dann soll ja auch nicht gescrollt werden, das läuft in jeder Auflösung perfekt, nur eben erst etwas später
 

Marco13

Top Contributor
Naja, ich finde das mit dem "Zeile selektieren" auch ein bißchen Fragwürdig - da wird ja der Effekt, dass eine JTable die ausgewählte Zeile sichtbar macht, irgendwie "mißbraucht" <edit>und es würde mich wundern, wennman den nicht auch irgnendwie ausschalten könnte</edit> ... wenn da schon ein SelectionListener dranhängt, macht der dann vielleicht irgendwas ungewolltes und so... also ... man muss sich schon GENAU überlegen, ob man das wirklich so machen will.

Und @SlaterB: Es ging darum, dass "getVerticalScrollBar().getMaximum()" wohl kaum einen sinnvollen Wert liefern kann, solange man nicht die Größe der ViewportView UND die Größe der ScollPane kennt....
 
S

SlaterB

Gast
muss es ja auch nicht, es würde reichen, wenn es einen sinnvollen Wert liefern würde, nachdem diese Tatsachen bekannt sind,

das Problem ist aus meiner Sicht, dass die JScrollBar wie so oft in Swing erst zeitversetzt geupdatet wird,
die Höhe des Views (getPreferredSize() ist bekannt, die des ScrollPanes sowieso (schon lange in der GUI angezeigt),

aber das ScrollPane weiß eine Weile lang nicht was es anzeigen soll oder muss durch internes Layout die bereits bekannte Höhe des Views an die ScrollBar weiterreichen und solange hat die Scrollbar den Bereich 0

edit: immer so ungenau von mir,
ich denke auch noch, dass die Anzeige des ScrollPanes nicht so wichtig ist, es kann auch ruhig später seine Größe ändern,
die Position der ScrollBar hängt nur von der Höhe des Views ab, die Position ist eine abstrakte Größe und wird dann zur Darstellung umgesetzt
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
W JTable mit fester Zeilenanzahl ausfüllend in JScrollPane integrieren AWT, Swing, JavaFX & SWT 7
D Swing JTable + JScrollPane + AutoResize AWT, Swing, JavaFX & SWT 2
F hintergrundbild für jtable als jscrollpane AWT, Swing, JavaFX & SWT 10
O JDialog-JScrollPane-JTable Problem AWT, Swing, JavaFX & SWT 3
X JTable soll im JScrollpane bei .add mitscrollen. AWT, Swing, JavaFX & SWT 4
M Swing JTable + JScrollPane (Breite und Höhenproblem) AWT, Swing, JavaFX & SWT 1
R Suchbare Zeilen von JTable in JScrollPane ermitteln AWT, Swing, JavaFX & SWT 9
R JTable: Implementierung einer JTable in einer JScrollPane AWT, Swing, JavaFX & SWT 2
V JTable in JScrollPane AWT, Swing, JavaFX & SWT 2
A Jtable Kategorienamen anzeigen ohne JScrollPane? AWT, Swing, JavaFX & SWT 2
J JTable nachträglich in einen JScrollPane einfügen AWT, Swing, JavaFX & SWT 6
J Fragen zu JTable und JScrollpane AWT, Swing, JavaFX & SWT 2
M JPanel JTable in einem JScrollPane AWT, Swing, JavaFX & SWT 6
W JTable wird vertikal in JScrollPane nicht ganz angezeigt AWT, Swing, JavaFX & SWT 2
vogella JTable und JScrollPane - ScrollPane immer in der Mitte AWT, Swing, JavaFX & SWT 2
H JTable in JScrollPane scrollt vertikal, nicht horizontal AWT, Swing, JavaFX & SWT 5
M Frage zu JTabbedPane + JScrollPane + JTable AWT, Swing, JavaFX & SWT 5
A JTable und JScrollPane AWT, Swing, JavaFX & SWT 12
S PopUp in JTable / JScrollPane AWT, Swing, JavaFX & SWT 3
F JScrollpane und Jtable in ein hilft mir :cry: AWT, Swing, JavaFX & SWT 6
javasdann JTable sichtbare Zeilen innerhalb von JScrollPane ermitteln AWT, Swing, JavaFX & SWT 5
B Schachtelung von JTable und JScrollpane in JPanel? AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26

Ähnliche Java Themen

Neue Themen


Oben