【问题标题】:How do I do cardlayout with processing?如何通过处理进行卡片布局?
【发布时间】:2017-05-10 05:11:32
【问题描述】:

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

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

}

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

【问题讨论】:

    标签: java jpanel processing cardlayout


    【解决方案1】:

    你通常不应该像这样混合 Swing 和 Processing。

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

    即使在 Swing 中嵌入处理在处理 3 中也变得更加复杂,因此也应尽可能避免。

    老实说,如果我是你,我会尝试重新考虑我的方法。你能用两个独立的窗口做到这一点吗?也许是一个显示按钮的 Swing JFrame,然后是一个显示草图的单独处理窗口?也许您可以隐藏一个并同时显示另一个?

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

    【讨论】:

      猜你喜欢
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2019-12-24
      • 2011-12-14
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多