Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 现有框架中的CardLayout面板显示错误_Java_Swing_Layout Manager_Cardlayout - Fatal编程技术网

Java 现有框架中的CardLayout面板显示错误

Java 现有框架中的CardLayout面板显示错误,java,swing,layout-manager,cardlayout,Java,Swing,Layout Manager,Cardlayout,我使用Netbeans 6.9.1中的设计视图设计了一个包含一些控件的框架。此外,我还添加了一个空面板,在该面板中,我尝试在单击按钮时切换两个swing组件的显示。问题是,单击按钮时,面板将不显示任何内容。代码如下: private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: JPanel txtPanel = new JPa

我使用Netbeans 6.9.1中的设计视图设计了一个包含一些控件的框架。此外,我还添加了一个空面板,在该面板中,我尝试在单击按钮时切换两个swing组件的显示。问题是,单击按钮时,面板将不显示任何内容。代码如下:

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    JPanel txtPanel = new JPanel();
    JPanel listPanel = new JPanel();

    JTextField txtfield = new JTextField("ABCDEFGHIJ", 20);
    txtPanel.add(txtfield);

    JList<String> list = new JList<String>();
    DefaultListModel<String> model = new DefaultListModel<String>();

    for (int i = 0; i < userCommands.size(); i++){
        model.addElement(userCommands.get(i));
    }
    list.setModel(model);
    listPanel.add(list);

    jPanel2.add(listPanel, "list");
    jPanel2.add(txtPanel, "text");

    //MainUI.getFrames()[0].add(jPanel2, BorderLayout.CENTER);

    itemStateChanged("text");
}
    public void itemStateChanged(String disp) {
    CardLayout cl = (CardLayout)(jPanel2.getLayout());
    cl.show(jPanel2, disp);
}

在第一段代码中,
jPanel2
被拖放到包含其他组件的框架上,我在这里试图实现的是,在单击按钮时,
jPanel2
应该在文本字段和列表之间切换。但目前,面板在点击按钮时没有显示任何内容。

在考虑jPanel2是否可以在不同的面板(不同的卡)之间切换之前,jPanel2是否在任何地方显示?我能看到的唯一显示jPanel2的代码是将它添加到MainUI,但它被注释掉了?!那么,您如何知道jPanel2内部的显示没有切换呢?

我为您编写了一个快速示例代码。看一看。您需要将卡布局定义为全局,然后再试一次

import javax.swing.AbstractAction;
公共类TestPanel扩展了JPanel{

/**
 * Create the panel.
 */
JPanel panel;
CardLayout cl = new CardLayout();
public TestPanel() {
    GridBagLayout gridBagLayout = new GridBagLayout();
    gridBagLayout.columnWidths = new int[]{0, 155, 0, 0};
    gridBagLayout.rowHeights = new int[]{94, 0, 0};
    gridBagLayout.columnWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
    gridBagLayout.rowWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
    setLayout(gridBagLayout);

    JButton btnNewButton = new JButton("New button");
    GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
    gbc_btnNewButton.insets = new Insets(0, 0, 5, 5);
    gbc_btnNewButton.gridx = 0;
    gbc_btnNewButton.gridy = 0;
    add(btnNewButton, gbc_btnNewButton);
    btnNewButton.setAction(new AbstractAction("New button") {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            JPanel txtPanel = new JPanel();
            JPanel listPanel = new JPanel();

            JTextField txtfield = new JTextField("ABCDEFGHIJ", 20);
            txtPanel.add(txtfield);

            JList<String> list = new JList<String>();
            DefaultListModel<String> model = new DefaultListModel<String>();

            for (int i = 0; i < 3; i++){
                model.addElement("Sanjaya");
            }
            list.setModel(model);
            listPanel.add(list);

            panel.add(listPanel, "list");
            panel.add(txtPanel, "text");

            //MainUI.getFrames()[0].add(jPanel2, BorderLayout.CENTER);

            itemStateChanged("list");

        }
    });

    JTextArea textArea = new JTextArea();
    textArea.setLineWrap(true);
    GridBagConstraints gbc_textArea = new GridBagConstraints();
    gbc_textArea.insets = new Insets(0, 0, 5, 5);
    gbc_textArea.fill = GridBagConstraints.BOTH;
    gbc_textArea.gridx = 1;
    gbc_textArea.gridy = 0;
    add(textArea, gbc_textArea);

    panel = new JPanel(cl);
    GridBagConstraints gbc_panel = new GridBagConstraints();
    gbc_panel.insets = new Insets(0, 0, 5, 0);
    gbc_panel.fill = GridBagConstraints.BOTH;
    gbc_panel.gridx = 2;
    gbc_panel.gridy = 0;
    add(panel, gbc_panel);

}
  public void itemStateChanged(String disp) {


        cl.show(panel, disp);
    }
/**
*创建面板。
*/
JPanel小组;
CardLayout cl=新的CardLayout();
公共测试面板(){
GridBagLayout GridBagLayout=新的GridBagLayout();
gridBagLayout.columnWidths=新的int[]{0,155,0,0};
gridBagLayout.rowHeights=newint[]{94,0,0};
gridBagLayout.columnWeights=新的double[]{0.0,0.0,1.0,double.MIN_值};
gridBagLayout.rowWeights=新的double[]{1.0,1.0,double.MIN_值};
setLayout(gridBagLayout);
JButton btnNewButton=新JButton(“新按钮”);
GridBagConstraints gbc_btnNewButton=新的GridBagConstraints();
gbc_btnNewButton.insets=新的insets(0,0,5,5);
gbc_btnNewButton.gridx=0;
gbc_btnNewButton.gridy=0;
添加(BtnewButton、gbc_BtnewButton);
setAction(新抽象操作(“新按钮”){
@凌驾
已执行的公共无效操作(操作事件arg0){
JPanel txtPanel=新的JPanel();
JPanel listPanel=newjpanel();
JTextField txtfield=新的JTextField(“ABCDEFGHIJ”,20);
txtPanel.add(txtfield);
JList list=新JList();
DefaultListModel=新的DefaultListModel();
对于(int i=0;i<3;i++){
模型补遗(“Sanjaya”);
}
list.setModel(model);
添加(列表);
面板。添加(列表面板,“列表”);
面板。添加(txtPanel,“文本”);
//MainUI.getFrames()[0]。添加(jPanel2,BorderLayout.CENTER);
项目状态变更(“列表”);
}
});
JTextArea textArea=新的JTextArea();
textArea.setLineWrap(true);
GridBagConstraints gbc_textArea=新的GridBagConstraints();
gbc_textArea.insets=新的insets(0,0,5,5);
gbc_textArea.fill=GridBagConstraints.BOTH;
gbc_textArea.gridx=1;
gbc_textArea.gridy=0;
添加(文本区域,gbc_文本区域);
面板=新JPanel(cl);
GridBagConstraints gbc_panel=新的GridBagConstraints();
gbc_面板插图=新插图(0,0,5,0);
gbc_panel.fill=GridBagConstraints.BOTH;
gbc_panel.gridx=2;
gbc_panel.gridy=0;
添加(面板、gbc_面板);
}
公共无效itemStateChanged(字符串显示){
cl.show(面板、显示);
}

}

为了更快地获得更好的帮助,请发布一条消息。也可以尝试将jPanel2创建为JPanelJPanel2=newJPanel(cl);正如我所提到的,jPanel2已经被拖放到了MainUI,我注释掉了这段代码,因为它被拖放到了MainUI框架中,所以没有必要再将它添加到MainUI框架中……我认为它没有切换,因为当我按下按钮时,jPanel2的区域与原来一样……什么都没有发生,它既不显示textfield也不显示jlist…有什么想法吗?我没有多少拖放JFrame的经验,也不知道这会对应用程序的其余部分产生什么影响。当JFrame被放到MainUI上时,MainUI是否显示正确的JPanel?