Java 如何处理cardlayout?
我想做一个必须切换屏幕的游戏。我在JPanel上设置了Jbuttons,当您单击一个按钮时,它会切换面板。但是,我只使用常规图形进行了此操作。 下面是一个处理的例子,但我不太明白发生了什么:Java 如何处理cardlayout?,java,jpanel,processing,cardlayout,Java,Jpanel,Processing,Cardlayout,我想做一个必须切换屏幕的游戏。我在JPanel上设置了Jbuttons,当您单击一个按钮时,它会切换面板。但是,我只使用常规图形进行了此操作。 下面是一个处理的例子,但我不太明白发生了什么: import javax.swing.*; import processing.awt.PSurfaceAWT; import java.awt.*; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListene
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();
}
}
选项面板如下所示(主屏幕位于上方):
此示例有一个绘图曲面,在该曲面上绘制mario并在某些矩形上跳跃。我只想知道如何连接不同的面板,并能够在每个面板上绘制一个图形。您通常不应该像这样混合使用Swing和处理 具体来说,您可以在Swing中嵌入处理,但不应该尝试在处理中嵌入Swing。处理有自己的渲染线程和事件队列,这使得在处理中使用Swing非常困难 即使是在Swing中嵌入处理在Processing 3中也变得复杂得多,所以如果可能的话也应该避免 所以说实话,如果我是你,我会尝试重新思考我的方法。你能用两扇单独的窗户来做这件事吗?可能是一个显示按钮的Swing JFrame,然后是一个显示草图的单独处理窗口?也许你可以隐藏一个同时展示另一个 如果确实需要混合Swing和处理,那么需要将处理草图放在Swing窗口中,而不是尝试将Swing组件放在处理窗口中。从技术上讲,处理窗口是一个JFrame,但您可能不应该像那样处理它。相反,获取
processingCanvas
并将其添加到您自己的JFrame中
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();
}
}