Java (卡片布局)为JComboBox设置卡片面板的卡片名称

Java (卡片布局)为JComboBox设置卡片面板的卡片名称,java,swing,layout,jcombobox,cardlayout,Java,Swing,Layout,Jcombobox,Cardlayout,伙计们。我的项目设计结合了硬编码设计和使用Netbeans的GUI构建器进行的设计。由于进度落后,我决定使用GUI Builder进行RAD和快速设计 因此,我的问题是,在使用面板的卡片布局时,如何为卡片面板指定名称。我知道,如果不使用GUI生成器,您只需编写cardContainerPanel.add(card1Panel,“card1”)card1作为card1面板的String标识符。但是我希望能够做的是传递一个字符串变量作为卡名 像 然后 cardContainerPanel.add(c

伙计们。我的项目设计结合了硬编码设计和使用Netbeans的GUI构建器进行的设计。由于进度落后,我决定使用GUI Builder进行RAD和快速设计

因此,我的问题是,在使用面板的卡片布局时,如何为卡片面板指定名称。我知道,如果不使用GUI生成器,您只需编写
cardContainerPanel.add(card1Panel,“card1”)
card1
作为card1面板的
String
标识符。但是我希望能够做的是传递一个
字符串变量
作为卡名

然后
cardContainerPanel.add(card1Panel,card1)

1.在Netbeans GUI Builder上,当面板的属性选项仅接受您在卡名上键入的字符串时,如何使用该选项执行此操作

JComboBox
上的
itemChange
事件期间,我需要切换到不同的卡

这是我到目前为止写的

private void settingsComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {                                                  
        CardLayout cl = (CardLayout)(cardContainerPanel.getLayout());
        cl.show(cardContainerPanel, (String)evt.getItem());
    }                                                 

    private void loadSettingsComboxBoxModel(){
        String HOME = "Home";
        String ADMIN = "Administration";
        String ADMIN_CURC = "Administration > Curriculum";
        String ADMIN_DISCOUNTS = "Administration > Discounts";
        String ADMIN_SECTIONS = "Administration > Sections";
        String ADMIN_USERS = "Administration > Users";
        String ADMIN_SCHED = "Administration > Schedule";
        String ADMIN_YRLEVEL = "Administration > Year Level";
        String PAYMENT = "Payment";
        String REGISTRATION = "Registration";
        String STUDENTS = "Students";
        String FACULTY = "Faculty";
        String REPORTS = "Reports";
        String SECTIONS = "Sections";

        String settingsComboBoxItems[] = 
            {HOME,ADMIN,ADMIN_CURC,ADMIN_DISCOUNTS,
                ADMIN_SECTIONS,ADMIN_USERS,ADMIN_SCHED,
                ADMIN_YRLEVEL,PAYMENT,REGISTRATION,STUDENTS,FACULTY,REPORTS,SECTIONS};
        DefaultComboBoxModel dcm = new DefaultComboBoxModel(settingsComboBoxItems);
        settingsComboBox.setModel(dcm); 
    }

我非常感谢你的帮助


谢谢

在IDE中硬编码卡的名称与此无关

相关的是当你想交换卡片时使用的卡片名称。在这种情况下,没有理由不能使用变量指定要交换的卡名

事实上,看起来您正在使用组合框来选择要显示的卡。因此,您需要做的就是确保卡片名称与组合框中显示的值相同

然后在ItemListener中,您只需使用以下方法交换卡:

cardLayout.show(cards, (String)evt.getItem());

请参阅Swing教程中的一节,了解一个工作示例。

在IDE中硬编码卡的名称与此无关

相关的是当你想交换卡片时使用的卡片名称。在这种情况下,没有理由不能使用变量指定要交换的卡名

事实上,看起来您正在使用组合框来选择要显示的卡。因此,您需要做的就是确保卡片名称与组合框中显示的值相同

然后在ItemListener中,您只需使用以下方法交换卡:

cardLayout.show(cards, (String)evt.getItem());

请参阅上Swing教程中的部分,以获取一个工作示例。

我能够使用
addLayoutComponent()
方法解决此问题,该方法将面板添加到Card Layout对象,并接受字符串变量作为其第二个参数

        String HOME = "Home";
        String ADMIN = "Administration";
        String ADMIN_CURC = "Administration > Curriculum";
        String ADMIN_DISCOUNTS = "Administration > Discounts";
        String ADMIN_SECTIONS = "Administration > Sections";
        String ADMIN_USERS = "Administration > Users";
        String ADMIN_SCHED = "Administration > Schedule";
        String ADMIN_YRLEVEL = "Administration > Year Level";
        String PAYMENT = "Payment";
        String REGISTRATION = "Registration";
        String STUDENTS = "Students";
        String FACULTY = "Faculty";
        String REPORTS = "Reports";
        String SECTIONS = "Sections";

        String settingsComboBoxItems[] = 
            {HOME,ADMIN,ADMIN_CURC,ADMIN_DISCOUNTS,
                ADMIN_SECTIONS,ADMIN_USERS,ADMIN_SCHED,
                ADMIN_YRLEVEL,PAYMENT,REGISTRATION,STUDENTS,FACULTY,REPORTS,SECTIONS};
        DefaultComboBoxModel dcm = new DefaultComboBoxModel(settingsComboBoxItems);

//constructor
    public UserManagementGUI() {
            initComponents();
            loadUsersList();
            settingsComboBox.setModel(dcm);
        }

private void settingsComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {                                                  
        CardLayout cl = (CardLayout)(cardContainerPanel.getLayout());
        cl.addLayoutComponent(homePermissionsPanel, HOME);
        cl.addLayoutComponent(administrationPermissionsPanel, ADMIN);
        cl.show(cardContainerPanel, (String)evt.getItem());
    } 

我能够使用
addLayoutComponent()
方法解决这个问题,该方法将面板添加到Card Layout对象,并接受字符串变量作为其第二个参数

        String HOME = "Home";
        String ADMIN = "Administration";
        String ADMIN_CURC = "Administration > Curriculum";
        String ADMIN_DISCOUNTS = "Administration > Discounts";
        String ADMIN_SECTIONS = "Administration > Sections";
        String ADMIN_USERS = "Administration > Users";
        String ADMIN_SCHED = "Administration > Schedule";
        String ADMIN_YRLEVEL = "Administration > Year Level";
        String PAYMENT = "Payment";
        String REGISTRATION = "Registration";
        String STUDENTS = "Students";
        String FACULTY = "Faculty";
        String REPORTS = "Reports";
        String SECTIONS = "Sections";

        String settingsComboBoxItems[] = 
            {HOME,ADMIN,ADMIN_CURC,ADMIN_DISCOUNTS,
                ADMIN_SECTIONS,ADMIN_USERS,ADMIN_SCHED,
                ADMIN_YRLEVEL,PAYMENT,REGISTRATION,STUDENTS,FACULTY,REPORTS,SECTIONS};
        DefaultComboBoxModel dcm = new DefaultComboBoxModel(settingsComboBoxItems);

//constructor
    public UserManagementGUI() {
            initComponents();
            loadUsersList();
            settingsComboBox.setModel(dcm);
        }

private void settingsComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {                                                  
        CardLayout cl = (CardLayout)(cardContainerPanel.getLayout());
        cl.addLayoutComponent(homePermissionsPanel, HOME);
        cl.addLayoutComponent(administrationPermissionsPanel, ADMIN);
        cl.show(cardContainerPanel, (String)evt.getItem());
    } 

谢谢你的回复。是的,我实际上访问了oracle.com页面上关于“如何使用卡片布局”的内容,但是我如何知道一个特定的组合框模型项仅使用GUI构建器绑定到哪个面板上。我可以简单地使用cardLayout.show(cards,(String)evt.getItem());但是我不能将组合框中的项目绑定到它必须显示的面板上。你刚才说你可以在IDE中输入“homeCard”。因此,您还需要在组合框中包含“homeCard”。但是,根据您发布的代码,卡名应为“Home”,与组合框中显示的值相同。第二张卡片的名字应该是“Administration”。谢谢您提供的信息。我能够解决这个问题,但使用了另一种方法,即使用addLayoutComponent(cardPanelToShow,stringVariable);cl.show(cardContainerPanel,(String)evt.getItem());我想您的解决方案更简单,代码更少。谢谢我很感激。我将使用addLayoutComponent()编辑我的帖子,以帮助其他人。感谢回复。是的,我实际上访问了oracle.com页面上关于“如何使用卡片布局”的内容,但是我如何知道一个特定的组合框模型项仅使用GUI构建器绑定到哪个面板上。我可以简单地使用cardLayout.show(cards,(String)evt.getItem());但是我不能将组合框中的项目绑定到它必须显示的面板上。你刚才说你可以在IDE中输入“homeCard”。因此,您还需要在组合框中包含“homeCard”。但是,根据您发布的代码,卡名应为“Home”,与组合框中显示的值相同。第二张卡片的名字应该是“Administration”。谢谢您提供的信息。我能够解决这个问题,但使用了另一种方法,即使用addLayoutComponent(cardPanelToShow,stringVariable);cl.show(cardContainerPanel,(String)evt.getItem());我想您的解决方案更简单,代码更少。谢谢我很感激。我将使用addLayoutComponent()编辑我的帖子,以帮助其他人。步骤:1.)声明字符串变量以保存卡片标识符。2.)将声明的字符串存储到数组中。3.)声明一个DefaulComboxModel对象并传递数组以对其进行初始化4.)将组合框的模型设置为包含数组的DefaultComboxModel对象5.)使用addLayoutComponent()方法将面板添加到CardLayout对象cl。不确定设置两个约束的目的是什么。您如何访问其他15个面板?为什么每次都设置约束?在创建面板时应该分配约束。别担心,我实际上接受了你的建议,但你知道我只是想,也许我可以为每个约束设置不同的名称,而这些约束在模型项的名称上是不同的。我知道这有点多余,这就是为什么我仍然接受你的建议,为组合框项目和卡的(面板)标识符设置类似的名称。步骤:1.)声明字符串变量以保存卡的标识符。2.)将声明的字符串存储到数组中。3.)声明一个DefaulComboxModel对象并传递数组以对其进行初始化4.)将组合框的模型设置为包含数组的DefaultComboxModel对象5.)使用addLayoutComponent()方法将面板添加到CardLayout对象cl。不确定设置两个约束的目的是什么。您如何访问其他15个面板?你为什么设圈套