2012-11-13 3 views
5

Wie kann ich die Ansichtsbreite JScrollPanel einschränken? Ich möchte auf jeden Fall kein horizontales Scrollen. Ich habe versucht, eigene JViewport zu liefern, aber das hilft nicht viel.einschränken JScrollPane Ansichtsbreite

private static class WidthRestrictingViewport extends JViewport { 
     private Container contents; 

     public WidthRestrictingViewport(final Container cnts) { 
      contents = cnts; 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      if (getParent() instanceof JScrollPane) { 
       JScrollPane sp = (JScrollPane) getParent(); 
       return new Dimension(sp.getWidth(), contents.getHeight()); 
      } 
      return super.getPreferredSize(); 
     } 

     @Override 
     public Dimension getMaximumSize() { 
      return getPreferredSize(); 
     } 
    } 

Und Code, JScrollPane

Container fpdp = .... 

    JScrollPane sp = new JScrollPane(); 
    sp.setViewport(new WidthRestrictingViewport(fpdp)); 
    sp.setViewportView(fpdp); 

contents Instanz erstellen, die ich liefern seine maximale Breite nimmt jedoch möchte ich seine Breite nicht mehr als JScrollPane Breite so horizontales Scrollen wird nicht passieren. Was mache ich falsch?

+1

Ich verstehe die Frage nicht. Was sollte mit dem Inhalt von 'JScrollPane' geschehen, wenn dieser größer ist als die tatsächliche Größe von' JScrollPane'? Einfach abschneiden? In diesem Fall könnten Sie in Betracht ziehen, die Bildlaufleiste unsichtbar zu machen ('JScrollPane # getHorizontalScrollBar # setVisible (false)'); – Robin

+0

@Robin, nicht abgeschnitten. Die Ansichtsbreite verkleinern, um die Fensterbreite zu verschieben. Stellen Sie sich einfach ein Panel mit Rahmenlayout und Inhalt in der Mitte vor. Aber in diesem Fall ist nur die Breite des Inhalts mit der Breite des Panels eingeschränkt und die Höhe des Inhalts kann mit der Bildlaufleiste beliebig erhöht werden. –

+1

Ich glaube nicht, dass es die Verantwortung des 'JViewPort's ist, Einschränkungen in der Ansicht zu machen, was die erreichbare Breite betrifft, das ist mehr die Sicht selbst. Sehen Sie sich die ['Scrolllabe'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html) Schnittstelle an, insbesondere [' Scrollable # getScrollableTracksViewportWidth'] (http : //docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html#getScrollableTracksViewportWidth%28%29) – MadProgrammer

Antwort

2

Entschuldigung für meine schlechten Erklärungen. Ich habe einen Weg gefunden, das zu tun. Danke an JScrollpane needs to shrink its width.

Ein weiteres Problem, das ich konfrontiert wurde, ist falsche Layout-Manager in ScrollablePanel. Das war FlowLayout, das alles durcheinander brachte. Ich habe es nicht sofort verstanden und dachte, dass das Problem mit Scrollable Schnittstelle Verwendung ist.

Also nahm ich einfach ScrollablePanel und legte seinen Layout-Manager auf BorderLayout und das ist alles in Ordnung!