Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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
JavaJFrame布局_Java_Swing_Layout - Fatal编程技术网

JavaJFrame布局

JavaJFrame布局,java,swing,layout,Java,Swing,Layout,这就是问题所在,我有一个类主窗口,它在一个设置例程中扩展了JFrame,我将类的布局设置为一个新的CardLayout()。这一切都很好,但当我从JFrame请求布局并将其返回的内容转换为CardLayout时,我会收到错误,因为它返回的是BorderLayout。我想你是从听说的 请在下面找到一些代码: public MainWindow() { initWindow(); } public void actionPerformed(ActionEvent e) { Card

这就是问题所在,我有一个类主窗口,它在一个设置例程中扩展了JFrame,我将类的布局设置为一个新的CardLayout()。这一切都很好,但当我从JFrame请求布局并将其返回的内容转换为CardLayout时,我会收到错误,因为它返回的是BorderLayout。我想你是从听说的

请在下面找到一些代码:

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);