繁体   English   中英

如何处理卡片布局?

[英]How do I do cardlayout with processing?

我想做一个必须切换屏幕的游戏。 我在JPanel上放了Jbutton,单击按钮时它会切换面板。 但是,我仅使用常规图形完成此操作。 这是一个处理示例,但我不太了解发生了什么:

import javax.swing.*;

import processing.awt.PSurfaceAWT;

import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

public class Main {

private JFrame window;

private JPanel cardPanel;

private OptionPanel panel1;    
private DrawingSurface panel2;

private PSurfaceAWT.SmoothCanvas processingCanvas;

public Main() {
    panel2 = new DrawingSurface();
    panel2.runMe();

    PSurfaceAWT surf = (PSurfaceAWT) panel2.getSurface();
    processingCanvas = (PSurfaceAWT.SmoothCanvas) surf.getNative();
    window = (JFrame)processingCanvas.getFrame();

    window.setBounds(0,0,800, 600);
    window.setMinimumSize(new Dimension(100,100));
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setResizable(true);

    cardPanel = new JPanel();
    CardLayout cl = new CardLayout();
    cardPanel.setLayout(cl);

    window.getContentPane().removeAll();

    panel1 = new OptionPanel(this);    
    panel2 = new DrawingSurface();

    cardPanel.add(panel1,"1");
    cardPanel.add(processingCanvas,"2");

    window.setLayout(new BorderLayout());

    window.add(cardPanel);
    window.revalidate();
}


public static void main(String[] args)
{
    Main m = new Main();
}

public void changePanel() {
    ((CardLayout)cardPanel.getLayout()).next(cardPanel);
    processingCanvas.requestFocus();
}

}

选项面板是这个(主要在上面):

public class OptionPanel extends JPanel implements ActionListener {

Main w;

public OptionPanel(Main w) {
    this.w = w;
    JButton button = new JButton("Press me!");
    button.addActionListener(this);
    add(button);
}

public void actionPerformed(ActionEvent e) {
    w.changePanel();
}

}

此示例有一个绘图表面,在其中绘制马里奥,并在某些矩形上跳转。 我只想知道如何连接不同的面板并能够绘制每个面板。

通常,您不应该这样混合Swing和Processing。

具体来说,您可以将Processing嵌入到Swing中,但是您不应尝试将Swing嵌入到Processing中。 处理具有自己的渲染线程和事件队列,这使得将Swing放入处理非常困难。

在处理3中,即使在Swing中嵌入处理也变得更加复杂,因此,如果可能的话,也应避免这样做。

老实说,如果我是你,我会尝试重新考虑自己的做法。 您可以使用两个单独的窗口来执行此操作吗? 也许是显示按钮的Swing JFrame,然后是显示草图的单独的“处理”窗口? 也许您可以同时隐藏一个并显示另一个?

如果确实需要混合使用Swing和Processing,则需要将Processing草图放入Swing窗口中,而不是尝试将Swing组件放入Processing窗口中。 从技术上讲,“处理”窗口是一个JFrame,但是您可能不应该那样处理它。 相反,获取processingCanvas并将其添加到您自己的JFrame中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM