我想做一个必须切换屏幕的游戏。我有Jbuttons放在JPanels上,当你点击一个按钮它切换面板。但是,我只使用常规图形完成此操作。 这是一个处理的例子,但我真的不明白发生了什么:
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();
}
}
optionpanel是这个(主要在上面):
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();
}
}
这个例子有一个绘图表面,它绘制马里奥并在一些矩形上跳跃。我只是想知道如何连接不同的面板,并能够绘制每个面板。
答案 0 :(得分:0)
你通常不应该像这样混合Swing和Processing。
具体来说,您可以在Swing中嵌入Processing,但是您不应该尝试在Swing中嵌入Swing。 Processing有自己的渲染线程和自己的事件队列,这使得很难将Swing放入Processing。
即使在Swing中嵌入处理在处理3中也变得更加复杂,所以如果可能的话也应该避免。
老实说,如果我是你,我会尝试重新思考我的做法。你能用两个独立的窗户做到这一点吗?也许是一个显示按钮的Swing JFrame,然后是一个显示草图的单独Processing窗口?也许你可以隐藏一个并同时显示另一个?
如果你真的需要混合Swing和Processing,那么你需要将Processing sketch放在Swing窗口中,而不是试图将Swing组件放在Processing窗口中。处理窗口在技术上是一个JFrame,但你可能不应该像那样搞乱它。而是获取processingCanvas
并将其添加到您自己的JFrame中。