我目前的问题是我有一个JFrame(上面有一些按钮)...当我单击“新建”按钮时,它将在屏幕上调用一个InternalFrame ...内部框架屏幕出来了,一切都很好直到我移动内部框架,发现它位于所有部件的背面...

我已经尝试过.toFront(),.setAlwaysOnTop()以及其他所有方法...直到遇到JLayeredPane为止,我认为这是我正在寻找的东西...但是我无法使其正常工作>


请务必告诉您所有您需要的额外信息。将尽快为您提供

WindowConstruct wconstruct;

JDesktopPane desktop = new JDesktopPane();
JInternalFrame InternalWindows = new JInternalFrame();

public MainUser(){

wconstruct = new WindowConstruct("..:: User's Helpdesk Main Page ::..", 1500, 800, false, null, "user");

    wconstruct.add(desktop);

    wconstruct.btnNew.addActionListener(this);

}

public void actionPerformed(ActionEvent e) {

    Object src = e.getSource();

    if(src == wconstruct.btnNew){

        InternalWindows.setSize(500, 300);
        InternalWindows.setTitle("New task");
        InternalWindows.setLayout(null);
        InternalWindows.setLocation(100,50);
        InternalWindows.setClosable(true);

        desktop.add(InternalWindows);
        InternalWindows.setVisible(true);

    }
}

最佳答案

我似乎没有任何异常,尝试使用您显示的代码创建MCVE。这不是最好的代码,但是我试图尽可能地保持代码的外观。查看一下,让我知道我的代码有何不同。同样,为了更好地帮助我们深入了解问题的根源,您应该始终发布MCVE。这意味着代码应该是可运行的,即复制,粘贴,编译,运行。

另外,如果您不打算使该应用程序成为MDI(请参见注释中的链接)类型的应用程序,请考虑我上面的所有注释(即,可能使用JDialog)。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;

public class MainUser implements ActionListener {

    WindowConstruct wconstruct;

    JDesktopPane desktop = new JDesktopPane();
    JInternalFrame InternalWindows = new JInternalFrame();

    public MainUser() {
        wconstruct = new WindowConstruct("..:: User's Helpdesk Main Page ::..",
                500, 500);
        wconstruct.add(desktop);
        wconstruct.btnNew.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        if (src == wconstruct.btnNew) {
            InternalWindows.setSize(500, 300);
            InternalWindows.setTitle("New task");
            InternalWindows.setLayout(null);
            InternalWindows.setClosable(true);
            InternalWindows.setLocation(100, 50);
            desktop.add(InternalWindows);
            InternalWindows.setVisible(true);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MainUser();
            }
        });
    }

    class WindowConstruct extends JFrame {
        JButton btnNew = new JButton("Add New");

        public WindowConstruct(String title, int width, int height) {
            super(title);
            setSize(width, height);
            add(btnNew, BorderLayout.PAGE_END);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }
    }
}

07-27 13:17