Größe der BufferStrategy in der Window-Klasse

PissPain

Aktives Mitglied
Hallo, meine Window-Klasse sieht zurzeit so aus:
Java:
package window;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.lang.reflect.InvocationTargetException;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Window extends Canvas implements Runnable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7150710923108249953L;
	private BufferStrategy bufferStrategy;
	private JFrame frame;
	
	public Window(int width, int height, String title) {
		setPreferredSize(new Dimension(width, height));
		
		frame = new JFrame(title);
		frame.add(this);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
	}

	@Override
	public void run() {
		try {
			SwingUtilities.invokeAndWait(new Runnable() {

				@Override
				public void run() {
					createBufferStrategy(2);
					bufferStrategy = getBufferStrategy();
					frame.setVisible(true);
					setFocusable(true);
					requestFocus();
				}
				
			});
			
			while(true) {
				Graphics g = bufferStrategy.getDrawGraphics();
				g.setColor(Color.blue);
				g.fillRect(0, 0, getWidth(), getHeight());
				g.dispose();
				bufferStrategy.show();
				
				Thread.sleep(16);
			}
		} catch (InvocationTargetException | InterruptedException e) {}
	}
}

Wie kann ich es schaffen, der BufferStrategy eine exakte Größe zu geben?
Wenn ich meiner Window-Klasse also der Canvas die Größe 600x600 zuweise, dann habe ich eine Zeichenfläche von 610x610. Einfach 590x590 zuweisen, würde sich dann trotzdem auf anderen Computern ändern, da die andere Layouts benutzen könnten. Oder hat das einen anderen Grund?
Naja, hoffe, dass ihr mir da ne schönere Lösung geben könnt.

Vielen Dank :)
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Der Code ist ja eine Katastrophe. Ich hab jetzt mal ein paar Fragen an dich:

1. Was willst du überhaupt tun?
2. Weißt du überhaupt was eine BufferStrategy ist und was sie macht?
3. Warum verwendest du awt?
 

PissPain

Aktives Mitglied
Ich will auf einer Fläche zeichnen können, dessen Größe von mir festgelegt wird. Die Größe soll unabhängig von dem Design des Computers sein.

Die BufferStrategy sollte dafür sorgen, auf den Wiederaufbau des Bildes auf dem Monitor zu warten, sodass das Bild nicht ineinander gezeichnet wird. Das ist auch der Grund, weshalb ich einen neuen Thread starte, da, falls ich etwas updaten wollen würde, die update-Geschwindigkeit dieselbe wie die draw-Geschwindigkeit wäre und das alle bewegende Objekte zum zittern bringen würde.

Falls du mit awt Canvas meinst, dann liegt es daran, dass ich mit der BufferStrategy nicht in das Design des Fensters zeichnen möchte. Also, Canvas hilft mir dabei, auf die richtige Fläche zu zeichnen, wodurch aber das Problem mit der Größe zustande kommt. Und von einem JCanvas habe ich nicht gehört^^

Vielen Dank :)
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Nein aber du könntest mit Swing arbeiten. Swing arbeitet meines Wissens nach standardmäßig mit DoubleBuffering. Also das Einzige was du tun musst, ist von JComponent (resp. JPanel) ableiten.

Hier ein kleines Beispiel:

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

  public static void main(String... args) {
    SwingUtilities.invokeLater(Test::new);
  }

  public Test() {
    JFrame frame = new JFrame("Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);
    JPanel mainPanel = new JPanel();
    mainPanel.add(new MyCanvas(600, 400));
    frame.add(mainPanel);
    frame.pack();
    frame.setVisible(true);
  }

  private class MyCanvas extends JComponent {

    private final Dimension preferredDimension;
    private List<Point> points;

    public MyCanvas(int width, int height) {
      preferredDimension = new Dimension(width, height);
      points = new ArrayList<>();
      addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent e) {
          if (SwingUtilities.isLeftMouseButton(e)) {
            points.add(e.getPoint());
            repaint();
          }
        }

        @Override
        public void mouseReleased(MouseEvent e) {
          if (SwingUtilities.isLeftMouseButton(e)) {
            points.add(e.getPoint());
            repaint();
          }
        }
      });
      addMouseMotionListener(new MouseMotionAdapter() {

        @Override
        public void mouseDragged(MouseEvent e) {
          points.add(e.getPoint());
          System.out.println(e.getPoint());
          repaint();
        }
      });
    }

    @Override
    public Dimension getPreferredSize() {
      return preferredDimension;
    }

    @Override
    protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.drawPolyline(points.stream().mapToInt(p -> p.x).toArray(), points.stream().mapToInt(p -> p.y).toArray(), points.size());
      g.drawString(String.valueOf(points.size()), getWidth() >> 1, getHeight() >> 1);
    }
  }
}
PS: Ist mit Java 8 geschrieben.
 

PissPain

Aktives Mitglied
Ich habe es so abgeändert, dass es mir passt. Die Zeichenfläche ist auch so, wie ich es wollte, danke.
Eins noch, mit Zeichenfläche meinte nicht wirklich "Zeichnen", sondern eine Fläche, auf der ich mit einem Graphics Object machen kann, was ich will. So hat es aber auch geklappt, nochmals danke :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Seltsame Bytecode-Größe Java Basics - Anfänger-Themen 22
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
J JScrollePane größe anpassen Java Basics - Anfänger-Themen 4
G Bubblesort Array der Größe 10 Java Basics - Anfänger-Themen 1
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
E Array-Größe anpassen Java Basics - Anfänger-Themen 1
Z ArrayList direkt feste Größe mitgeben Java Basics - Anfänger-Themen 13
R Verschachtelte Arraylist und deren Größe auslesen Java Basics - Anfänger-Themen 7
D Größe der Zahlenkombinationen eines Arrays begrenzen Java Basics - Anfänger-Themen 0
V Die die aktuelle Größe zusätzlich in einem Label angezeigt wird Java Basics - Anfänger-Themen 11
J Liste der Größe nach sortieren Java Basics - Anfänger-Themen 2
S String nach Größe sortieren Java Basics - Anfänger-Themen 6
O Größe von Objekten Java Basics - Anfänger-Themen 5
H Erste Schritte Größe eines 2 dimensionalen Arrays ausgeben Java Basics - Anfänger-Themen 6
M Feste Größe des JFrames - Problem mit Dimension Java Basics - Anfänger-Themen 6
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
1 Größe einer zirkulären Liste bestimmen .. ? Java Basics - Anfänger-Themen 2
S JSlider Schritt Größe Java Basics - Anfänger-Themen 5
D Ausgabefenster größe festlegen Java Basics - Anfänger-Themen 3
P JTabel größe ändern und button anzeigen Java Basics - Anfänger-Themen 5
M Größe eines Buttons festlegen Java Basics - Anfänger-Themen 4
L JLabel Icon Größe anpassen Java Basics - Anfänger-Themen 11
S Datentypen und ihre Größe Java Basics - Anfänger-Themen 21
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
L 3 Zahlen einlesen und nach der Größe Sortieren Java Basics - Anfänger-Themen 5
A Bildgröße automatisch auf JLabel Größe konvertieren Java Basics - Anfänger-Themen 9
W Methoden größe zweier tiere vergleichen Java Basics - Anfänger-Themen 15
B JTabbedPane größe der Tabs ändern Java Basics - Anfänger-Themen 6
M Größe einer Datei via. Link ermitteln Java Basics - Anfänger-Themen 9
T Erste Schritte Textfeld übernimmt Größe nicht Java Basics - Anfänger-Themen 11
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
A Größe von Bild festlegen Java Basics - Anfänger-Themen 3
E Buchstaben nach Größe vergleichen Java Basics - Anfänger-Themen 4
M OOP Methode überschreiben mit String-Paramter unterschiedlicher Größe? Java Basics - Anfänger-Themen 19
RySa Input/Output aktuelle größe des BufferedWriters ? Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
L Größe von Ordner wiedergeben Java Basics - Anfänger-Themen 4
J Array Größe über Kommandozeile eingeben Java Basics - Anfänger-Themen 3
K GUI - Größe nicht änderbar Java Basics - Anfänger-Themen 7
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
Luk10 Größe von Objekten Java Basics - Anfänger-Themen 4
A Datentypen Größe eines mehrdimensionales Arrays Java Basics - Anfänger-Themen 4
E Titel und Größe vom JFrame setzen Java Basics - Anfänger-Themen 6
A Bild ändert Größe des Gridbag Layouts Java Basics - Anfänger-Themen 4
M Größe einer Konsole ermitteln Java Basics - Anfänger-Themen 2
D Zylinder/Eigenschaften (auf Größe) vergleichen Java Basics - Anfänger-Themen 16
c_sidi90 Größe von Dateien aus File Array ermitteln Java Basics - Anfänger-Themen 12
N zweidimensionales array größe bestimmen Java Basics - Anfänger-Themen 1
I Schriftart / farbe / größe bei Emailversand ändern Java Basics - Anfänger-Themen 17
K Problem mit Applet Größe Java Basics - Anfänger-Themen 5
Luk10 Größe eines Arrays ausgeben Java Basics - Anfänger-Themen 4
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
T Wie kann ich einem Graph in nem JPanel eine fixe Größe geben? Java Basics - Anfänger-Themen 6
MisterSeven Java Swing - Wie Frame größe festlegen?! Java Basics - Anfänger-Themen 10
M größe JEditorPane Java Basics - Anfänger-Themen 5
radiac Von einem Bild die Größe rausfinden??? Java Basics - Anfänger-Themen 9
J 2Dimensionales Array, Größe durch Eingabe bestimmen Java Basics - Anfänger-Themen 9
S Eclipse Java Applet größe ändern aber wie? Java Basics - Anfänger-Themen 5
M array - größe Java Basics - Anfänger-Themen 8
Z TextArea Größe festlegen Java Basics - Anfänger-Themen 22
K Größe, mehrdimensionales Array Java Basics - Anfänger-Themen 6
B ComboBox Größe ändern Java Basics - Anfänger-Themen 4
P Größe eines JButton? Java Basics - Anfänger-Themen 17
C die Klasse File - die größe der Datei anzeigen Java Basics - Anfänger-Themen 12
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
-horn- Array mit nicht fixer Größe möglich? Nachträgliches befüllen Java Basics - Anfänger-Themen 10
C Größe einer Referenz ? Java Basics - Anfänger-Themen 16
G JButton LookAndFeel - Größe ändern Java Basics - Anfänger-Themen 2
D File(jpeg) größe ändern und dann zu einen byte[] Java Basics - Anfänger-Themen 7
F InternalFrame, Anpassung der Größe Java Basics - Anfänger-Themen 10
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
K globales array - größe im Konstruktor Java Basics - Anfänger-Themen 3
N Integer Array der Größe nach ordnen Java Basics - Anfänger-Themen 1
I Swing-Komponenten-Größe im GridBagLayout beschränken Java Basics - Anfänger-Themen 2
G Button Größe anpassen Java Basics - Anfänger-Themen 4
R textfeld größe definieren Java Basics - Anfänger-Themen 2
B Java Array List größe auslesen zur Suchfunktion Java Basics - Anfänger-Themen 5
K Strings der Größe nach ordnen Java Basics - Anfänger-Themen 5
S Auf JButtonBar komponenten ausrichten, größe festlegen? Java Basics - Anfänger-Themen 5
M größe für Applet definieren Java Basics - Anfänger-Themen 4
G JList größe verändert sich Java Basics - Anfänger-Themen 2
G max größe array Java Basics - Anfänger-Themen 10
G Größe von JFrame unveränderbar Java Basics - Anfänger-Themen 7
G Maximale Größe von klasse Java Basics - Anfänger-Themen 7
G Größe von Box festlegen Java Basics - Anfänger-Themen 7
G die Größe eines Button bestimmen ? Java Basics - Anfänger-Themen 4
N Größe von Buttons Java Basics - Anfänger-Themen 3
K Größe des nötigen Array erraten Java Basics - Anfänger-Themen 8
G Aktuelle Heap-Größe auslesen? Java Basics - Anfänger-Themen 3
A JPanel(mit JScrollBar) größe ändern Java Basics - Anfänger-Themen 9
B JTable - Einstellen der Größe bzw. der Länge Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben