Variable einer anderen Klasse importieren

HiImSkulte

Mitglied
Hallo liebe Community,
ich habe vor ein paar Wochen angefangen Java zu programmieren und habe jetzt das Problem, dass ich eine Klasse erstellt habe und in dieser eine Methode, die die Variable "g" aus einer anderen Klasse benötigt.

Das sieht so aus:

Java:
public class Buttons {
           
    public static void drawButtons() {
              
    }
}

Und jetzt will ich g.Funktion benutzen in dieser Methode, aber weiß nicht wie ich aus der anderen Klasse aus einer anderen Methode g "rausholen" kann, sodass ich g auch in dieser Methode benutzen kann.

Hoffe es ist verständlich was ich meine.
Danke!
 
Du erstellst eine Instanz der Klasse. Also schreibst du: Klassenname instanzNameZuVergeben = new Klassenname();
danach kannst du mit instanzName.Methode(); auf die Methoden der Klasse zugreifen. Anstelle der Namen musst du natürlich die richtigen Namen für deinen Code einsetzen.
 
Java:
package gfx;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.*;
import javax.swing.*;

import gfx.*;

public class Window extends Canvas implements Runnable, MouseListener, MouseMotionListener {
      
    private static final long serialVersionUID = 1L;
      
        // GAME VARIABLES
        private boolean running = false;
        private int mousex;
        private int mousey;
          
        // BUTTON VARIABLES
      
        // WINDOW VARIABLES
        private int width, height;
        private String title;
        private JFrame frame;
        private BufferedImage image;
        private int[] pixels;
        private Screen screen;
        private Thread thread;
      
    public Window(int w, int h, String t) {
      
        this.width = w;
        this.height = h;
        this.title = t;
      
        frame = new JFrame(title);
      
        image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
        screen = new Screen(width, height, pixels);
      
        frame.add(this);
        frame.setSize(width, height);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      
        addMouseMotionListener(this);
        addMouseListener(this);
    }
  
    public void start() {
        running = true;
      
        thread = new Thread(this, title);
        thread.start();
    }
  
    public void stop() {
        running = false;
      
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
  
    public void run() {  
        while(running) {
            render();
            update();
          
        }
    }
  
    public void render() {
        BufferStrategy bs = getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(3);
            return;
        }
      
        screen.clear(0);
        screen.render(0xC0C0C0);
      
        Graphics g = bs.getDrawGraphics();
            g.create();
            g.drawImage(image, 0, 0, null);
  
            // BUTTONS  
                Buttons.drawButtons();
            // STRINGS / INTEGERS
                  
            // LINES
              
            // TESTBUTTON
          
            g.dispose();
            bs.show();
    }

    public void update() {
      
    }

    @Override
    public void mouseDragged(MouseEvent e) {
      
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        mousex = e.getX();
        mousey = e.getY();
    }

    @Override
    public void mouseClicked(MouseEvent e) {
      
        // BUTTONS
      
    }

    @Override
    public void mouseEntered(MouseEvent e) {
  
        // BUTTONS
      
    }

    @Override
    public void mouseExited(MouseEvent e) {
      
        // BUTTONS
    }
  
    @Override
    public void mousePressed(MouseEvent e) {
      
        // BUTTONS
      
    }
  
    @Override
    public void mouseReleased(MouseEvent e) {
      
        // BUTTONS
      
    }
  
    // GETTERS / SETTERS
  
    public int getWidth() {
        return width;
    }
  
    public int getHeight() {
        return height;
    }
  
    public String getTitle() {
        return title;
    }
  
}

Also das ist meine "Window" Klasse die mir mein JFrame Fenster erstellt. Nun habe ich in der Render-Methode Buttons.drawButtons(); aufgerufen, und in der Buttons Klasse habe ich stehen
Window win = new Window();
so wäre es doch richtig oder?
Das Problem ist nun, dass ich bei Window(); noch die Parameter angeben muss von meiner Window Klasse, also (width, height, observer).

Java:
public class Buttons {
  
    public static void drawButtons() {
        Window g = new Window(0, 0, null);      
      
    }
}

Wenn ich es so mache kommt folgende Fehlermeldung:

Exception in thread "Dollar Clickers" java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
at java.awt.image.BufferedImage.<init>(Unknown Source)
at gfx.Window.<init>(Window.java:40)
at gfx.Buttons.drawButtons(Buttons.java:13)
at gfx.Window.render(Window.java:95)
at gfx.Window.run(Window.java:74)
at java.lang.Thread.run(Unknown Source)

Also sagt er, dass die Höhe und Breite nicht weniger oder gleich 0 sein kann, also gebe ich folgendes ein:

Java:
public class Buttons {
  
    public static void drawButtons() {
        Window g = new Window(1600, 900, null);      
      
    }
}

Jetzt flackert es ein paar Sekunden und öffnet sich gefühlte 100 mal und schließt sich nach ca. 2 Sekunden selbst.

Außerdem kann ich nicht auf die Variable "g" aus meiner Window Klasse zugreifen, zumindest funktioniert in meiner Button Klasse dann g.drawRect(...); nicht.
Irgendwelche Ideen? 😀

(Wenn ich Window g = new Window(); außerhalb der drawButtons() Methode schreibe funktioniert es trotzdem nicht)

Danke für jede Hilfe! 🙂
 

Zurück
Oben