java jframe跳转_java – 一个JFrame打开另一个

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

就个人而言,我也尝试将GUI创建用于创建JPanel或JComponent而不是创建顶级窗口.这样,如果我想将GUI显示为独立应用程序,对话框或applet,我可以将它分别弹出到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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值