2012-11-13 35 views
5

JScrollPanel görünüm genişliğini nasıl kısıtlayabilirim? Her durumda yatay kaydırma olmasını istemiyorum. Ben kendi JViewport tedarik etmeye çalıştı ama bu çok yardımcı olmuyor. Ben maksimum genişliği alır tedarik JScrollPanerestrict JScrollPane görünüm genişliği

Container fpdp = .... 

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

contents örneğini oluşturmak

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(); 
     } 
    } 

Ve kod, ancak genişliği en fazla JScrollPane genişliği böylece yatay kaydırma alışkanlık gerçekleşmesi olmak istiyorum. Neyi yanlış yapıyorum?

+1

Soruyu anlamıyorum. "JScrollPane" in içeriği ile daha ne zaman o zaman 'JScrollPane' gerçek boyutu ne olmalıdır. Sadece kesilmiş mi? Bu durumda sadece kaydırma çubuğunu görünmez yapmayı düşünebilirsiniz (JScrollPane # getHorizontalScrollBar # setVisible (false) '); – Robin

+0

@Robin, Kesilmez. Bölme genişliğini kaydırmak için görünüm genişliğini daraltın. Sadece sınır düzeni ve içeriği merkeze yerleştirilmiş panelleri hayal edin. Ancak bu durumda, sadece içeriğin genişliği, panelin genişliği ve içeriği ile sınırlıdır. Yükseklik, ihtiyaç duyulduğu kadar büyüyebilir (kaydırma çubuğu ekleyerek). –

+1

'JViewPort' un sorumluluğunun, elde edebileceği genişlikle ilgili kısıtlamalar koyma sorumluluğunu taşıdığını düşünmüyorum, bu daha çok görüntünün kendisidir. ['Scrollabe'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html) arayüzüne, özellikle [' Scrollable # getScrollableTracksViewportWidth'] 'a bakın (http : //docs.oracle.com/javase/7/docs/api/javax/swing/Scrollable.html#getScrollableTracksViewportWidth%28%29) – MadProgrammer

cevap

2

Zayıf açıklamalarım için özür dilerim. Bunu yapmanın bir yolunu buldum. JScrollpane needs to shrink its width için teşekkürler.

Karşılaştığım bir sorun daha: ScrollablePanel. O her şeyi batırdı FlowLayout oldu. Bir kerede anlayamadım ve sorunun Scrollable arayüz kullanımı ile olduğunu düşündüm.

Bu yüzden ScrollablePanel ürününü aldım ve düzen yöneticisini BorderLayout'a ayarlıyorum.