我有2个包,每个包都包含一个单独的MyFrame类,该类扩展了JFrame。我有第三个包,其中包含MyFrame类,然后扩展了JFrame。
我想在按下相应按钮时显示“主”程序包JFrame中其他程序包的JFrame。
我该怎么办?
这就是我现在所拥有的:公共类MyFrame扩展JFrame实现ActionListener {
private JButton voorraadbeheer, klantenbinding, werkplaats, facturatie,
parkeergarage;
private JPanel mainMenu;
private JDPanel mainWindow;
public MyFrame() {
Dimension button = new Dimension(100, 100);
setLayout(new BorderLayout());
voorraadbeheer = new JButton("Voorraadbeheer");
klantenbinding = new JButton("klantenbinding");
werkplaats = new JButton("Werkplaats");
facturatie = new JButton("Facturatie");
parkeergarage = new JButton("Parkeergarage");
voorraadbeheer.setPreferredSize(button);
klantenbinding.setPreferredSize(button);
werkplaats.setPreferredSize(button);
facturatie.setPreferredSize(button);
parkeergarage.setPreferredSize(button);
voorraadbeheer.addActionListener(this);
klantenbinding.addActionListener(this);
werkplaats.addActionListener(this);
facturatie.addActionListener(this);
parkeergarage.addActionListener(this);
mainMenu = new JPanel();
mainMenu.setPreferredSize(new Dimension(120, 600));
mainMenu.setLayout(new FlowLayout());
mainMenu.add(voorraadbeheer);
mainMenu.add(klantenbinding);
mainMenu.add(werkplaats);
mainMenu.add(facturatie);
mainMenu.add(parkeergarage);
add(mainMenu, BorderLayout.EAST);
mainWindow = new JPanel();
mainWindow.setVisible(true);
add(mainWindow);
setSize(1024, 600);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
Object eventSource = e.getSource();
if (eventSource == klantenbinding) {
try {
klantenbinding.MyFrame klantenbindingFrame = new klantenbinding.MyFrame();
mainWindow.add(klantenbindingFrame);
} catch (ParseException exc) {
}
}
}
}
如果您只是尝试显示另一个窗口,而不是将其添加到当前的GUI,该怎么办?
if (eventSource == klantenbinding) {
try {
klantenbinding.MyFrame klantenbindingFrame = new klantenbinding.MyFrame();
// mainWindow.add(klantenbindingFrame);
klantenbindingFrame.setVisible(true);
} catch (ParseException e) {
e.printStackTrace(); // never ignore exceptions
}
}
说了这么多,我认为您在制作面向JFrame的类时犯了一个常见的初学者Swing错误。正如您所发现的,这使得代码非常不灵活。最好使代码更适合制作JPanels,因为它们可以放置在其他JFrames,其他JPanels,JApplets,JDialogs中,并与CardLayouts交换,等等。
编辑
可能适合您的合并方法是获取另一个JFrame的contentPane并将其插入:
if (eventSource == klantenbinding) {
try {
klantenbinding.MyFrame klantenbindingFrame = new klantenbinding.MyFrame();
Component contentPane = klantenbindingFrame.getContentPane();
mainWindow.add(contentPane);
mainWindow.revalidate();
mainWindow.repaint();
} catch (ParseException e) {
e.printStackTrace(); // never ignore exceptions
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句