Hilfreiche Ratschläge

Java GUI

Pin
Send
Share
Send
Send


Zu diesem Zeitpunkt wird das Raster keine besonderen Aufgaben ausführen. Wenn Sie jedoch ein bisschen experimentieren möchten, können Sie ActionListener-Listener und ein bisschen Logik hinzufügen, um ein einfaches 2D-Spiel wie Tic-Tac-Toe oder ein komplexeres wie Sea Battle zu erstellen.

Hinweis: In diesem Artikel wird Eclipse für alle Beispiele verwendet. Abhängig von Ihrer Verwendung kann es daher zu einigen Unterschieden kommen. Dies ist jedoch für solche Grafiken> praktisch unbrauchbar, da in dieser Umgebung die Drag-and-Drop-Methode (Ziehen und Ablegen von Objekten) verwendet wird.

  1. 1 Erstellen Sie ein Java-Projekt. Das ist ziemlich einfach. Starten Sie Ihre Entwicklungsumgebung und erstellen Sie ein neues Projekt. Rufen Sie ihn an, wie Sie es wünschen. In unserem Beispiel handelt es sich um ein Buttongrid.
    • Der Name spielt keine Rolle, da es sich lediglich um den Namen der Datei handelt.

2 Erstellen Sie eine Java-Klasse mit der Hauptmethode. Erstellen Sie eine neue Klasse und benennen Sie sie wie gewünscht. In unserem Beispiel ist dies ein Buttongrid. Eclipse-Benutzer klicken einfach auf das Feld "public static void main (string [] args)", d. H. Sie müssen es nicht selbst eingeben.

    Dieser Name ist wichtiger. als das vorherige, da es aus einem Wort bestehen sollte, sonst kann es nicht verwendet werden.

  • 3 Importieren Sie die Bibliotheken. Auf diese Weise haben Sie Zugriff auf alle Informationen, die Sie zum Schreiben Ihres Codes benötigen. Sie müssen javax.swing.JFrame, javax.swing.JButton und java.awt.Gr importieren.> Erstellen Sie einen Konstruktor. Der Konstruktor erstellt eine Instanz der buttongr-Klasse.> Erstellen Sie das Hauptfenster (Frame):
    1. Der Rahmen muss einen Namen haben. Damit es außerhalb des ButtonGr-Konstruktors referenziert werden kann>
    2. Im Konstruktor müssen wir sicherstellen, dass alle Schaltflächen im Raster platziert sind. Dazu müssen wir die Platzierung im Frame festlegen, indem wir Folgendes eingeben: frame.setLayout (neues GridLayout (x, y)),

    Nicht unbedingt erforderlich, aber damit sich das Hauptfenster schließt, wenn Sie auf die Schaltfläche "x" in der oberen rechten Ecke klicken, müssen Sie die folgende Zeile einfügen: frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE),

    Um den Frame auf die richtige Größe zu setzen und damit er alles Nötige enthält, müssen wir den Packbefehl ausführen: frame.pack (),

    Das Letzte, was Sie mit einem Frame machen müssen, ist, es sichtbar zu machen: frame.setVisible (true),

    6 Erstellen Sie ein Raster mit Schaltflächen:

      Wir müssen Schaltflächen erstellen, mit denen der Benutzer interagiert. Da wir jedoch nicht wissen, wie viele Schaltflächen wir benötigen, müssen wir sie nur zuerst deklarieren. Deklarieren Sie daher unmittelbar nach der Frame-Erstellungszeile die Schaltflächen: JButton [] [] grid. Zwei Paare eckiger Klammern bedeuten, dass die JButton-Instanzen im Raster im zweidimensionalen Format enthalten sind. Wenn es ein Paar Klammern gäbe, würde dies eine einfache Reihe von JButton-Schaltflächen bedeuten, die auch funktionieren. Es ist jedoch viel einfacher, auf die erstellte Schaltfläche zu verweisen oder mit der Schaltfläche zu interagieren, wenn sie als zweidimensionales Array deklariert sind.

    1. Wir haben die JButton-Schaltflächen angekündigt, aber nicht angegeben, wie viele davon. Im Konstruktor müssen Sie eine Codezeile hinzufügen, die diese Zahl festlegt: gr>
    2. Jetzt ist festgelegt, dass es eine bestimmte Anzahl von Schaltflächen gibt, und jede davon muss erstellt werden. Am einfachsten ist es, eine Doppelschleife entlang der x-Achse und die andere entlang der y-Achse zu verwenden. In dieser Doppelschleife erstellen wir eine neue Schaltfläche. Um den nachfolgenden Link in unserem Beispiel zu vereinfachen, platzieren wir Text in jede Schaltfläche, um zu erfahren, wo sich die einzelnen Schaltflächen des zweidimensionalen Arrays befinden. Um eine Schaltfläche innerhalb der Schleife zu erstellen, müssen wir gr) schreiben,

      Hacker # 183. Malware für Android

      AWT war Suns erster Versuch, eine grafische Oberfläche für Java zu erstellen. Sie gingen den einfachen Weg und erstellten einfach eine Java-Ebene, die Methoden aus in C geschriebenen Bibliotheken aufruft. Bibliotheksmethoden erstellen und verwenden grafische Komponenten der Betriebsumgebung. Dies ist zum einen gut, da ein Java-Programm anderen Programmen innerhalb dieses Betriebssystems ähnlich ist. Auf der anderen Seite gibt es jedoch keine Garantie dafür, dass Unterschiede in der Größe der Komponenten und in den Schriftarten das Erscheinungsbild des Programms nicht beeinträchtigen, wenn es auf einer anderen Plattform ausgeführt wird. Darüber hinaus war es zur Bereitstellung mehrerer Plattformen erforderlich, die Komponentenaufrufschnittstellen zu vereinheitlichen, wodurch sich herausstellte, dass ihre Funktionalität etwas eingeschränkt war. Und der Satz von Komponenten stellte sich als ziemlich klein heraus. Beispielsweise verfügt AWT über keine Tabellen und Schaltflächen unterstützen die Anzeige von Symbolen nicht.

      Verwendete Ressourcen AWT versucht, diese automatisch freizugeben. Dies verkompliziert die Architektur ein wenig und beeinträchtigt die Leistung. AWT zu beherrschen ist recht einfach, aber etwas Kompliziertes zu schreiben wird ein wenig schwierig sein. Jetzt wird es außer für Applets verwendet.

      Vorteile:

      • Teil des JDK,
      • Arbeitsgeschwindigkeit
      • Grafikkomponenten ähneln Standardkomponenten.

      Nachteile:

      • Die Verwendung nativer Komponenten schränkt die Verwendung ihrer Eigenschaften ein. Einige Komponenten funktionieren möglicherweise überhaupt nicht auf nicht nativen Plattformen.
      • Einige Funktionen wie Symbole und QuickInfos sind in AWT überhaupt nicht verfügbar.
      • Es gibt nur sehr wenige Standard-AWT-Komponenten, ein Programmierer muss viele benutzerdefinierte implementieren.
      • Das Programm sieht auf verschiedenen Plattformen unterschiedlich aus (kann schief sein).

      Fazit:

      Derzeit wird AWT äußerst selten verwendet - hauptsächlich in älteren Projekten und Applets. Oracle hat das Training aufgeräumt und den Wechsel zu Swing angeregt. Es ist verständlich, dass der direkte Zugriff auf die Achskomponenten zu einer ernsthaften Sicherheitslücke werden kann.

      Wie sieht Swing aus?

      Nach AWT entwickelte Sun eine Reihe von Grafikkomponenten mit dem Namen Swing. Swing-Komponenten sind vollständig in Java geschrieben. Beim Rendern wird 2D verwendet, was gleich mehrere Vorteile mit sich brachte. Der Satz an Standardkomponenten übertrifft AWT in Vielfalt und Funktionalität bei weitem. Es ist einfach geworden, neue Komponenten zu erstellen, von vorhandenen zu erben und alles zu zeichnen, was Ihr Herz begehrt. Unterstützung für verschiedene Stile und Skins ist möglich geworden. Die Geschwindigkeit der ersten Swing-Versionen ließ jedoch zu wünschen übrig. Ein falsch geschriebenes Programm kann Windows vollständig zum Erliegen bringen.

      Aufgrund der einfachen Bedienung, der umfangreichen Dokumentation und der Flexibilität seiner Komponenten ist Swing jedoch möglicherweise das beliebteste Grafik-Framework in Java. Zahlreiche Erweiterungen wie SwingX oder JGoodies sind auf der Basis des Programms erschienen. Sie vereinfachen die Erstellung komplexer Benutzeroberflächen erheblich. Fast alle gängigen Java-Programmierumgebungen enthalten Grafikeditoren für Swing-Formulare. Daher ist es nicht schwierig, Swing zu verstehen und zu verwenden.

      Vorteile:

      • Teil des JDK, keine Notwendigkeit, zusätzliche Bibliotheken zu installieren,
      • Swing hat viel mehr Bücher und Antworten in den Foren. Alle Probleme, insbesondere für Anfänger, sind bei Google genau bekannt.
      • eingebauter Formulareditor in fast allen Entwicklungsumgebungen,
      • basierend auf Swing gibt es viele Erweiterungen wie SwingX,
      • Unterstützung für verschiedene Stile (Look and Feel).

      Nachteile:

      • ein Fenster mit vielen Bauteilen verlangsamt sich,
      • Die Arbeit mit Layout-Managern kann in komplexen Oberflächen ein wahrer Albtraum sein.

      Fazit:

      Swing gelebt, Swing lebendig, Swing wird leben. Obwohl Oracle versucht, JavaFX zu promoten, ist Swing das mit Abstand beliebteste Java-Framework für Benutzeroberflächen.

      SWT: Wetter Widget

      Um die Funktionen der gängigsten Grafikbibliotheken und die Grundprinzipien ihrer Arbeit zu demonstrieren, werden mehrere kleine Widgets erstellt, die verschiedene Informationen anzeigen.

      Und fangen wir vielleicht mit dem beliebtesten Widget an - der Anzeige des aktuellen Wetters, für dessen Implementierung wir SWT wählen.

      Jedes SWT-Programm beginnt mit dem Erstellen eines Anzeigeobjekts. Es dient als eine Art Anwendungskontext, der die erforderlichen Methoden für den Zugriff auf Systemressourcen enthält und eine Ereignisschleife bereitstellt. Der nächste Schritt besteht darin, ein ebenso wichtiges Shell-Objekt zu erstellen. Shell ist ein normales Betriebssystemfenster. Die Anzeige wird an den Shell-Konstruktor übergeben, um ein Fenster der obersten Ebene zu erstellen.

      Da wir ein Widget erstellen, müssen wir nicht den Standardfensterrahmen und die Steuerungsschaltflächen anzeigen, sondern haben das NO_TRIM-Flag angegeben. Als Hintergrund verwenden wir das Bild - ein abgerundetes Rechteck. Grundsätzlich kann ein SWT-Fenster jede Form annehmen. Um diesen Effekt zu erzielen, verwenden wir die Region-Klasse. Alles, was benötigt wird, ist, dieser Klasse alle sichtbaren Punkte aus dem Hintergrundbild hinzuzufügen und transparente zu überspringen.

      In Bildern mit unterschiedlichen Formaten wird die Transparenz unterschiedlich eingestellt, daher werden Informationen zu transparenten Bereichen auch nicht auf die gleiche Weise extrahiert. Erstellen Sie einen Hintergrundbereich und fügen Sie dort alle sichtbaren Punkte hinzu:

      Stellen Sie die Fensterform ein:

      Jetzt müssen Sie einen Ereignis-Listener für das Fenster erstellen. Wir werden uns für Fensterzeichenereignisse, Mausereignisse und Tastenanschläge interessieren, damit das Fenster über den Bildschirm bewegt werden kann.

      Durch Drücken der Esc-Taste wird das Fenster geschlossen. Wenn Sie mit der linken Maustaste auf den Fensterbereich klicken, merken Sie sich die Koordinaten des Klicks. Wenn sich die Maus mit gedrückter linker Taste bewegt, bewegen wir das Fenster auf dem Bildschirm entsprechend der Bewegung. Bei einem Neuzeichnungsereignis zeichnen wir ein Hintergrundbild im GC-Grafikkontext.

      Ordnen Sie den Listener den entsprechenden Fensterereignissen zu:

      Stellen Sie die Fenstergröße auf die Bildgröße ein:

      Öffne das Fenster und starte die Event-Schleife:

      Vergessen Sie nicht, am Ende verbrauchte Ressourcen freizugeben:

      Wenn Sie das Programm zu diesem Zeitpunkt starten, erhalten Sie ein Rechteck, das Sie mit der Maus verschieben und mit Esc schließen können.

      Es ist Zeit, Inhalte hinzuzufügen. Wir zeigen das aktuelle Wetter in Form eines Statussymbols (sonnig, Regen, Schnee ...), Temperaturmesswerten und der Uhrzeit der letzten Aktualisierung an.

      Mit Layout-Managern werden Grafikkomponenten in einem Fenster in der gewünschten Form positioniert. Der Layout-Manager befasst sich nicht nur mit der Anordnung von Komponenten, sondern auch mit deren Größenänderung beim Ändern der Größe eines Fensters. Für unser Widget verwenden wir GridLayout. Dieser Manager ordnet Komponenten in Zellen einer imaginären Tabelle an. Erstellen Sie ein GridBagLayout für zwei Spalten mit unterschiedlichen Spaltenbreiten (falsches Flag im Konstruktor), und legen Sie es als Fensterlayout-Manager fest:

      Für das Statusbild verwenden wir die Label-Komponente. Wir übergeben das Fensterobjekt als übergeordnetes Objekt. Mit dem zweiten Parameter können Sie den Stil der Komponente festlegen. Für jede Komponente ist der Satz möglicher Stilflags unterschiedlich. Sie können sie in der Dokumentation oder direkt in der Komponentenquelle sehen.

      Flags in der GridData-Klasse bedeuten, dass sich die Beschriftung oben links befindet, horizontal und vertikal gestreckt wird (Flags auf true gesetzt), wenn freier Speicherplatz vorhanden ist und eine Zeile und eine Spalte der Layouttabelle belegt.

      Es gibt keinen transparenten Hintergrund für Komponenten in SWT und ein weißer Hintergrund wird hinter dem Statusbild sichtbar, was natürlich nicht wünschenswert wäre. Erstellen Sie daher ein Color-Objekt mit der Hintergrundfarbe des Fensters:

      Am Ende des Programms muss dieses Objekt auch durch Aufrufen der dispose-Methode gelöscht werden. Stellen Sie die Hintergrundfarbe und das Statusbild ein, die aus der Datei heruntergeladen werden können, so wie wir das Hintergrundbild zu Beginn heruntergeladen haben:

      Fügen Sie nun ein Label mit der aktuellen Temperatur hinzu und platzieren Sie es im oberen rechten Teil des Fensters:

      Stellen Sie eine Temperatur ein:

      Zur Erfassung der Temperatur in Celsius wird die Unicode-Nummer des entsprechenden Symbols mit den Service-Zeichen u0026 verwendet.

      Die Standardschriftart für Textbeschriftungen ist zu klein. Also lasst uns ein neues, größeres erstellen:

      FontData [] fD = temperatureLabel.getFont (). GetFontData (), fD.setHeight (30), fD.setStyle (SWT.BOLD), Font newFont = new Font (Anzeige, fD), temperatureLabel.setFont (newFont), Font Wie bei anderen Ressourcenobjekten müssen Sie free. Verwenden Sie dazu den Listener für Labelzerstörungsereignisse:

      Fügen Sie abschließend ein Etikett mit einer Beschreibung der Wetterbedingungen hinzu:

      Der Text kann sehr lang sein. Geben Sie daher beim Erstellen eines Etiketts das WRAP-Flag an, damit der Text automatisch in mehrere Zeilen aufgeteilt wird, wenn nicht genügend Platz vorhanden ist. Zentrieren Sie die Komponente und lassen Sie sie den gesamten horizontalen Raum ausfüllen. Wir zeigen auch an, dass die Komponente zwei Spalten der Layout-Tabelle belegt. Wir starten und erhalten ein Fenster aus dem Wetter Widget Bild.

      Wetter Widget

      Jetzt können Sie einen Wetterdienst reparieren, einen Timer für die automatische Aktualisierung erstellen - und das Widget ist bereit.

      Schaukel, AWT & SWT

      29. Januar 2012, 21:44 Uhr

      Es gibt ein Code-Snippet:

      Hilfe beim Implementieren des Cursors über der Zelle.
      Beispiel:

      29. Januar 2012, 21:54 Uhr

      Es gibt ein Code-Snippet:

      Hilfe beim Implementieren des Cursors über der Zelle.
      Beispiel:

      Vererben Sie Ihre Klasse von der Component-Klasse und lesen Sie mehr über Mouse [Motion] Listener:

      29. Januar 2012, 22:44 Uhr

      Entschuldigung, aus dem Englischen. nicht wirklich bei mir.
      Soweit ich es verstanden habe, funktioniert es aus irgendeinem Grund nicht = (

      Irgendwo am oberen Rand des Fensters funktioniert es, es ist nicht klar.

      29. Januar 2012 22:54 Uhr

      Entschuldigung, aus dem Englischen. nicht wirklich bei mir.
      Soweit ich es verstanden habe, funktioniert es aus irgendeinem Grund nicht = (

      Irgendwo am oberen Rand des Fensters funktioniert es, es ist nicht klar.

      29. Januar 2012, 23:32 Uhr

      Ich entschuldige mich für die Wichtigkeit.

      Was versuche ich eigentlich zu erreichen:
      1. Erstellen Sie ein Raster.
      2. Wenn Sie auf eine der Zellen klicken, ändern Sie deren Farbe.

      Folgendes habe ich:

      Könnten Sie auf die Mängel hinweisen?

      Bisher habe ich in "Actionscript" geschrieben, für das vieles nicht klar ist.
      Sorry nochmal und danke für die Hilfe.

      30. Januar 2012, 07:19 Uhr

      Probieren Sie JTable oder GridLayout.
      Es ist wahrscheinlich auch besser, einen Listener und Handler in der übergeordneten Komponente zu platzieren, der das Zellenobjekt anhand der Koordinaten des Klicks empfängt und seine Farbe ändert.

      30. Januar 2012, 08:19 Uhr

      Vielen Dank, dass ich das getan habe (indem ich eine Reihe von Videos von YouTube überprüft habe).
      Hier ist das Ergebnis:

      Aber dann wurde ein neues Problem geboren = (

      Wenn ich einen JFrame mit einer Größe (zum Beispiel) von 700 x 500 Pixel erstelle, stellt sich heraus, dass rechts neben dem erstellten Netz eine Einzugsbreite von 200 Pixel vorhanden ist, d. H. Freier, unbenutzter Bereich.
      Die Frage ist: - Warum reagieren Mausempfänger weiterhin, wenn sich der Mauszeiger außerhalb des Rasters befindet?
      Ich möchte nur verstehen, wie JPanel funktioniert und ob ich es überhaupt verwenden soll.

      Noch ein unverständlicher Moment:
      Es gibt einen JFrame 500x500px. Ich füge das 2. "JPanel" hinzu - und.
      Es ist logisch, dass einer von ihnen unter dem anderen liegt, aber hier erfahren Sie, wie Sie die Breite für sie festlegen und verschieben.
      Ich kann die Antwort nicht finden, d. H. Ich habe Beispiele gesehen, aber alles um mich herum stimmt nicht mit meinen Händen.

      Nochmals vielen Dank für Ihre Hilfe.

      30. Januar 2012, 10:07 Uhr

      Wenn ich einen JFrame mit einer Größe (zum Beispiel) von 700 x 500 Pixel erstelle, stellt sich heraus, dass rechts neben dem erstellten Netz eine Einzugsbreite von 200 Pixel vorhanden ist, d. H. Freier, unbenutzter Bereich.
      Die Frage ist: - Warum reagieren Mausempfänger weiterhin, wenn sich der Mauszeiger außerhalb des Rasters befindet?
      Ich möchte nur verstehen, wie JPanel funktioniert und ob ich es überhaupt verwenden soll.

      Noch ein unverständlicher Moment:
      Es gibt einen JFrame 500x500px. Ich füge das 2. "JPanel" hinzu - und.
      Es ist logisch, dass einer von ihnen unter dem anderen liegt, aber hier erfahren Sie, wie Sie die Breite für sie festlegen und verschieben.
      Ich kann die Antwort nicht finden, d. H. Ich habe Beispiele gesehen, aber alles um mich herum stimmt nicht mit meinen Händen.

      Sehen Sie sich das Video an: JAVA Grundkurs #7 - GUI Grafische Benutzeroberfläche Tutorial (Oktober 2021).

      Pin
      Send
      Share
      Send
      Send