布局管理器和滚动窗格的一些问题,未显示对象 - java

我的应用程序有问题。我希望动态创建几个“选项卡式”滚动窗格,其中包含半大量的对象,称为“ ImageLabels”,它们只是带有(您猜对了)图像的标签。

我在Netbeans中制作了大部分的gui,因为它有点复杂,我自己也不想做。

我的问题是这样的:添加滚动窗格对象(包含带有GridLayout的JPanel)时,以及尝试将图像标签添加到具有布局的JPanel之后(我的构造函数设置为“ new GridLayout(0,5,5, 5);“是无限制的行,5列,具有5 pxl的空间。)没有任何显示,滚动面板也没有进入”滚动“模式。

我完全不知所措,一直整天尝试不同的布局。这是我的一些代码...

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。

谢谢,
-卢克

java大神给出的解决方案

这是一个比较代码的有效示例。

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

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

如何使用BorderLayout(Java)扩展JTextField - java

我有一个Java程序,其中使用的是JTextField,但如果我未指定默认大小,则其宽度为0。我将其插入BorderLayout中,因此如何制作它展开以填充整个容器? java大神给出的解决方案 在上面的示例中,文本字段将正常工作。但是,如果您插入EAST或WEST,则将不起作用。import java.awt.BorderLayout; import ja…

JTextPane中重叠的突出显示的文本颜色 - java

我创建了一个使用JTextPane的Swing接口。 JTextPane使用以下自定义颜色突出显示:textPane.getHighlighter().addHighlight(startPos, endPos, highlightPainter); 用户还能够以普通方式用光标突出显示文本。我的问题是我无法找到一种方法,将同时由荧光笔对象和光标选择突出显示的…