Некоторые проблемы с менеджерами компоновки и областями прокрутки, не отображающими объекты - PullRequest
2 голосов
/ 18 октября 2011

У меня проблема с приложением.Я хочу динамически создать несколько полос прокрутки с вкладками, которые содержат полубольшое количество объектов под названием «ImageLabels», которые представляют собой просто метки с (как вы уже догадались) изображениями на них.

Я сделал большую часть своего графического интерфейсав Netbeans это довольно сложно, и я слишком занят, чтобы делать это самому.

Моя проблема заключается в следующем: при добавлении объектов прокрутки (которые содержат JPanel с GridLayout) и после того, как я пытаюсь добавить свои метки изображения в JPanel с макетом (мой конструктор установлен на "new GridLayout (0, 5, 5, 5); "- это неограниченное количество строк, 5 столбцов, с 5 пикселями пространства.) Ничего не отображается, и панель прокрутки не переходит в режим" прокрутки ".

Я полностью напотеря и пытался весь день с разными раскладками.Вот некоторый код, который у меня есть ...

Конструктор объекта ImageLabel ..

addMouseListener(this);
setVisible(true);
setPreferredSize(new Dimension(32, 32));

Как настроить мой tileHolderPanel JPanel (панель, содержащая ImageLabels)

myLayout = new GridLayout(0, 5, 5, 5);
tileHolderPanel.setLayout(myLayout);

и после создания всех графических меток, которые я хочу добавить на каждую панель, я просто делаю

tileHolderPanel.add(label);

Если это имеет значение, моя панель TileHolderPanel находится внутри области прокрутки, которая находится внутри JPanel, и они имеютGroupLayouts по умолчанию, который генерирует Netbeans.

Спасибо, -Luke

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

Вот рабочий пример для сравнения вашего кода.

enter image description here

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/** @see http://stackoverflow.com/questions/7801870 */
public class ScrollGroup extends JPanel {

    private static final int N = 8;
    private static final int NN = N * N;
    private static final int GAP = 5;
    private static final int SIZE = 32;

    public ScrollGroup() {
        this.setLayout(new GridLayout(N, N, GAP, GAP));
        for (int i = 0; i < NN; i++) {
            JLabel label = new JLabel();
            label.setOpaque(true);
            label.setBackground(Color.getHSBColor((float) i / NN, 1, 1));
            label.setPreferredSize(new Dimension(SIZE, SIZE));
            this.add(label);
        }
    }

    private void display() {
        JFrame f = new JFrame("ScrollGroup");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane sp = new JScrollPane(this);
        GroupLayout layout = new GroupLayout(f.getContentPane());
        f.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup().addComponent(sp)));
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup().addComponent(sp)));
        f.pack();
        f.setSize(N * SIZE, N * SIZE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ScrollGroup().display();
            }
        });
    }
}
4 голосов
/ 18 октября 2011

Я хочу динамически создать ...

Когда вы добавляете компоненты в видимый графический интерфейс, базовый код должен быть:

panel.add(...);
panel.revalidate();

Если вам нужна дополнительная помощь, вам нужно отправить SSCCE .

...