package database;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.SwingUtilities;
public class Application {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new ApplicationFrame("Application");
frame.setSize(500, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
public class ApplicationFrame extends JFrame {
private CompaniesPanel companiesPanel;
public ApplicationFrame(String title) {
super(title);
setLayout(new BorderLayout());
JMenuBar menuBar = new MenuBar("Menu");
Container container = getContentPane();
container.add(menuBar, BorderLayout.NORTH);
}
}
public class MenuBar extends JMenuBar {
public MenuBar(String title) {
super();
JMenu menuFile = new JMenu("File");
add(menuFile);
JMenu menuOpen = new JMenu("Open");
menuFile.add(menuOpen);
JMenuItem menuItemCompanies = new JMenuItem("Companies");
menuOpen.add(menuItemCompanies);
menuItemCompanies.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// In here I would like to take a CompaniesPanel and insert
// it into
// an ApplicationFrame if the Companies button is pressed on
// menu
}
});
}
}
public class CompaniesPanel extends JPanel {
public CompaniesPanel() {
Dimension size = getPreferredSize();
size.width = 250;
setPreferredSize(size);
setBorder(BorderFactory.createTitledBorder("Company Names"));
setLayout(new GridBagLayout());
GridBagConstraints gridBagConstraints = new GridBagConstraints();
}
}
}
我只是希望我的应用程序打开该菜单,其余部分为空白,并在从下拉菜单中按下公司时打开CompaniesPanel。这可能没有打开另一个jFrame吗?
答案 0 :(得分:1)
container.add(menuBar, BorderLayout.NORTH);
所有这些都不是你如何在框架中添加菜单。框架具有为菜单栏保留的特殊区域。
相反,你只需使用:
setJMenuBar( menuBar );
阅读How to Use Menus上Swing教程中的部分,了解更多信息和工作示例。
如前所述,CardLayout
将是一个不错的选择。通过添加两个面板(一个空,一个用于公司),布局的首选大小将由公司面板确定,因此当您显示公司面板时,框架大小不会改变。
Swing教程还有一个关于How so Use CardLayout的部分,其中有一些工作示例可帮助您入门。
为所有Swing基础知识保留对Swing教程的引用。