布局管理器和滚动窗格的一些问题,而不是显示对象

时间:2011-10-18 02:45:28

标签: java swing netbeans jpanel layout-manager

我的申请中遇到了问题。我希望动态创建几个“选项卡式”滚动窗格,这些滚动窗格包含大量名为“ImageLabels”的对象,这些对象只是带有(你猜对了)图像的标签。

我在Netbeans中创造了我的大部分gui,因为它是半复杂的,我自己也很不高兴。

我的问题是:当我添加我的滚动窗格对象(包含带有GridLayout的JPanel)时,以及在我尝试将我的图像标签添加到带有布局的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);

在构建了我希望添加到每个面板的所有ImageLabel后,我只需要

tileHolderPanel.add(label);

如果重要,我的TileHolderPanel位于JPanel内的滚动窗格内,并且它们具有Netbeans生成的默认GroupLayouts。

谢谢你, 路加福音

2 个答案:

答案 0 :(得分:4)

  

我希望动态创建......

将组件添加到可见GUI时,基本代码应为:

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

如果您需要更多帮助,则需要发布SSCCE

答案 1 :(得分:4)

这是一个用于比较代码的工作示例。

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