栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

一个JFrame打开另一个

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一个JFrame打开另一个

我会改变一些事情。首先,通常应用程序具有一个Jframe,然后,如果需要显示另一个窗口,则使用模态对话框或非模态对话框,例如可以通过JDialog或JOptionPane获得的对话框。话虽如此,在Jframe中拥有一个Jframe并交换“视图”更为常见-
通过CardLayout交换contentPanes或其他大型面板,因为这将模仿我们目前使用的许多gui程序的行为。

就个人而言,我还尝试将GUI创建用于创建JPanel或JComponent,而不是创建顶层窗口。这样,如果我想将GUI显示为独立的应用程序,对话框或小程序,可以将其分别弹出到Jframe或JDialog或JApplet的contentPane中,或者作为更复杂的GUI的内部面板显示,将其插入那里,或插入具有交换视图的应用程序中,然后将其插入CardLayout中,如上所述。最重要的是,我认为这种结构为开发人员提供了更多使用此GUI的选择。

另外,我将避免在执行操作时调用另一个类的main(假设这是public static void
main方法),因为您失去了OOP的所有好处。您似乎还试图以一种非静态的方式调用静态方法(假设我正确理解了您的程序结构)。

对于您的第二个问题,它提出了一个我自己的问题:您为什么不想使用CardLayout?

编辑:我的意思的一个例子如下:

import java.awt.Dimension;import java.awt.Window;import java.awt.Dialog.ModalityType;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class SwingEg {    private static void createAndShowUI() {        Jframe frame = new Jframe("Main Jframe");        frame.getContentPane().add(new MainGUI().getMainPanel());        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);        frame.pack();        frame.setLocationRelativeTo(null);        frame.setVisible(true);    }    public static void main(String[] args) {        java.awt.EventQueue.invokeLater(new Runnable() { public void run() {     createAndShowUI(); }        });    }}class MainGUI {    private static final Dimension MAIN_PANEL_SIZE = new Dimension(450, 300);    private JPanel mainPanel = new JPanel();    private JDialog modalDialog;    private JDialog nonModalDialog;    public MainGUI() {        JButton openModalDialogBtn = new JButton("Open Modal Dialog Window");        openModalDialogBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {     openModalDialogBtnActionPerformed(e); }        });        JButton openNonModalDialogBtn = new JButton("Open Non-Modal Dialog Window");        openNonModalDialogBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {     openNonModalDialogBtnActionPerformed(e); }        });        mainPanel.setPreferredSize(MAIN_PANEL_SIZE);        mainPanel.add(openModalDialogBtn);        mainPanel.add(openNonModalDialogBtn);    }    private void openModalDialogBtnActionPerformed(ActionEvent e) {        if (modalDialog == null) { Window topWindow = SwingUtilities.getWindowAncestor(mainPanel); modalDialog = new JDialog(topWindow, "Modal Dialog", ModalityType.APPLICATION_MODAL); modalDialog.getContentPane().add(new DialogPanel().getMainPanel()); modalDialog.pack(); modalDialog.setLocationRelativeTo(topWindow); modalDialog.setVisible(true);        } else { modalDialog.setVisible(true);        }    }    private void openNonModalDialogBtnActionPerformed(ActionEvent e) {        if (nonModalDialog == null) { Window topWindow = SwingUtilities.getWindowAncestor(mainPanel); nonModalDialog = new JDialog(topWindow, "Non-Modal Dialog", ModalityType.MODELESS); nonModalDialog.getContentPane().add(new DialogPanel().getMainPanel()); nonModalDialog.pack(); nonModalDialog.setLocationRelativeTo(topWindow); nonModalDialog.setVisible(true);        } else { nonModalDialog.setVisible(true);        }    }    public JPanel getMainPanel() {        return mainPanel;    }}class DialogPanel {    private static final Dimension DIALOG_SIZE = new Dimension(300, 200);    private JPanel dialogPanel = new JPanel();    public DialogPanel() {        dialogPanel.add(new JLabel("Hello from a dialog", SwingConstants.CENTER));        dialogPanel.setPreferredSize(DIALOG_SIZE);    }    public JPanel getMainPanel() {        return dialogPanel;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号