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