Podział ekranu

0

Witam wszystkich, chciałbym podzielić "screen" na dwie części, by np: w lewej części było menu, a w drugiej gra/symulacja. Myślałem o layoutach, lecz nie bardzo wiem jak ich użyć by były powiązane z klasą "Screen".

package Main;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import javax.swing.JFrame;

import Graphics.Screen;

public class MainClass extends Canvas implements Runnable {
	private static final long serialVersionUID = 1L;
	
	private Thread thread;
	private JFrame frame;
	private Screen screen;
	private Toolkit kit = Toolkit.getDefaultToolkit();
	private Dimension screenSize = kit.getScreenSize();
	private int width = screenSize.width;
	private int height = screenSize.height;
	private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
	private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
	private boolean running = false;
	
	public MainClass() {
		getPreferredSize();
		
		screen = new Screen(width, height);
		frame = new JFrame();
		
	}
	
	public synchronized void start() {
		running = true;
		thread = new Thread(this, "Simulation");
		thread.start();
	}
	
	public synchronized void stop() {
		running = false;
		try {
			thread.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		while (running) {
			update();
			render();
		}
	}
	
	public void update() {
		
	}
	
	public void render() {
		BufferStrategy strategy = getBufferStrategy();
		if(strategy == null) {
			createBufferStrategy(3);
			return;
		}
		
		Graphics g = strategy.getDrawGraphics();
		/*drawing stuff
		 * 
		 */
		screen.clear();
		screen.render();
		
		for (int i = 0; i < pixels.length; i++) 
			pixels[i] = screen.pixels[i];
		
		g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
		g.dispose();
		strategy.show();
	}
	
	public Dimension getPreferredSize() {
		int screenHeight = screenSize.height;
		int screenWidth = screenSize.width;
		return new Dimension(screenWidth, screenHeight);
	}
	
	public static void main(String[] args) {
		MainClass main = new MainClass();
		main.frame.setTitle("Simulation");
		main.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		main.frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
		main.frame.setVisible(true);
		main.frame.add(main);
		main.frame.pack();
		
		main.start();
	}
	
}

package Graphics;

public class Screen{
	
	protected int width, height;
	public int[] pixels;
	private int time = 0;
	private int counter = 0;
	
	public Screen(int width, int height) {
		this.width = width;
		this.height = height;
		pixels = new int [width * height];
	}
	
	public void clear() {
		for (int i = 0; i < pixels.length; i++) {
			pixels[i] = 0;
		}
	}
	
	public void render() {
		counter++;
		if(counter % 100 == 0) {
			time++;
		}
		for (int i = 0; i < height; i++) {
			for (int j = 0; j < width; j++) {
				pixels[j + i * width] = 0x5499f8;
			}
		}
	}
}

Drugim pomysłem jest podzielenie screenu na lewą i prawą strone, utworzenie dwóch obiektów screenMenu, screenGame i przekazanie jako parametry odpowiednio szerokość i wysokość.

0

Jeśli dobrze rozumiem chcesz mieć aplikację pełnoekranową która po lewej stronie da Ci możliwość wpisywania ustawień a po prawej pojawiać się będzie obraz na podstawie danych z lewej strony? Ja bym to rozwiązał tworząc z formy pełen ekran i wstawiając na nią dwa JPanel. Zazwyczaj tak rozwiązywałem tą sprawę. Szczególnie że ta Twoja klasa Screen ma stosunkowo podobne działanie do JPanelu. JPanel można wtedy dopasować do rozmiaru elementów w środku bardzo małą ilością kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1