4

今天在浏览各种问题时,遇到了一个QUESTION,这在我看来有点奇怪,为什么要在a中添加a JPanelJLabel是否有任何真正的原因会出现这种情况,所以它只是微不足道的吗?

4

3 回答 3

4

是的,有真正的理由要向 JLabel 添加组件。由于在 JLabels 上设置和交换 ImageIcon 非常容易,因此将它们用作 GUI 的背景图像并不少见。

编辑
你状态:

啊哈的意思是,如果我希望我的容器有特定的背景,那么我必须使用 JLabel 作为平台,这样的东西可以驻留吗?我对吗 ?

不,您不必为此使用 JLabel,因为如果需要,在 JPanel 中绘制背景图像相当容易。paintComponent(...)只需在其方法中绘制图像。

于 2012-04-13T12:28:14.090 回答
4
this seems to me a bit weird, why would one wants to add 
a JPanel to a JLabel,

是的,这是正确的

are there any genuine reasons as to such situation can arise, 
so is it just trivial?

不,这不是微不足道的,因为只有JFrame//并且已经获得了 pre_implemented JDialog,对于“ ”的其余部分,您必须以编程方式声明正确的 LayoutManagerJWindowJPanelLayoutManagerCustom JComponent

于 2012-04-13T12:34:42.417 回答
4

作为 GUI 的 BG 的动画图像。我使用 HTML 来调整这个(x3)的大小,但如果它已经是所需的大小,你可以直接将它设置为Icon标签的。

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;

class LabelAsBackground {

    public static final String HTML =
        "<html>" +
        "<style type'text/css'>" +
        "body, html { padding: 0px; margin: 0px; }" +
        "</style>" +
        "<body>" +
        "<img src='http://pscode.org/media/starzoom-thumb.gif'" +
        " width=320 height=240>" +
        "";

    LabelAsBackground() {
        JFrame f = new JFrame("Animated Image BG");
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        JLabel contentPane = new JLabel(HTML);
        contentPane.setLayout(new GridLayout());
        JPanel gui = new JPanel(new GridLayout(3,3,15,15));
        gui.setOpaque(false);
        contentPane.add(gui);
        gui.setBorder(new EmptyBorder(20,20,20,20));
        for (int ii=1; ii<10; ii++) {
            gui.add( new JButton("" + ii));
        }
        f.setContentPane(contentPane);
        f.pack();
        //f.setResizable(false); // uncomment to see strange effect..
        f.setVisible(true);
    }

    public static void main(String[] args) {
        //Create the frame on the event dispatching thread
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                LabelAsBackground lab = new LabelAsBackground();
            }
        });
    }
}

不确定它是否是“正版”。这似乎是一个需要大量澄清的主观术语。我从来没有使用过这种方法,只是想通了,今晚摸索着。;)

于 2012-04-13T12:46:24.623 回答