Plotten mit Swing [] (Plotten mit Swing), Lektion, Seite 722598
https://www.purl.org/stefan_ram/pub/plotten-swing (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Plotten mit Swing 

Ein kurzes Programm

Das folgende Beispielprogramm zeigt das Setzen eines Pixels in der Mitte eines Fensters. Es wurde mit der Absicht programmiert, ein möglichst kurzes Beispielprogramm für diesen Zweck zu schreiben.

Main.java

class Main extends javax.swing.JComponent implements java.lang.Runnable
{ final int X = 320; final int Y = 200;

@java.lang.Override
public void paintComponent( final java.awt.Graphics graphics )
{ graphics.fillRect( X/2, Y/2, 1, 1 ); }

@java.lang.Override public final void run()
{ final javax.swing.JFrame frame = new javax.swing.JFrame( "Main" );
Main.this.setPreferredSize( new java.awt.Dimension( X, Y ));
frame.setDefaultCloseOperation( javax.swing.JFrame.EXIT_ON_CLOSE );
frame.add( Main.this ); frame.pack(); frame.setVisible( true ); }

public static void main( final java.lang.String args[] )
{ java.awt.EventQueue.invokeLater( new Main() ); }}

Aussprachehinweis
close cloz

Ein kurzes Programm mit Puffer

Der Puffer »window« erlaubt es bei Bedarf, einzelne Pixel bei Bedarf mit »getRGB« wieder einzulesen. Außerdem erlaubt er es, eine Zeichnung anzuzeigen, ohne daß diese immer wieder neu gezeichnet werden muß.

Main.java

class Main extends javax.swing.JComponent implements java.lang.Runnable
{ final int X = 320; final int Y = 200;

final java.awt.image.BufferedImage window
= new java.awt.image.BufferedImage
( X, Y, java.awt.image.BufferedImage.TYPE_INT_RGB );

@java.lang.Override
public void paintComponent( final java.awt.Graphics graphics )
{ graphics.drawImage( Main.this.window, 0, 0, null ); }

@java.lang.Override public final void run()
{ final javax.swing.JFrame frame = new javax.swing.JFrame( "Main" );
Main.this.setPreferredSize( new java.awt.Dimension( X, Y ));
Main.this.window.setRGB( X/2, Y/2, 0xFFFFFF );
frame.setDefaultCloseOperation( javax.swing.JFrame.EXIT_ON_CLOSE );
frame.add( Main.this ); frame.pack(); frame.setVisible( true ); }

public static void main( final java.lang.String args[] )
{ java.awt.EventQueue.invokeLater( new Main() ); }}

Ein einfaches Rahmenwerk

Das folgende Beispielprogramm zeigt das Setzen eines Pixels eines Fensters. Diesmal war die Absicht eine möglichst übersichtliche Main -Klasse zu erhalten, in welcher die Methode »main« eine Staffelei der Klasse »Easel« einrichtet und eine Methode »plot« dann etwas in eine von dieser Staffelei bereitgestellte Zeichenfläche der Klasse »Canvas« schreibt.

Main.java

class Main implements Plotter
{

public static void main( final java.lang.String args[] )
{ new Easel( 200, 320 ).invokeLater( new Main() ); }

public void plot( final Canvas canvas )
{ canvas.setRGB( canvas.height()/2, canvas.width()/2, 0xFFFFFF ); }}

Nun müssen noch die drei verwendeten Referenztypen bereitgestellt werden.

Objekte der Klasse »Canvas« repräsentieren eine Zeichenfläche.

Canvas.java
class Canvas extends javax.swing.JComponent
{ private static final long serialVersionUID = 0L;
final java.awt.image.BufferedImage image;
final int Y; final int X;
public Canvas( final int Y, final int X )
{ this.Y = Y; this.X = X;
this.image = new java.awt.image.BufferedImage
( Canvas.this.X, Canvas.this.Y, java.awt.image.BufferedImage.TYPE_INT_RGB );
Canvas.this.setPreferredSize( new java.awt.Dimension( this.X, this.Y )); }
public int getRGB( final int y, final int x )
{ return Canvas.this.image.getRGB( x, y ); }
public void setRGB( final int y, final int x, final int color )
{ Canvas.this.image.setRGB( x, y, color ); }
public int width(){ return this.X; }
public int height(){ return this.Y; }
@java.lang.Override
public void paintComponent( final java.awt.Graphics graphics )
{ graphics.drawImage( Canvas.this.image, 0, 0, null ); }}

Exemplare der Klasse »Plotter« greifen auf eine ihnen bereitgestellte Zeichenfläche zu.

Plotter.java
interface Plotter{ public void plot( final Canvas canvas ); }

Objekte der Klasse »Easel« („Staffelei“) bauen ein Hauptfenster mit einer sichtbaren Zeichenfläche auf und rufen dann den ihnen übergebenen Plotter auf, damit dieser etwas in diese Fläche zeichnen kann.

Easel.java
class Easel implements java.lang.Runnable
{ Canvas canvas;
Plotter plotter;
final int height;
final int width;
public Easel( final int height, final int width )
{ this.height = height; this.width = width;
this.canvas = new Canvas( height, width ); }
public void invokeLater( final Plotter plotter )
{ Easel.this.plotter = plotter;
java.awt.EventQueue.invokeLater( Easel.this ); }
@java.lang.Override public final void run()
{ final javax.swing.JFrame frame = new javax.swing.JFrame( "Main" );
Easel.this.plotter.plot( Easel.this.canvas );
frame.setDefaultCloseOperation( javax.swing.JFrame.EXIT_ON_CLOSE );
frame.add( Easel.this.canvas ); frame.pack(); frame.setVisible( true ); }}

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722598 stefan_ram:722598 Plotten mit Swing Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722598, slrprddef722598, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/plotten-swing