1

我不知道如何JLabelJPanel. 我想在移动图像的标签中显示一些信息。图像在JPanel. 我已经设法使JFrame未装饰的。

输出http://i44.tinypic.com/2mhacsj.png

在此处输入图像描述

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Window;

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

class Remote extends JFrame {
    JPanel p2;

    private Window Remote;

    public Remote() {
        createAndShowGUI();
    }

    public void createAndShowGUI() {
        // Set title and default close operation
        setTitle("Transparent Panel");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setUndecorated(true);
        p2 = new JPanel();
        JLabel label = new JLabel(new ImageIcon("C://Mobile.png"));
        p2.add(label);
        p2.setPreferredSize(new Dimension(1000, 800));
        add(p2);
        setLayout(new FlowLayout());
        setSize(315, 610);
        setVisible(true);
        setLocation(800, 100);
    }

    public static void main(String args[]) {
        // Run in the EDT
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Remote remote = new Remote();
            }
        });
    }

}

我有3个问题:

  1. 如何删除手机周围的边框[背景]?

  2. 如何在 中添加一些标签JPanel

  3. 如何使窗户可移动?

4

2 回答 2

3

这应该满足您的要求:

public void createAndShowGUI() {
    setTitle("Transparent Panel");
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setUndecorated(true);
    AWTUtilities.setWindowOpaque(this, false);

    JLayeredPane layeredPane = new JLayeredPane();
    layeredPane.setBounds(0, 0, 315, 610);

    JLabel mobileImageLabel = new JLabel(new ImageIcon("C://Mobile.png"));
    mobileImageLabel.setBounds(0, 0, 315, 610);
    layeredPane.add(mobileImageLabel, Integer.valueOf(0));

    JLabel textLabel = new JLabel(" Booting... ");
    textLabel.setVerticalAlignment(SwingConstants.TOP);
    textLabel.setForeground(Color.GREEN);
    textLabel.setBounds(26, 59, 263, 495);
    layeredPane.add(textLabel, Integer.valueOf(1));

    setContentPane(layeredPane);

    setSize(315, 610);
    setLocation(800, 100);
    setVisible(true);
}

对于可拖动窗口,请从您的Remote()构造函数中调用此方法:

public void addListeners() {
    final Point offset = new Point();
    addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(final MouseEvent e) {
            offset.setLocation(e.getPoint());
        }
    });
    addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseDragged(final MouseEvent e) {
            setLocation(e.getXOnScreen()-offset.x, e.getYOnScreen()-offset.y);
        }
    });
}

进一步说明

  • 而不是JFrame.add()使用:getContentPane().add()setContentPane()
  • AWTUtilities.setWindowOpaque()删除未装饰框架的灰色背景
  • aJLayeredPane可用于将组件堆叠在一起
  • 中的布局JLayeredPane必须手动完成

它现在应该看起来像这样::

结果:顶部带有图像和标签的透明 jframe

于 2013-12-16T18:47:43.013 回答
0

我不知道我是否理解正确。所以需要去掉标题栏,把框架显示为手机?

在这种情况下,您必须执行以下代码才能删除标题栏

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Already there
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true);

而不是你可以这样做来设置背景图像:

setContentPane(new JLabel(new ImageIcon("path/to/image.jpg")));
于 2013-12-16T17:52:39.667 回答