JavaJFrame布局
这就是问题所在,我有一个类主窗口,它在一个设置例程中扩展了JFrame,我将类的布局设置为一个新的CardLayout()。这一切都很好,但当我从JFrame请求布局并将其返回的内容转换为CardLayout时,我会收到错误,因为它返回的是BorderLayout。我想你是从听说的 请在下面找到一些代码:JavaJFrame布局,java,swing,layout,Java,Swing,Layout,这就是问题所在,我有一个类主窗口,它在一个设置例程中扩展了JFrame,我将类的布局设置为一个新的CardLayout()。这一切都很好,但当我从JFrame请求布局并将其返回的内容转换为CardLayout时,我会收到错误,因为它返回的是BorderLayout。我想你是从听说的 请在下面找到一些代码: public MainWindow() { initWindow(); } public void actionPerformed(ActionEvent e) { Card
public MainWindow()
{
initWindow();
}
public void actionPerformed(ActionEvent e)
{
CardLayout m = (CardLayout)super.getLayout();
m.next(this);
}
private void initWindow()
{
super.getContentPane().setLayout(_mainLayout);
super.setTitle(_WINDOW_NAME);
super.setSize(_DEFAULT_WINDOW_SIZE);
super.setLocationRelativeTo(null);
super.setAlwaysOnTop(true);
super.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
super.setResizable(false);
init_buttons_panel();
super.add(_buttons_panel, "bpanel");
}
我发现代码并不完美,这是因为我一直在努力解决这个问题。是的,我意识到这样的铸造是不好的,但这只是测试代码来证明这一点。哦,还有,你猜它是一个卡片布局
我也读过如何使用卡片布局,我的代码不会做任何不寻常的事情。首先,你不应该像那样投射布局,至少在没有进行任何验证的情况下。您应该首先使用
instanceof
关键字检查它是否真的是CardLayout,以防止程序突然结束
第二,问题在于:
public void actionPerformed(ActionEvent e)
{
CardLayout m = (CardLayout)super.getContentPane().getLayout();
m.next(this);
}
基本上,您获取的是JFrame的布局,而不是JFrame的内容窗格,后者实际上是您设置为CardLayout的内容窗格。JFrame的getLayout方法继承自容器,因此在调用JFrame的内容窗格时不会转发。您可以尝试使用
super.getContentPane().getLayout()
而不是super.getLayout()
您发布的代码对我们没有帮助,因为我们没有所有信息。我们不知道变量mainLayout指的是什么
我建议您首先阅读Swing教程中的部分,以获得一个工作示例和一个设计更好的程序。首先,没有理由扩展JFrame,因为您还没有添加任何功能
super.getContentPane().setLayout(_mainLayout);