Scrollable - Wie benutzt man das Interface richtig?

Status
Nicht offen für weitere Antworten.

BoneCracker

Mitglied
Hi,
ich habe ein Klasse, welche JComponent erweitert und Scrollable implementiert. Nun habe ich die Methode paint(Graphics g) überschrieben, kräftig Icons hineingemalt und etwas Text geschrieben. Das ganze Objekt habe ich dann in den Konstruktor von JScrollPane gegeben.

Die Methoden von Scrollable habe ich so implementiert:
Code:
	public boolean getScrollableTracksViewportWidth() {
		return true;
	}
	
	public boolean getScrollableTracksViewportHeight() {
		return true;
	}
	
	public Dimension getPreferredScrollableViewportSize() {
		return new Dimension(this._m_nWidth,this._m_nPreferredHeight);
	}
	
	public int getScrollableUnitIncrement(Rectangle visibleRect,int orientation,int direction) {
		return this._m_nMaxUnitIncrement;
	}
	
	public int getScrollableBlockIncrement(Rectangle visibleRect,int orientation,int direction) {
    	if (orientation == SwingConstants.HORIZONTAL) {
        	return visibleRect.width - this._m_nMaxUnitIncrement;
    	} else {
        	return visibleRect.height - this._m_nMaxUnitIncrement;
    	}
	}

this._m_nPreferredHeight ist die die y-Koordinate von dem untersten Strich.
this._m_nWidth ist die Breite.
this._m_nMaxUnitIncrement = 1

Als erstes hatte ich bei den oberen 2 Methoden als Rückgabewert "final boolean", jedoch ist dann das Programm jedesmal abgestürzt.

So wie es dort ist, werden die Scrollbalken angezeigt, jedoch kann man nicht Scrollen, als ob zu wenig Inhalt darin wäre, was aber definitif nicht so ist.

Was muss ich machen, dass ich mit den Scrollbalken noch scrollen kann?

Mfg
 
R

Roar

Gast
hmm die JScrollPane erwartet doch gar nix vom type Scrollable, die JScrollPane selbst implementiert Scrollable. übergeben musst du nur eine komponente :?
 

BoneCracker

Mitglied
Hi,
stimmt :shock: ! Ich konnte das Scrollable hinausmachen und es sah genau gleich (falsch) aus. Was kann ich dann noch machen, dass JScrollPane erkennt, dass in die vertikale Richtung noch mehr Inhalt ist und er dementsprechend die Scrollbars auch so darstellt, dass man daran scrollen kann?

Mfg
 
G

Guest

Gast
Code:
  // Wird die Komponente an die Höhe des Viewports angepasst?
  public boolean getScrollableTracksViewportHeight()

  // Wird die Komponente an die Breite des Viewports angepasst?
  public boolean getScrollableTracksViewportWidth()

  // Höhe des zu scrollenden Abschnitts, wenn seitenweise gescrollt wird.
  public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)

  // Höhe des zu scrollenden Abschnitts, wenn abschnittsweise gescrollt wird (Einfachklick auf Scrollbar-Buttons)
  public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
Gebe bei "getScrollableTracksViewportHeight()" und "getScrollableTracksViewportWidth()"
false zurück, dann siehst Du den Unterschied.

JScrollPane entscheidet anhand der zurückgegebener Werte, wie das Viewport
zu verschieben ist. Bei Tabellen z.B. kommt bei getScrollableUnitIncrement die Höhe
einer Zeile, Bei TextPane wieder die Höhe einer Zeile usw.

Hier eine Beispielimplementierung (nur die vertikale Richtung von Bedeutung).
Du musst irgendwo nur 'scrollUnit', also die kleinste scrollbare Einheit, definieren.
Code:
  public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)  {
    if(orientation == SwingConstants.VERTICAL) {
      int result = Math.max(scrollUnit, (visibleRect.height / scrollUnit) * scrollUnit);
      int diff = visibleRect.y % scrollUnit;
      result += (direction<0)?diff:(scrollUnit-diff);
      return result;
    }
    else {
      return visibleRect.width;
    }
  }

  public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
    if (orientation == SwingConstants.VERTICAL) {
      int result = scrollUnit;
      int diff = (visibleRect.y % scrollUnit);
      // Nach oben scrollen
      if(direction<0)
        result = (diff>0)?diff:scrollUnit;
      else
        result -= diff;
      return result;
    }
    return 100;
  }
 
R

Roar

Gast
hm wen ndu der scrollpane deine eigene komponente addest stelle sicher, dass du irgendso setPreferredSize() auf die komponente aufgerufen hast. mach das am besten im konstruktor oder so. daran orinetiert sich nämlich die JScrollPane
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Swing 2 JTextArea parrallel scrollable AWT, Swing, JavaFX & SWT 16
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
P JPanel scrollable machen AWT, Swing, JavaFX & SWT 19
G Swing Scrollable JPopup AWT, Swing, JavaFX & SWT 2
A SWT Scrollable Composite innerhalb eines Composites AWT, Swing, JavaFX & SWT 3
GilbertGrape scrollable Tooltip AWT, Swing, JavaFX & SWT 9
C Swing: Bild scrollable? AWT, Swing, JavaFX & SWT 6
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
V Wie benutzt man JInternalFrames? AWT, Swing, JavaFX & SWT 7
doctus Bilder in Jar (und ja, ich hab die SuFu benutzt) AWT, Swing, JavaFX & SWT 4
M Nutzer interface Programmieren AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
K Fehlermeldung mit Interface AWT, Swing, JavaFX & SWT 9
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
D JavaFX Interface Initializable - Was machen die Parameter in der Methode inizializeable() ? AWT, Swing, JavaFX & SWT 4
G JavaFX Nutzen von Interface Callback<P,R> AWT, Swing, JavaFX & SWT 2
S Interface Printable AWT, Swing, JavaFX & SWT 5
K Verständnisproblem mit Interface AWT, Swing, JavaFX & SWT 3
trash Dynamisches Interface AWT, Swing, JavaFX & SWT 6
C Interface für JButtons,... AWT, Swing, JavaFX & SWT 7
A User Interface aufteilen? AWT, Swing, JavaFX & SWT 3
B In eine Konsolenanwendung ein Interface einbinden AWT, Swing, JavaFX & SWT 5
J instanceof von einem Interface und aufrufen der Methoden AWT, Swing, JavaFX & SWT 5
S Sowas wie ein drawable-interface? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben