Note that there are some explanatory texts on larger screens.

plurals
  1. POCalling awt Frame methods from subclass
    primarykey
    data
    text
    <p>This question is about Frames, Java and <a href="http://processing.org/" rel="noreferrer">Processing</a>.</p> <p>This questions sounds pretty convoluted but its really not. I'll try keep this to a simple minimum. I'm creating a small ball in a maze game to get my head around physics and rendering. It's been a good experience so far but I've hit a bit of a brick wall.<br> The general layout I decided on was to contain PApplets within a AWT Frame and have the Frame close. The reason for this is because I was told that you should only have on instance of a Papplet at a time. </p> <p><code>PApplet</code> is the <code>Applet</code> class in <a href="http://processing.org/" rel="noreferrer">Processing</a>, a rendering library. </p> <p>I have 3 classes here including the main</p> <pre><code>public class Menu extends PApplet { //images and buttons PImage background, playbtn1, playbtn2, hsbtn1, hsbtn2, abbtn1, abbtn2, exbtn1, exbtn2; FBox pBtn, hBtn, eBtn; FWorld menu; //simple constructor public Menu() { } public void setup() { size(600, 400); smooth(); Fisica.init(this); menu = new FWorld(); //loading and placing images background = loadImage("MenuAlt.jpg"); System.out.println(background); playbtn1 = loadImage("play1.gif"); playbtn2 = loadImage("play2.gif"); hsbtn1 = loadImage("high1.gif"); hsbtn2 = loadImage("high2.gif"); exbtn1 = loadImage("exit1.gif"); exbtn2 = loadImage("exit2.gif"); //loading and placing buttons pBtn = new FBox(120, 150); pBtn.setPosition(135, 215); pBtn.setDrawable(false); hBtn = new FBox(120, 150); hBtn.setPosition(295, 215); hBtn.setDrawable(false); eBtn = new FBox(120, 150); eBtn.setPosition(455, 215); eBtn.setDrawable(false); //add item to world menu.add(pBtn); menu.add(hBtn); menu.add(eBtn); } public void draw() { image(background, 0, 0); image(playbtn1, 80, 140); image(hsbtn1, 237, 135); image(exbtn1, 400, 140); mouseOver(); menu.draw(); } //close this frame an open a new level, high score or exit //depending on what the use clicks public void mousePressed() { FBody pressed = menu.getBody(mouseX, mouseY); if (pressed == pBtn) { System.out.println("play game"); this.getParent().getParent().getParent().getParent().setVisible(false); ExampleFrame x = new ExampleFrame(new Level("level1.txt")); x.setLocation(this.getParent().getParent().getParent().getParent().getLocation()); } if (pressed == hBtn) { System.out.println("high scores"); this.getParent().getParent().getParent().getParent().setVisible(false); /* these are just for finding the parent System.out.println(this.getName()); System.out.println(this.getParent().getName()); System.out.println(this.getParent().getParent().getName()); System.out.println(this.getParent().getParent().getParent().getName()); System.out.println(this.getParent().getParent().getParent().getParent().getName()); */ ExampleFrame x = new ExampleFrame(new HighScores()); //for testing, you can change this to new menu() x.setLocation(this.getParent().getParent().getParent().getParent().getLocation()); } if (pressed == eBtn) { System.out.println("exit"); System.exit(0); } } </code></pre> <p>the exampleFrame class</p> <pre><code>public class ExampleFrame extends JFrame { PApplet app; public ExampleFrame(PApplet emApp) { super("Ball Maze Game"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(200, 200); app = emApp; setSize(615,438); setVisible(true); setLayout(new BorderLayout()); add(app, BorderLayout.CENTER); app.init(); } } </code></pre> <p>the main</p> <pre><code>public class Main { public static void main(String[] args) { ExampleFrame x = new ExampleFrame(new Menu()); } } </code></pre> <p>What needs to happen when mousePressed == ebtn is all the stuff in the Frame will be removed and a Highscores Screen will be loaded. highscores is almost the same as menu. There is no need to post code as there is enough here.</p> <p>The second class is the one which acts as a frame and holds the PApplet</p> <p>Bottom line, has anyone have any idea how to call the Frame methods from the PApplet or another way to remove all PApplets contents and load another PApplet in?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload