【发布时间】:2014-07-23 01:46:59
【问题描述】:
这个程序应该向 JFrame 添加两个面板,每个面板都有一个切换按钮,允许用户在每个面板之间切换。它编译得很好,但是当我尝试点击 switch1 按钮时,我得到了这个错误:
线程“AWT-EventQueue-0”中的异常 java.lang.ClassCastException:java.awt.BorderLayout 无法转换为 java.awt.CardLayout 在 tester.actionPerformed(tester.java:36) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在 javax.swing.DefaultButtonModel.setPressed(未知来源) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEventImpl(未知来源) 在 java.awt.EventQueue.access$200(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.awt.EventQueue$3.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.awt.EventQueue$4.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)
我已经将 JFrame 布局设置为 CardLayout,所以当我使用 this.getLayout() 时,它应该返回一个 CardLayout 对象。这是程序:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class tester extends JFrame implements ActionListener
{
CardLayout cc = new CardLayout();
JLabel text1 = new JLabel("Panel 1");
JLabel text2 = new JLabel("Panel 2");
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JButton switch1 = new JButton("Switch1");
JButton switch2 = new JButton("Switch2");
boolean panel = true;
public tester()
{
setSize(100, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(cc);
switch1.addActionListener(this);
switch2.addActionListener(this);
panel1.add(switch1);
panel1.add(text1);
panel2.add(switch2);
panel2.add(text2);
add(panel1, "Panel 1");
add(panel2, "Panel 2");
setVisible(true);
}
public void actionPerformed(ActionEvent evt)
{
if(panel)
{
CardLayout pane = (CardLayout)this.getLayout();
pane.last(this);
panel = false;
}
else
{
CardLayout pane = (CardLayout)this.getLayout();
pane.first(this);
panel = true;
}
repaint();
}
public static void main(String[] args)
{
tester test = new tester();
}
}
【问题讨论】:
标签: java swing layout-manager classcastexception cardlayout