我的申请中遇到了问题。我希望动态创建几个“选项卡式”滚动窗格,这些滚动窗格包含大量名为“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。
谢谢你, 路加福音
答案 0 :(得分:4)
答案 1 :(得分:4)
这是一个用于比较代码的工作示例。
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();
}
});
}
}