Попытка обернуть JLabels в JPanel внутри JScrollPane - PullRequest
0 голосов
/ 29 сентября 2010

РЕДАКТИРОВАТЬ: Как и в примере (который я сейчас написал), я пытаюсь добиться упаковки JLabel (+ JTextFields, а не в примере) в JPanel с FlowLayout и сортировки этих панелей с BoxLayout одна под другой, но с ограничениемс помощью JScrollPane, чтобы я мог указать, насколько высока область просмотра, и если эти JPanels (упакованные JLabels) превышают высоту, которую пользователь должен прокручивать, но только по вертикали.

public class Example2 extends JFrame {

    JScrollPane scrollPane = new JScrollPane();
    JPanel viewPanel = new JPanel();

    public Example2() {
        setSize(400,300);
        buildGUI();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void buildGUI() {
        // SCROLLPANE PLACEMENT
        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(scrollPane, GroupLayout.PREFERRED_SIZE, 350, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(scrollPane, GroupLayout.PREFERRED_SIZE, 223, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        // REST
        scrollPane.setViewportView(viewPanel);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        viewPanel.setLayout(new BoxLayout(viewPanel, BoxLayout.Y_AXIS));


        for(int i=0; i<3; i++) {
            JPanel panel = new JPanel();
            panel.setLayout(new FlowLayout(FlowLayout.LEADING));
            panel.setBackground(new Color(200,i*100,100*i));
            for(int j=0;j<20;j++) {
                JLabel label = new JLabel("label "+j);
                panel.add(label);
            }
            viewPanel.add(panel);
        }

    }

    public static void main(String[] args) {
        new Example2();
    }

}

Ответы [ 2 ]

2 голосов
/ 29 сентября 2010

Не уверен, но Wrap Layout может работать для вас.

0 голосов
/ 29 сентября 2010

Вместо использования менеджера компоновки , хитрая альтернатива, которая может работать в очень ограниченном контексте, состоит в использовании JList с ориентацией упаковки :

JList list = new JList(new String[]{"lllllllllllllll", "abc", "ajdfkalfjlsjfjsakljflkajsd"});
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
list.setVisibleRowCount(-1); // see setLayoutOrientation javadoc for why
JScrollPane listScroller = new JScrollPane(list);
listScroller.setPreferredSize(new Dimension(250, 20));
getContentPane().add(listScroller);

По умолчанию средство визуализации ячеек для JList равно JLabel, и вы можете стилизовать список так, чтобы он не выглядел как список (без рамки, без фона).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...