gpt4 book ai didi

java - JTabbedPane 将不同的类构造函数添加到选项卡

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:21 25 4
gpt4 key购买 nike

我正在尝试创建一个带有选项卡和菜单栏的框架,每个选项卡将包含不同的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,而不是类,我可以以某种方式在其他类中使用它们吗?

最佳答案

使用 JMenuBar 是什么意思?我建议研究 OOP 和封装。我认为 YouTube 上有一个人在涵盖此类内容以及几种设计模式方面做得非常出色,我认为该 channel 的名称是 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");
}

}

这段代码所做的就是使用公共(public)方法从类(封装)访问私有(private)字段,并将 TestFrame 对象传递到 TestPanel 构造函数中,以便我们可以使用 TestPanel 类中 TestFrame 内的 getter 方法。我还将 ActionListener 添加为 TestPanel 类的一部分,因为这是在面板类中使用菜单栏组件的另一种方法。你能具体告诉我你想要完成什么,或者可能发布你当前代码的一小部分吗?这是执行您所要求的操作的几种方法之一,但它可能不是首选方法,具体取决于您首先想要从面板访问它们的原因,您的问题越具体,我能提供的帮助就越大。祝你好运。

关于java - JTabbedPane 将不同的类构造函数添加到选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com