1

我遇到了这个问题,即使我添加了它,我的 Label2 也没有出现在 Jframe 上。我假设我设置为图像的其他标签与它重叠?如果这是问题,我将如何解决它?

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Generator extends JFrame {

    private static final long serialVersionUID = 1L;

    /**
     * Launch the application.
     */
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    final Generator frame = new Generator();
                    frame.setVisible(true);
                } catch (final Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Generator() {
        /*
         * @Images/Text
         */
        final ImageIcon icon = new ImageIcon("data/hover_a.png");
        final JLabel label = new JLabel(icon);

        final ImageIcon icon1 = new ImageIcon("data/background.png");
        final JLabel label1 = new JLabel(icon1);

        final ImageIcon img = new ImageIcon("data/icon.png");

        final JLabel label2 = new JLabel("Test Text");

        /*
         * @Image/Text Bounds
         */
        label.setBounds(24, 266, 240, 40);
        label1.setBounds(0, 0, 289, 330);
        label2.setBounds(0, 0, 80, 15);

        /*
         * @Image Hovers
         */
        label.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseEntered(final MouseEvent evt) {
                label.setIcon(new ImageIcon("data/hover_b.png"));
            }

            @Override
            public void mouseExited(final MouseEvent evt) {
                label.setIcon(new ImageIcon("data/hover_a.png"));
            }

        });

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(295, 358));
        setTitle("test");
        getContentPane().setLayout(null);
        setResizable(false);
        setVisible(true);
        setIconImage(img.getImage());
        getContentPane().add(label);
        getContentPane().add(label1);
        getContentPane().add(label2);
        pack();
    }
}
4

2 回答 2

2

通过阅读您的代码,您似乎正在尝试将图像叠加在一起。这将通过使用带有定制绘画的客户面板更好地实现

看看表演自定义绘画课程和2D 图形轨迹

在不确切知道您想要实现的目标的情况下,我将创建一个绘制背景的背景面板,然后我将使用布局管理器来布局其他两个图标(就个人而言,我使用了GridBagLayout,但这可能有点过头了你需要)

我也会让您熟悉组件的绘制顺序

于 2012-07-30T02:00:32.517 回答
2

setVisible(true)在添加所有组件之前调用。不要这样做。顺序是:

  • 添加你的组件
  • 称呼pack()
  • 称呼setVisible(true)
  • 如果稍后您进行更改然后调用revalidate()容器,那么repaint()
于 2012-07-30T02:23:02.543 回答