[英]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.