我尝试使用标签和菜单栏创建一个框架,每个标签将包含不同的JTable
,我想知道是否可以将不同类的构造函数添加到标签中?
我的意思是:
public class Administrator() {
JFrame frame;
JTabbedPanel tabPan;
JPanel firstTab, secondTab;
JMenuBar menuBar;
JMenu menu;
JMenuItem mi1;
Administrator() {
frame = new JFrame("Test");
frame.setDefaultClopseOperation(JFrame.EXIT_ON_CLOSE);
tabPan = new JTabbedPane();
firstTab = new JPanel();
secondTab = new JPanel();
menuBar = new JMenuBar();
menu = new JMenu("Menu");
mi1 = new JMenuItem("1");
menu.add(mi1);
menuBar.add(menu);
frame.addJMenuBar(menuBar);
tabPan.addTab("First",firstTab);
tabPan.addTab("Second",secondTab);
frame.setVisible(true);
}
public static void main(String[] args) {
new Administrator();
}
然后是第二个(第一个)课程:
public class First() {
JTable firstTable = new JTable();
//....
First() {
//...
firstTab.add(firstTable);
//...
}
}
修改
好的我找到了一种方法,Jtabbedpane using multiple classes,但现在我有一个不同的问题,我如何使用主类中的JMenuBar
?我扩展JPanel,而不是类,我能以某种方式在其他类中使用它们吗?
答案 0 :(得分:1)
使用JMenuBar是什么意思?我建议调查OOP和封装。我认为在YouTube上有一个人能够很好地完成这样的工作以及一些设计模式,我认为这个频道名称是DerekBanas。如果你谷歌它,他会出现。
快速回答你的问题是你想要将一些东西传递到JPanel类的构造函数中,或者将main方法放在JPanel类中,这里有一个快速举例说明一种方法。
JMenuItem是 - 添加新记录,在第一个标签中,当我选择这个JMenuItem时,他给我打开了一个框架,其中有JLabel和JTextField。然后有第二个选项卡,我点击相同的JMenuItem,它会召唤新的JFrame,它拥有自己的JLabel和JTextField。
public class TestFrame extends JFrame {
private ActionManager actionManager
private JMenuBar mb;
private JMenu file;
private JMenuItem openDialog1;
private JMenuItem openDialog2;
public TestFrame() {
this.actionManager = new ActionManager();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPanel(panel);
setJMenuBar(createMenuBar());
pack();
}
private JMenuBar createMenuBar() {
mb = new JMenuBar();
file = new JMenu("File");
openDialog2 = new JMenuItem("Open Dialog 2");
openDialog1 = new JMenuItem("Open Dialog 1");
openDialog2.addActionListener(actionManager.openDialog2Action);
openDialog1.addActionListener(actionManager.openDialog1Action);
//here i would add conditional code that added the correct
//menus to the menubar and menuitems to the correct menus and call
//this method from a `ChangeListener` that listens for tab changes so
//it recreates a new menu with the correct components for the selected
//tab but i added them to the same menu to demonstrate using specific actions
//for each menu item, it doesn't matter which menu they're attached to their
//action wont be called unless that JMenuItem is clicked.
//this method can be used for any type of button as well, commonly with
//toolbars, so you can reuse actions like copy, paste, new, open, save, etc
file.add(openDialog1);
file.add(openDialog1);
mb.add(file);
return mb;
}
public static void main(String[] args) {
TestFrame frame = new TestFrame();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
小组课......
public class ActionManager {
public ActionManager() {
}
Action openDialog1Action = new AbstractAction("Open Dialog 1") {
JOptionPane.showMessageDialog(null, "Dialog 1");
}
Action openDialog2Action = new AbstractAction("Open Dialog 2") {
JOptionPane.showMessageDialog(null, "Dialog 2");
}
}
所有这些代码都使用公共方法从类中访问私有字段(封装),并将TestFrame对象传递给TestPanel构造函数,以便我们可以在TestPanel类中使用TestFrame中的getter方法。我还将ActionListener添加为TestPanel类的一部分,因为这是在面板类中使用菜单栏组件的另一种方法。你能具体告诉我你想要完成什么,或者可能发布你当前代码的一小部分吗?这是您提出要求的几种方法之一,但它可能不是首选方式,这取决于您首先要从面板访问它们的原因,您的问题越具体,我就越有帮助。祝你好运。