JScrollBar - Immer drei Zeilen weiter

Status
Nicht offen für weitere Antworten.

redbomber

Bekanntes Mitglied
Hi zusammen,

habt ihr eine Idee, wie ich es schaffe, dass beim Klick auf die Scrollbar immer 3 Zellen übersprungen werden?
Also ich möchte nicht mehr immer nur eine Zeile überspringen, sondern immer 3 stück, da bei mir immer 3 Zeilen (+ Daten, - Daten und Scala) zusammen gehören, also möchte ich dass dann die oberste Zeile im Fenster immer mit einem solchen dreier Block beginnt.
 

max40

Bekanntes Mitglied
Ich glaube damit müsste es klappen

JScrollPane pane = new JScrollPane();
pane.getVerticalScrollBar().setBlockIncrement(3);
 

Ebenius

Top Contributor
Was max40 vorschlägt geht so nicht.

Welche View liegt auf dem Viewport? Eine JTextArea, bzw. irgendeine andere Komponente die das Scrollable-Interface implementiert? Am einfachsten davon ableiten und die entsprechende Implementierung aus Scrollable.getScrollableUnitIncrement(java.awt.Rectangle, int, int) modifizieren: [Highlight=Java]@Override
public int getScrollableUnitIncrement(
Rectangle vRect,
int ori,
int dir) {
int result = super.getScrollableUnitIncrement(vRect, ori, dir);
if (ori == SwingUtilities.VERTICAL) {
// two more lines
for (int i = 0, prev = result; i < 2; i++, result += prev) {
vRect.x += prev;
prev = super.getScrollableUnitIncrement(vRect, ori, dir);
}
}

return result;
}[/Highlight]
Ebenius
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
hmm, also ich habe es zwar gesetzt, aber es wird immernoch nur eine Zeile weiter gesprungen
Ich hab's auch getestet und bei mir sind's immer drei (außer natürlich am Ende abwärts / Anfang aufwärts, wenn's nicht aufgeht). :)

Guggsdu:
[HIGHLIGHT="Java"]final JTextArea area =
new JTextArea("abc\ndef\nghi\njkl\nopq\nrst\nuvw\nxyz\n012", 4, 40) {

@Override
public int getScrollableUnitIncrement(
Rectangle vRect,
int ori,
int dir) {
int result = super.getScrollableUnitIncrement(vRect, ori, dir);
if (ori == SwingUtilities.VERTICAL) {
// two more lines
for (int i = 0, prev = result; i < 2; i++, result += prev) {
vRect.x += prev;
prev = super.getScrollableUnitIncrement(vRect, ori, dir);
}
}

return result;
}
};

final JFrame f = new JFrame("Scrollable Fun");
f.setContentPane(new JScrollPane(area));
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);[/HIGHLIGHT]
Wo ist denn Dein Quelltext? Ist doch nicht meine Aufgabe mir einen Kontext für Dein Problem auszudenken. Grmbl.

Ebenius
 

redbomber

Bekanntes Mitglied
jo sorry :(

Ich dachte nur, dass es bereits Methoden gibt, wo dies direkt bei der JScrollBar eingestellt werden kann, wie weit gesrcollt werden kann.

Zumindest gibt es ja die
Code:
public void setBlockIncrement(int v)
(für den klick auf den Balken)
und die
Code:
public void setUnitIncrement(int v)
für den Klick auf die Pfeiltasten.

Ich weiss, das ist aber keine Entschuldigung!
 

Ebenius

Top Contributor
BlockIncrement und UnitIncrement werden durch das JScrollPane mit den Werten aus dem Scrollable verwaltet. Diese Werte sind dynamisch; hängen also davon ab, wo sich das VisibleRect gerade befindet. Hast Du meinen Vorschlag probiert?

Ebenius
 

redbomber

Bekanntes Mitglied
Also jetzt wollte ich noch den Fall behandeln, dass wenn ich etwa den Balken nehme und diesen an irgend eine Position schiebe, dann befindet sich ja mein visible Rect an irgend einer Position, also kann dieser auch innerhalb meines 3er-Blocks (3 Zeilen) liegen.

Also dachte ich mir:
mein Controller fängt das Event ab, wenn ich an den Balken die Scrollbar bewege.
Daraufhin wird ein marker gesetzt
Und ich berechne dann in dieser Methode einmalig die Anzahl an Pixeln, die benötigt werden um wieder VOR einen solchen dreier Block zu kommen.
(Ich berechne einfach in beide Richtungen die # an Pixeln die benötigt werden um VOR einen dreier Block zu kommen
dann je nach direction werden die passende Anzahl an Pixeln zurück gegeben.)

Dazu wollte ich nun
die folgende Events abfangen:
AdjustmentEvent.BLOCK_DECREMENT und AdjustmentEvent.BLOCK_INCREMENT, da diese gefeuert werden, wenn ich den Balken bewege.

Aber bei mir wird immer nur der AdjustmentEvent.TRACK Event gefeuert.
(Also auch kein AdjustmentEvent.UNIT_INCREMENT oder AdjustmentEvent.UNIT_DECREMENT)
 

Ebenius

Top Contributor
Ich würde dazu den Viewport ableiten. Allerdings gefällt mir dieses Verhalten gar nicht. [Highlight=Java]final JViewport vp = new JViewport() {

@Override
public void setViewPosition(Point p) {
final Component view = getView();
if (view instanceof Scrollable) {
final Scrollable scrollable = (Scrollable) view;
p.y++;
final Rectangle r = new Rectangle(p, getExtentSize());
final int ori = SwingConstants.VERTICAL;
p.y -= scrollable.getScrollableUnitIncrement(r, ori, -1);
}

super.setViewPosition(p);
}
};[/Highlight]
Ebenius
 

redbomber

Bekanntes Mitglied
Also ich bin das Problem bisher wie folgt umgangen:

Ich bestimme in welcher der drei Zeilen ich mich befinde.

Für jede Mögliche der drei Zeilen berechne ich die Anzahl der Pixel nach oben, bzw. Anzahl der Pixel nach unten.

Code:
public int getScrollableUnitIncrement(Rectangle visibleRect,
			int orientation, int direction) {

		int row = new ComputeFirstVisibleRow_Delegate().execute(visibleRect.y, model
				.getBoxSizeY());
		StrandInformation strand = new GetStrand_Delegate().execute(row, model
				.getRowCount());
		int valueUp = 0;
		int valueDown = 0;

		int boxSizeY = this.model.getBoxSizeY();
		int diff = visibleRect.y - (row * boxSizeY);
		int rest = (boxSizeY - diff);

		if (strand == StrandInformation.PLUS) {
			valueUp = diff;
			valueDown = rest + 2 * boxSizeY;
		} else if (strand == StrandInformation.MINUS) {
			valueUp = diff + boxSizeY;
			valueDown = rest + boxSizeY;
		} else if (strand == StrandInformation.PLACEHOLDER) {
			valueUp = diff + 2 * boxSizeY;
			valueDown = rest;
		}
		
		valueUp = Math.abs(valueUp);
		valueDown = Math.abs(valueDown);
		// up
		if (direction < 0) {
			if (valueUp == 0)return boxSizeY * 3;
			else return valueUp;
		}
		// down
		else {
			if (valueDown == 0)	return boxSizeY * 3;
			else return valueDown;
		}
	}

Also rufe ich diese Aktion bei jeder Änderung der ScrollBar auf.
Ich dachte zuerst das dies teure Berechnungen sind und ich diese somit nur wenn nötig aufrufe, aber ich denke ich lass es einfach so, dass dies jedes mal berechnet wird.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 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
loadbrain Mehrer Panesl: JScrollBar, JScrollPane? AWT, Swing, JavaFX & SWT 9
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
Hatsi09 Javafx MediaPlayer spielt nicht immer AWT, Swing, JavaFX & SWT 3
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M UI immer lesbar, egal welche Auflösung AWT, Swing, JavaFX & SWT 7
N SceneBuilder wie auf Attribute zugreifen? Diese sind immer null. AWT, Swing, JavaFX & SWT 6
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JavaFX Linie immer in der Mitte der Szene halten AWT, Swing, JavaFX & SWT 12
M Java FX Immer aktuelle Mausposition anzeigen AWT, Swing, JavaFX & SWT 6
Tom299 JavaFX Default-Cursor läßt sich nicht immer "aktivieren" AWT, Swing, JavaFX & SWT 3
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
C JTextPane scrollt mit setText() immer nach oben AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
V Buttons sehen immer "active" aus AWT, Swing, JavaFX & SWT 6
M SWT CCombo immer so groß wie der größte Wert! AWT, Swing, JavaFX & SWT 0
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
D Letzter Button füllt immer ganzes Fenster AWT, Swing, JavaFX & SWT 5
L View aus dem MVC ist immer die GUI? AWT, Swing, JavaFX & SWT 5
C JTable Datensätze bleiben immer gleich AWT, Swing, JavaFX & SWT 14
K 2D-Grafik interstectsLine gibt immer false zurück AWT, Swing, JavaFX & SWT 18
D JDialog: immer nur einer gleichzeitig AWT, Swing, JavaFX & SWT 4
M Fenster mit ProgressMonitor immer leer AWT, Swing, JavaFX & SWT 23
I Fenster immer im Vordergrund AWT, Swing, JavaFX & SWT 14
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
D JTree node reagiert bei Klick nicht immer AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
C SWT Combo getSelectionIndex() immer -1? AWT, Swing, JavaFX & SWT 10
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
W 2D-Grafik Koordinaten nicht immer die selben AWT, Swing, JavaFX & SWT 9
D Swing PopupMenu immer an gewünschte Position? AWT, Swing, JavaFX & SWT 2
A BufferedImage nach dem Speichern immer schwarz AWT, Swing, JavaFX & SWT 8
C TextArea Ausgabe immer ganz oben AWT, Swing, JavaFX & SWT 3
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
O Immer Exception in AWT-EventQueue-0 AWT, Swing, JavaFX & SWT 5
F AWT MouseMotionListener e.getButton() ist immer 0 unter Linux und Windows AWT, Swing, JavaFX & SWT 6
N JTable, Zeile bleibt immer selektiert.... AWT, Swing, JavaFX & SWT 3
A Swing JFrame vergrößert sich immer bei setText() eines Labels AWT, Swing, JavaFX & SWT 3
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
M WindowEvent löst immer PropertyChangeListener aus AWT, Swing, JavaFX & SWT 9
F Spalten in JTable immer am rechten Tabellenrand AWT, Swing, JavaFX & SWT 3
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
S JFreeChart Achse immer sichtbar AWT, Swing, JavaFX & SWT 2
C AWT dispose() erzeugt nicht immer formfeed AWT, Swing, JavaFX & SWT 2
R Swing JDialog liefert immer false, 2 JListen verknüpfen AWT, Swing, JavaFX & SWT 3
B Swing: letztes Element wird immer auf Fenstergröße gezogen AWT, Swing, JavaFX & SWT 3
B Swing JTable getSelectedRow() liefert immer -1 AWT, Swing, JavaFX & SWT 6
A Größe eines JFrames immer nur quadratisch AWT, Swing, JavaFX & SWT 8
aze getX ,getY immer 0 AWT, Swing, JavaFX & SWT 9
R JTable immer nur die letzte Spalte markiert.... AWT, Swing, JavaFX & SWT 4
ABstraCT JTabbedPane - click wird nicht immer ausgeführt ! AWT, Swing, JavaFX & SWT 10
aze JDialog immer so breit ,dass die Überschrift sichtbar ist AWT, Swing, JavaFX & SWT 6
S Listener der mich informiert wann immer einer Liste ein Element hinzugefuegt wird? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben