为了账号安全,请及时绑定邮箱和手机立即绑定

Eclipse WindowBuilder,重叠的JPanels

Eclipse WindowBuilder,重叠的JPanels

HUX布斯 2019-11-04 13:19:05
我正在尝试重叠JPanel实例。以完全相同的位置和大小将面板直接放在另一个面板上。每次执行此操作时,它将另一个面板移到另一侧或下面,前一个面板在另一个更大的面板内部,并且其中有按钮。我该怎么做?请记住,它使用的是Window Builder工具。
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

我正在尝试重叠JPanels


使用JLayeredPane(链接的教程,下面的图像)。


JLayeredPane


将JPanel直接放在另一个面板上,


..或者一个CardLayout如图所示这里 ..


..取决于您所指的是哪两个,因为我理解它们的效果完全不同。


查看完整回答
反对 回复 2019-11-04
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

使用JDesktopPane(或它的超类JLayeredPane)作为其内容,添加到窗格中。


在这里,您可以看到一种让组件重叠的好方法,并在光标停留在其上时弹出:


import javax.swing.*;


import java.awt.*;

import java.awt.event.*;


public class ShiftedStackPanel extends JPanel implements MouseListener,

                                                            ActionListener {


    private static final long serialVersionUID = 1988454751139668485L;


    private int layer;

    private JDesktopPane desktopPane;

    private Timer timer;

    private Component currentComponent;

    private int layerOfCurrent;

    private int shiftDivision;


    public ShiftedStackPanel() {

        this(4);

    }


    public ShiftedStackPanel(int shift) {

        shiftDivision = shift;


        setLayout(new BorderLayout(0, 0));


        desktopPane = new JDesktopPane();

        desktopPane.setBackground(SystemColor.window);

        super.add(desktopPane);

        timer = new Timer(1000, this);

        timer.setRepeats(false);


    }


    public Component add(Component c) {

        Dimension dim = c.getPreferredSize();

        c.setBounds(

                (desktopPane.getComponentCount() * (dim.width / shiftDivision)),

                0, dim.width, dim.height);

        desktopPane.add(c, new Integer(++layer));

        c.addMouseListener(this);

        return c;

    }


    public void remove(Component c) {

        throw new IllegalArgumentException(

                "Removal of component, not yet supported.");

        // FIXME: allow removal, and shift all latter comps, to left

    }


    public void removeAll() {

        desktopPane.removeAll();

    }


    public static void main(String[] args) {

        JFrame f = new JFrame("JFrame Wrapper");

        ShiftedStackPanel p;

        f.setContentPane(p = new ShiftedStackPanel(4));

        p.add(new JTextField("ABCDEFGHI"));

        p.add(new JTextField("DEFGHIJKL"));

        p.add(new JTextField("GHIJKLMNO"));

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.setVisible(true);

        f.setMinimumSize(new Dimension(400, 200));

        f.setLocationRelativeTo(null);

    }


    @Override

    public void mouseClicked(MouseEvent evt) {

        if (currentComponent != null) {

            Component c = (Component) evt.getSource();

            currentComponent = c;

            layerOfCurrent = desktopPane.getLayer(c);

            desktopPane.remove(c);

            desktopPane.add(c, new Integer(100));

        }

    }


    @Override

    public void mouseEntered(MouseEvent evt) {

        timer.start();

        Component c = (Component) evt.getSource();

        currentComponent = c;

        layerOfCurrent = desktopPane.getLayer(c);

    }


    @Override

    public void mouseExited(MouseEvent evt) {

        if ((currentComponent != null) && currentComponent == evt.getSource()) {

            desktopPane.remove(currentComponent);

            desktopPane.add(currentComponent, new Integer(layerOfCurrent));

            currentComponent = null;

            timer.stop();

        }

    }


    @Override

    public void mousePressed(MouseEvent arg0) {

        // TODO Auto-generated method stub


    }


    @Override

    public void mouseReleased(MouseEvent arg0) {

        // TODO Auto-generated method stub


    }


    @Override

    public void actionPerformed(ActionEvent arg0) {


        desktopPane.remove(currentComponent);

        desktopPane.add(currentComponent, new Integer(100));

    }

}

在使用需要重点关注但应与JLabel和配合使用的组件时,仍然存在一些问题JPanel。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 782 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信