Java 内部JFrames

Java 内部JFrames,java,swing,jframe,Java,Swing,Jframe,我想知道如何在swing中显示内部框架。这意味着,当需要JFrame时,通常我所做的是 new MyJFrame().setVisible(true); 假设前面的表单也应该显示。当显示这个新框架时,任务栏上会显示另一个新图标。这听起来像是两个独立的应用程序在一个应用程序中运行。我希望避免显示该图标,并将两个框架显示为一个应用程序中的两个。谢谢一个应用程序只有一个JFrame 可以在JFrame中显示多个JPanel 或者,正如垃圾神所指出的,一个JDesktopFrame中可以有多个jint

我想知道如何在swing中显示内部框架。这意味着,当需要JFrame时,通常我所做的是

new MyJFrame().setVisible(true);
假设前面的表单也应该显示。当显示这个新框架时,任务栏上会显示另一个新图标。这听起来像是两个独立的应用程序在一个应用程序中运行。我希望避免显示该图标,并将两个框架显示为一个应用程序中的两个。谢谢

一个应用程序只有一个JFrame

可以在JFrame中显示多个JPanel

或者,正如垃圾神所指出的,一个JDesktopFrame中可以有多个jinternalframe。

一个应用程序有一个JFrame

可以在JFrame中显示多个JPanel

或者,正如垃圾神指出的,在一个JDesktopFrame中可以有多个jinternalframe

…希望避免显示该图标,并在一个应用程序中同时显示两个帧

另一种解决方案是将第二个和后续的自由浮动元素放在JDialog中

例如,使用框架和对话框来保存额外的内容

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class FrameTest {

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

    public static void initGui() {
        final JFrame f = new JFrame("Frame Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel gui = new JPanel(new GridLayout(0,1,5,5));
        final Content c = new Content();
        JButton frame = new JButton("Frame");
        frame.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                JFrame f2 = new JFrame("Content");
                f2.add(c.getContent());
                f2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f2.pack();
                f2.setLocationByPlatform(true);
                f2.setVisible(true);
            }
        });
        gui.add(frame);

        JButton dialog = new JButton("Dialog");
        dialog.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                JDialog d = new JDialog(f);
                d.add(new Content().getContent());
                d.pack();
                d.setLocationByPlatform(true);
                d.setVisible(true);
            }
        });
        gui.add(dialog);

        f.add(gui);
        f.pack();
        f.setVisible(true);
    }
}

class Content {

    public Component getContent() {
        JPanel p = new JPanel();
        p.add(new JLabel("Hello World!"));
        return p;
    }
}
…希望避免显示该图标,并在一个应用程序中同时显示两个帧

另一种解决方案是将第二个和后续的自由浮动元素放在JDialog中

例如,使用框架和对话框来保存额外的内容

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class FrameTest {

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

    public static void initGui() {
        final JFrame f = new JFrame("Frame Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel gui = new JPanel(new GridLayout(0,1,5,5));
        final Content c = new Content();
        JButton frame = new JButton("Frame");
        frame.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                JFrame f2 = new JFrame("Content");
                f2.add(c.getContent());
                f2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f2.pack();
                f2.setLocationByPlatform(true);
                f2.setVisible(true);
            }
        });
        gui.add(frame);

        JButton dialog = new JButton("Dialog");
        dialog.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                JDialog d = new JDialog(f);
                d.add(new Content().getContent());
                d.pack();
                d.setLocationByPlatform(true);
                d.setVisible(true);
            }
        });
        gui.add(dialog);

        f.add(gui);
        f.pack();
        f.setVisible(true);
    }
}

class Content {

    public Component getContent() {
        JPanel p = new JPanel();
        p.add(new JLabel("Hello World!"));
        return p;
    }
}

请在此发布显示非提问问题的简短可运行代码,以及显示最近示例和的简短可运行代码的基本规则。请在此发布显示非提问问题的简短可运行代码,以及显示最近示例和的简短可运行代码的基本规则。欢迎使用。很高兴我能提供一个适合用例的替代策略:-我尝试如下使用JDialog。这里frame是一个JFrame,我使用了Netbeans,刚刚创建了一个单独的JFrame右键单击->新建->JFrame表单。。我还添加了一些按钮和文本字段,并创建了该JFrame的一个实例。然后将该实例放入JDialog。MyJFrame=新的MyJFrame;JDialog d=新的JDialogframe;d、 设置VisibleTrue;但是对话框在没有框架的情况下是可见的。我看不到我放在JFrame中的任何按钮或文本字段。我指的是不要将对话框放入框架中。那不行。相反,把你已经放进框架的组件放进对话框中。我按照你提到的做了。但结果与JDialg一样。对话框d=新对话框新框架//frame是JFrame d.setVisibletrue;你能让我知道任何样本代码工作或任何链接请。非常感谢你。。。安德鲁。。这里是我得到的jdialogd=newjdialogf的要点;d、 addnew Content.getContent;//这是我错过的东西。我把我的面板和其他组件放在d包里;d、 setLocationByPlatformtrue;d、 设置VisibleTrue;它成功了,我的问题完全解决了。。我感谢你的帮助。。好极了:不客气。很高兴我能提供一个适合用例的替代策略:-我尝试如下使用JDialog。这里frame是一个JFrame,我使用了Netbeans,刚刚创建了一个单独的JFrame右键单击->新建->JFrame表单。。我还添加了一些按钮和文本字段,并创建了该JFrame的一个实例。然后将该实例放入JDialog。MyJFrame=新的MyJFrame;JDialog d=新的JDialogframe;d、 设置VisibleTrue;但是对话框在没有框架的情况下是可见的。我看不到我放在JFrame中的任何按钮或文本字段。我指的是不要将对话框放入框架中。那不行。相反,把你已经放进框架的组件放进对话框中。我按照你提到的做了。但结果与JDialg一样。对话框d=新对话框新框架//frame是JFrame d.setVisibletrue;你能让我知道任何样本代码工作或任何链接请。非常感谢你。。。安德鲁。。这里是我得到的jdialogd=newjdialogf的要点;d、 addnew Content.getContent;//这是我错过的东西。我把我的面板和其他组件放在d包里;d、 setLocationByPlatformtrue;d、 设置VisibleTrue;它成功了,我的问题完全解决了。。我感谢你的帮助。。非常好:谢谢你,吉尔伯特先生。但问题是,如果我使用JInternalFrames和JDesktop窗格,内部框架将被限制在应用程序窗口中,并且只能在桌面窗格中移动:。那么应用程序的外观可能并不像我希望的那样。但我认为JDialg最适合解决我的问题。如果可以的话,请告诉我如何使用JDialog。@Aash-Maharoon:有关JDialog的解释,请参阅安德鲁·汤普森的答案。谢谢你,吉尔伯特先生。但问题是,如果我使用JInternalFrames和JDesktop窗格,内部框架将被限制在应用程序窗口中,只能在desktoppane内移动:。然后应用程序
可能不是我所希望的。但我认为JDialg对我的问题是最好的。如果可以,请让我知道如何使用JDialog。@Aash-Maharoon:有关JDialog的解释,请参阅安德鲁·汤普森的答案。