簡體   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