Как да накарате лентата за превъртане да се появи в JList, когато рамката е твърде малка, за да покаже целия JList?

Искам да направя лента за превъртане да се появява на JList всеки път, когато рамката се преоразмерява, за да бъде твърде малка за самия списък. Засега това е кодът, който имам. Стартирайте го, преоразмерете рамката и забележете как в JList никога не се появява лента за превъртане.

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class JListScroll extends JPanel{

JScrollPane listScrollPane;

public JListScroll() {
    String[] stringArray = {"Testing","This","Stuff"};
    JList<String> rowList = new JList<String>(stringArray);
    listScrollPane = new JScrollPane();
    listScrollPane.getViewport().setView(rowList);
    this.setSize(new Dimension(75,200));
    this.add(listScrollPane);
    this.doLayout();
}

public static void main(String[] args){
    JFrame frame = new JFrame();
    JListScroll scrollPanel = new JListScroll();
    frame.add(scrollPanel);
    frame.setVisible(true);
    frame.setSize(new Dimension(75,300));
}

}

Забележете как има добавен JScrollPane, но в списъка не се появява лента за превъртане, когато прозорецът стане наистина малък. Това е, което искам да поправя.

Благодаря предварително!


person idungotnosn    schedule 12.04.2013    source източник


Отговори (2)


  • JPanel е внедрил FlowLayout

  • FlowLayout приема само PreferredSize (във вашия случай твърдо кодиран от setSize)

  • FlowLayout не е обозначен, не е имплементирано никакво преоразмеряване на JComponents (поставено от FlowLayout) заедно с контейнера, JComponent не може да се преоразмерява, остава както е

  • не искам да коментирам нещо за вашия код, публикуван тук, вижте разликите, доста добро ниско ниво

въведете описание на изображението тук

import java.awt.BorderLayout;
import java.awt.Dimension;    
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class JListScroll {

    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();
    private JScrollPane listScrollPane = new JScrollPane();
    private String[] stringArray = {"Testing", "This", "Stuff"};
    private JList rowList = new JList(stringArray);

    public JListScroll() {
        rowList.setVisibleRowCount(2);
        listScrollPane.setViewportView(rowList);
        panel.setLayout(new BorderLayout());
        panel.add(listScrollPane);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // EDIT 
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JListScroll jListScroll = new JListScroll();
            }
        });
    }
}
person mKorbel    schedule 12.04.2013

Можете да принудите видимостта на (вертикалната) лента за превъртане с метода listScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS)

person ddmps    schedule 12.04.2013