Java beginnend mit JShell-A Einblick in die Java-Welt

Erste Schritte mit Java mit JShell-A Einblick in die Java-Welt

Beginnen wir mit Java mit JShell.

Zweck

Eine Person, die keine Erfahrung in der Programmierung hat, versteht verschiedene Konzepte, die in der Java-Programmierung auftreten.

Umgebungseinstellung

Zunächst aus den Umgebungseinstellungen. Laden Sie das JDK hier herunter. http://jdk.java.net/14/

Wenn Sie neu in der Befehlszeile sind, möchten Sie das Paket möglicherweise mit dem Installationsprogramm mit AdoptOpenJDK verwenden. https://adoptopenjdk.net/?variant=openjdk14&jvmVariant=hotspot Laden Sie für Mac- und Linux-Benutzer tar.gz herunter

$ tar xf openjdk-14.0.2_osx-x64_bin.tar.gz

Ich denke es ist okay. Installieren Sie zip unter Windows und entpacken Sie es in den entsprechenden Ordner.

Starten Sie JShell

Beginnen wir mit JShell. Öffnen Sie "Eingabeaufforderung" für Windows-Benutzer und "Terminal" für Mac- und Linux-Benutzer.

$ jshell

Zum Glück ein Glück

Übrigens ist "$ jshell" eine Notation, dass Sie "jshell" in eine solche Befehlszeile eingeben und die [Eingabetaste] drücken sollten.

Wenn es nicht gestartet wird, starten Sie "\ Programme \ Java \ jdk-11 \ bin \ jshell" für Windows. Wenn Sie ungefähr \ Prog eingeben und [Tab] drücken, ist der Vorgang abgeschlossen.

image.png

Geben Sie als Test "12 + 23" ein und drücken Sie die [Eingabetaste]. Das Ergebnis ist "35". image.png

Wenn Sie etwas in JShell eingeben und die [Eingabetaste] drücken, interpretiert JShell diese Eingabe als Java-Code und führt sie aus. Dieses Mal habe ich nur eine Berechnung eingegeben, aber sie wird auch Teil des Java-Programms sein. Das erste Java-Programm ist also "12 + 23". Du hast es geschafft!

Im Folgenden werden die Eingabe in jshell und das Ergebnis wie folgt ausgedrückt.

jshell> 12 + 23
$1 ==> 35

Dies bedeutet, dass Sie in JShell "12 + 23" eingeben und die [Eingabetaste] drücken können. Daraufhin wird "35" angezeigt. Ignorieren Sie vorerst den Teil $ 1 ==>.

Werte behandeln

Berechnung

Ich habe den Zusatz früher gemacht. Was ist also mit Subtraktion? Versuchen Sie "4-3".

jshell> 4 - 3
$2 ==> 1

Verwenden Sie "*" für die Multiplikation und "/" für die Division. Sie können den Rest der Division auch mit% berechnen.

jshell> 8 * 2
$3 ==> 16

jshell> 8 / 2
$4 ==> 4

jshell> 7 % 5
$5 ==> 2

Wie wäre es mit 3 + 4 * 2?

jshell> 3 + 4 * 2
$6 ==> 11

Die Multiplikation wird zuerst berechnet. Wenn Sie "3 + 4" in Klammern setzen, wird die Addition zuerst berechnet.

jshell> (3 + 4) * 2
$7 ==> 14

Verschiedene Arten

Übrigens, was ist mit "22/7"?

jshell> 22 / 7
$8 ==> 3

Es wird als Ganzzahl berechnet. Wenn Sie das Ergebnis nach dem Dezimalpunkt haben möchten, dh wenn Sie es als reelle Zahl berechnen möchten, verwenden Sie "22.0 / 7".

jshell> 22.0 / 7
$9 ==> 3.142857142857143

Wenn Sie einen Dezimalpunkt hinzufügen, wird dieser als reelle Zahl behandelt. Wenn einer der Operationsterms eine reelle Zahl ist, wird die Berechnung als reelle Zahl durchgeführt. Auf diese Weise unterscheidet Java zwischen ganzen Zahlen und reellen Zahlen.

Zeichenfolgen und Methoden

Bisher haben wir uns mit numerischen Werten befasst. Programme befassen sich häufig mit einer Reihe von Zeichen wie Wörtern und Sätzen. In der Welt der Programmierung wird eine solche Reihe von Zeichen als Zeichenkette bezeichnet. In Java wird es in "" (doppelte Anführungszeichen) eingeschlossen, um eine Zeichenfolge darzustellen.

jshell> "aaa"
$10 ==> "aaa"

Verwenden Sie den Operator "+", um Zeichenfolgen zu verketten.

jshell> "te" + "st"
$11 ==> "test"

Was ist mit der Subtraktion? Es wäre praktisch, wenn Sie "te" mit "test" - "st" bekommen könnten.

jshell> "test" - "st"
|Error:
|Binäroperator'-'Der Operandentyp von ist ungültig
|Erster Typ: java.lang.String
|Zweiter Typ: java.lang.String
|  "test" - "st"
|  ^-----------^

Ich habe einen Fehler bekommen. Hier ist der Operand der Begriff des Operators. Es heißt, dass Sie im Operator - keine Zeichenfolgen verwenden können. Es wäre schön, diese Fehlermeldungen richtig lesen zu können, aber an dieser Stelle ist es in Ordnung zu erkennen, dass Sie keine Zeichenfolgen für den Operator - verwenden können. Nur der Operator + kann als Operator für Zeichenfolgen verwendet werden.

Methode

Sie möchten verschiedene Operationen an der Zeichenfolge ausführen. Zählen wir zum Beispiel die Anzahl der Zeichen. Versuchen Sie, "test" .length () "einzugeben. Wenn Sie bis zu "len" eingeben und die [Tab] -Taste drücken, können Sie die Fortsetzung eingeben. Diese Funktionen werden als "komplementär" bezeichnet.

jshell> "test".length()
$12 ==> 4

Du hast 4 Diese length () wird als Methode bezeichnet. Es gibt viele solcher Methoden für Zeichenfolgen, die Operationen an Zeichenfolgen ausführen. Durch Drücken der [Tab] -Taste auf "Test" wird eine Liste der Methoden angezeigt, die für die Zeichenfolge aufgerufen werden können. image.png

Methode Verwendung
length () Liefert die Länge eines Strings
Wiederholen (n) Wiederholen Sie die Zeichenfolge n-mal
ersetzen (alt, neu) Ersetzen Sie alt in einer Zeichenfolge durch neu
charAt (index) Extrahiert das Indexzeichen
Teilzeichenfolge (Anfang, Ende) Vom Anfang bis zum Ende der Zeichenfolge extrahieren
toUpperCase () Zeichenfolge großschreiben
toLowerCase () Verringern Sie die Zeichenfolge

Verwenden wir jetzt auch andere Methoden. Lassen Sie uns "test" ausführen. Wiederholen Sie (3).

jshell> "test".repeat(3)
$13 ==> "testtesttest"

Sie sehen eine Zeichenfolge, die "Test" dreimal wiederholt. Die Wiederholungsmethode ist eine Methode, die eine Zeichenfolge eine bestimmte Anzahl von Malen wiederholt. Wie Sie sehen, müssen Sie manchmal etwas für eine Methode angeben. Der für eine solche Methode angegebene Wert heißt "Argument". Verwenden wir eine andere Ersetzungsmethode. Versuchen Sie, "test" .replace ("st", "") "auszuführen.

Mit der charAt -Methode können Sie das Zeichen an der angegebenen Stelle abrufen.

jshell> "test".charAt(2)
$13 ==> 's'

Beachten Sie, dass das erste Zeichen das 0 ist. In den meisten Programmen ist 0 das erste Element und 1 das zweite Element.

jshell> "test".replace("st","")
$14 ==> "te"

Die replace -Methode ist eine Methode, die eine Zeichenfolge ersetzt und die Zeichenfolge vor dem Ersetzen und die Zeichenfolge nach dem Ersetzen als Argumente verwendet. Wenn Sie zwei oder mehr Argumente wie dieses verwenden, trennen Sie die Argumente durch ,. " " Wird als leere Zeichenfolge bezeichnet. Indem Sie "st" durch "" "" ersetzen, haben Sie "st" in der Zeichenfolge weggelassen.

Sie können auch Methodenaufrufe verketten.

jshell> "test".repeat(3).replace("st","")
$15 ==> "tetete"

Der "Test" wird dreimal wiederholt, um der "Test Test Test" zu werden, und der "st" wird weggelassen, um der "Tetete" zu werden.

Übung: Verwenden Sie die Methode "Wiederholen", um eine Zeichenfolge zu erstellen, die "Hallo" viermal wiederholt Übung: Verwenden Sie die Methode "Ersetzen", um eine Zeichenfolge zu erstellen, die "p" in "Traube" durch "d" ersetzt. Übung: Verwenden Sie die Methode "toLowerCase", um "HALLO" zu senken Übung: Verwenden Sie die Methode "Teilzeichenfolge", um eine Zeichenfolge zu erstellen, die aus der ersten (zweiten im täglichen Gespräch) von "Minute" extrahiert wird.

JShell-Operation

Grundsätzlich wird durch Drücken der Aufwärts-Taste das aufgerufen, was Sie zuvor eingegeben haben. Es kann verwendet werden, wenn Sie die zuvor eingegebenen Daten erneut ausführen möchten.

Wenn in JShell festgestellt werden kann, dass die Taste beim Drücken der [Enter] -Taste eingegeben wird, wird der Ausdruck ausgeführt. Wenn die Zeile jedoch zur Hälfte endet, z. B. wenn ein Zeilenumbruch in der Mitte auftritt oder wenn nicht genügend Klammern vorhanden sind, werden Sie aufgefordert, die Eingabe wie folgt fortzusetzen.

jshell> "test".repeat(
   ...>

Es ist schön, wenn Sie eine neue Zeile beginnen, wenn Sie eine lange Zeile eingeben. Wenn Sie jedoch glauben, dass Sie eine Zeile eingegeben haben, die Zeile jedoch aufgrund fehlender Klammern nicht fertig ist, ist es mühsam, den Fehler zu finden, und Sie sollten ihn erneut eingeben. Manchmal ist es früh. In diesem Fall können Sie den Vorgang abbrechen, indem Sie [Strg] + [c] drücken.

Verwenden Sie den Befehl / exit, um JShell zu beenden.

jshell> /exit
|Fertig

$

Variable

Da dieser Wert nahe am Umfangsverhältnis liegt, möchte ich übrigens verschiedene Werte anstelle des Umfangsverhältnisses verwenden. Es ist jedoch schwierig, "22.0 / 7" einzeln einzugeben. Es ist also eine Variable. Variablen können durch Setzen von "var variable name = value" definiert werden.

jshell> var pi = 22.0 / 7
pi ==> 3.142857142857143

Dies definiert eine Variable namens "pi" und weist ihr den Wert "3.142857142857143" zu. Geben Sie einfach pi ein und Sie sehen den zugewiesenen Wert.

jshell> pi
pi ==> 3.142857142857143

Verwenden wir dies, um den Umfang eines Kreises mit einem Radius von 5 zu ermitteln. Die Länge des Umfangs war das Verhältnis von Durchmesser zu Umfang. Variablen können in Operationen als Werte verwendet werden.

jshell> 5*2*pi
$16 ==> 31.428571428571427

Die Fläche war Radius x Radius x Umfang.

jshell> 5*5*pi
$17 ==> 78.57142857142857

Auf diese Weise konnten wir Variablen verwenden, um Werte zu recyceln. Übrigens, als die Variable pi an der Position von "$ 17" definiert wurde, wurde sie als "pi" angezeigt. Mit anderen Worten bedeutet dies, dass Sie der Variablen "$ 17" "78.57142857142857" zugewiesen haben.

jshell> $17
$17 ==> 78.57142857142857

Übrigens hat Math.PI in Java tatsächlich ein sehr genaues Umfangsverhältnis.

jshell> Math.PI
$82 ==> 3.141592653589793

Es ist das "PI" -Feld der "Math" -Klasse, aber lassen Sie es uns im Detail studieren.

Unter Verwendung dieses Wertes als Umfangsverhältnis beträgt die Fläche eines Kreises mit einem Radius von 5:

jshell> 5*5*Math.PI
$81 ==> 78.53981633974483

Weisen wir dieses Math.PI der Variablen pi zu.

jshell> pi=Math.PI
pi ==> 3.141592653589793

Auf diese Weise können Sie Variablen auch Werte neu zuweisen. Als ich erneut "5 * 5 * pi" berechnete, erhielt ich das gleiche Ergebnis wie bei Verwendung von "Math.PI" wie folgt.

jshell> 5*5*pi
$84 ==> 78.53981633974483

Variablentyp

Weisen wir der Variablen pi eine Zeichenkette zu.

jshell> pi="circle ratio"
|Error:
|Inkompatibler Typ: java.lang.String kann nicht in double konvertiert werden:
|  pi="circle ratio"
|     ^------------^

Ich habe einen Fehler bekommen. Ihnen wird gesagt, dass "String nicht in double konvertiert werden kann". Java-Variablen bestimmen, welcher Wert der Variablen zugewiesen werden kann. Ein solcher Wertetyp wird als "Typ" bezeichnet. Mit anderen Worten, Variablen sind von einem festen Typ. Lassen Sie uns nun den Typ der Variablen überprüfen. In JShell können Sie den Typ einer Variablen mit dem Befehl / var überprüfen.

jshell> /var pi
|    double pi = 3.141592653589793

Dies bedeutet, dass die Variable "pi" vom Typ "double" ist und den Wert "3.141592653589793" erhält. double ist der Typ, der reelle Zahlen verarbeitet.

Schauen wir uns den Fall der Zeichenfolgen an. Bereiten Sie zunächst die Variable str vor, der die Zeichenkette" circle " zugewiesen ist.

jshell> var str="circle"
str ==> "circle"

Überprüfen wir den Typ mit dem Befehl / var.

jshell> /var str
|    String str = "circle"

Es hat eine Art "String". Die Zeichenfolge wird durch den Typ "Zeichenfolge" dargestellt. Der Versuch, eine reelle Nummer zuzuweisen, führt zu einem Fehler.

jshell> str=3.14
|Error:
|Inkompatibler Typ:Doppel Java.lang.Kann nicht in String konvertiert werden:
|  str=3.14
|      ^--

Bisher haben wir Variablen mit var vorbereitet. Wenn Sie "var" verwenden, wird der Variablentyp automatisch festgelegt. Hier können Sie auch einen Typ angeben, um eine Variable vorzubereiten.

jshell> String message="hello"
message ==> "hello"

Sie können auch Methoden für solche Variablen aufrufen.

jshell> message.length()
$325 ==> 5

Die Methoden, die aufgerufen werden können, werden vom Typ bestimmt. Die Methode "Länge" und die Methode "Wiederholung" sind Methoden, die für den Typ "String" vorbereitet wurden. Es gibt keine Methode, die für den Typ "double" aufgerufen werden kann.

Sie können den von der Methode zurückgegebenen Wert auch einer Variablen zuweisen.

jshell> var count=message.length()
count ==> 5

Hier ist die Variable count vom Typ int.

jshell> /var count
|    int count = 5

Der Typ "int" ist ein Typ, der Ganzzahlen verarbeitet.

Übung: Verwenden Sie var, um eine Variable root2 mit einer reellen Zahl 1.414 vorzubereiten. Übung: Anstatt "var" zu verwenden, bereiten wir ein variables "Wort" vor, dem die Zeichenfolge "apple" zugewiesen ist. Übung: Rufen wir die Methode "toUpperCase" für das oben vorbereitete "Wort" auf.

Methodendefinition

Ich konnte Variablen verwenden, um Werte zu recyceln, aber es wäre schön, Ausdrücke wie Radius x Radius x Umfang recyceln zu können. In Java können Sie Ausdrücke wiederverwenden, indem Sie Methoden definieren.

Es ist ein bisschen lang, aber versuchen Sie, double menseki (double r) {return r * r * pi;} auszuführen.

jshell> double menseki(double r){return r*r*pi;}
|Erstellt das Folgende:Methode menseki(double)

Die menseki Methode ist jetzt definiert. Sie können es wie folgt verwenden.

jshell> menseki(5)
$34 ==> 78.53981633974483

jshell> menseki(3)
$33 ==> 28.274333882308138

Jetzt können Sie die Formel wiederverwenden.

Schauen wir uns die Methodendefinition genauer an. Wenn Sie die Methodendefinition entsprechend brechen, ist dies wie folgt.

double menseki(double r) {
  return r*r*pi;
}

Die Definition lautet wie folgt:

Ergebnistyp Methodenname(Argumenttyp Variable, die Argumente verarbeitet) {
Ausdruck zurückgeben;
}

Der Typ ist der Werttyp, und in denjenigen, die bisher erschienen sind, ist die Ganzzahl "int", die reelle Zahl ist "double" und die Zeichenfolge ist "String". Dieses Mal haben wir eine Methode namens "menseki" definiert, die eine reelle Zahl nimmt und diese zurückgibt. Ich versuche, das empfangene Argument mit "r" zu erhalten. Das r des Radius. Verwenden Sie die Anweisung return, um einen Wert zurückzugeben. Hier wird der empfangene Radius zweimal multipliziert und mit dem Umfangsverhältnis multipliziert zurückgegeben.

Sie können es auch mit einem Zeilenumbruch in JShell wie folgt definieren:

jshell> double menseki(double r) {
   ...>   return r*r*pi;
   ...> }
|Folgendes geändert:Methode menseki(double)

Übung: Der Name des Arguments muss nicht "r" sein. Versuchen Sie als menseki2, eine Methode mit derselben Funktion zu definieren, damit das Argument von a empfangen wird. Übung: Versuchen Sie, eine Methode zu definieren, die einen Radius annimmt und die Länge des Umfangs zurückgibt.

Swing

War es nicht langweilig, nur Briefe zu schreiben? Machen wir also etwas, das nicht nur aus Buchstaben besteht. Fenster anzeigen. In Java wird standardmäßig ein GUI-Toolkit namens Swing bereitgestellt. Ein GUI-Toolkit besteht aus einer Reihe von Teilen, die Fenster anzeigen und Schaltflächen anordnen.

Schaufenster

Bereiten Sie zuerst ein Fenster vor.

jshell> var f = new javax.swing.JFrame("test")
f ==> javax.swing.JFrame[fram ... bled=true]

Ich bin nicht sicher, aber der Variablen f wurde etwas zugewiesen. Versuchen Sie als Antwort, die Methode show () aufzurufen.

jshell> f.show()

Oben links wurde etwas angezeigt. image.png Es ist klein, also versuchen Sie, die Größe zu erhöhen. Verwenden Sie die setSize -Methode, um die Größe zu bestimmen. Geben Sie hier die horizontale und die vertikale Größe an.

jshell> f.setSize(400,300)

Ich bin erwachsen geworden! image.png

Klassen und Objekte

Bei der Vorbereitung eines Fensters var f = new javax.swing.JFrame("test") Wurde ausgeführt. In Java werden Objekte, die von Programmen wie Fenstern und Schaltflächen verarbeitet werden, als "Objekte" vorbereitet. Hier wird der Variablen f ein Fensterobjekt zugeordnet. In Swing werden Fenster durch den Typ "javax.swing.JFrame" dargestellt. Objekte werden basierend auf einem bestimmten Typ erstellt. Der Typ, auf dem ein Objekt basiert, wird als "Klasse" bezeichnet. javax.swing.JFrame ist eine Klasse. Wenn Sie ein Objekt aus einer Klasse erstellen, verwenden Sie den Operator "new", um es als "new class (argument)" zu erstellen. Die Argumente werden von der Klasse bestimmt. Aus einigen Perspektiven sieht es so aus, als würden Sie beim Erstellen eines Objekts eine spezielle Methode mit dem Operator "new" aufrufen. Bei dieser Betrachtung wird diese Methode als "Konstruktor" bezeichnet. Ein Konstruktor ist eine Methode, die denselben Namen wie eine Klasse hat und deren Aufruf der Operator "new" erfordert.

JavaDoc Die Dokumentation zu diesem javax.swing.JFrame finden Sie hier. https://download.java.net/java/early_access/jdk11/docs/api/java.desktop/javax/swing/JFrame.html

Es ist Englisch. Wenn Sie Japanisch mögen, ist die Version alt, aber hier. https://docs.oracle.com/javase/jp/10/docs/api/javax/swing/JFrame.html

Das Format dieses Dokuments heißt "JavaDoc". Die Java-API-Dokumentation hat im Allgemeinen dieses Format.

Wenn Sie mit javadoc + Klassennamen wie "javadoc JFrame" umgehen, wird JavaDoc herauskommen.

Der diesmal verwendete Konstruktor hat beispielsweise die folgende Erklärung. スクリーンショット 2018-06-11 19.54.59.png

Wenn Sie sich das ansehen, können Sie sehen, dass wir diesmal einen Konstruktor namens "JFrame (String title)" verwendet haben. Wir haben auch einen Konstruktor ohne Argumente, sodass Sie sehen können, dass Sie ein Fenster erstellen können, ohne einen Titel anzugeben. Möglicherweise wissen Sie dies nicht, ohne die Java-Sprache ein wenig mehr zu lernen, aber das Überprüfen des JavaDoc kann Ihnen helfen, zu verstehen, was Sie getan haben. Im Allgemeinen wird im Handbuch nicht alles erklärt, daher ist es wichtig, auf solche primären Informationen zu verweisen und sie genau zu erfassen.

Übung: Lassen Sie uns die bisher mit JavaDoc verwendete String-Ersetzungsmethode untersuchen. Tipp: Es ist praktisch, im Suchfeld oben rechts zu suchen.

Paket und Import

Nachdem das Fenster sichtbar ist, platzieren wir den Textbereich. Der Textbereich ist ein Teil, in den Sie eine mehrzeilige Zeichenfolge eingeben können. In Swing wird der Textbereich von der Klasse "javax.swing.JTextArea" behandelt. Die auf diese Weise im Fenster platzierten Teile werden als "Komponenten" bezeichnet. Um den Textbereich zu platzieren, müssen Sie zunächst ein Objekt für den Textbereich erstellen. Um ein Objekt zu erstellen, haben Sie eine Methode mit demselben Namen wie der Klassenname aufgerufen, dh den Konstruktor mit dem Operator "new". Die Eingabe von "javax.swing.JTextArea" ist jedoch lang und umständlich. Tatsächlich ist javax.swing.JTextArea in zwei Teile unterteilt, nur das letzte Trennzeichen ist der Klassenname und davor der Paketname. Mit anderen Worten, es repräsentiert die "JTextArea" -Klasse des Pakets "javax.swing". Ein "Paket" ist ein Mechanismus zum Klassifizieren von Java-Klassen.

Daher können Sie die Anweisung "import" verwenden, um den Paketnamen wegzulassen. Mit import javax.swing. * Kann die Klasse des javax.swing -Pakets nur durch den Klassennamen ohne den Paketnamen dargestellt werden.

jshell> import javax.swing.*

Ich habe es bis jetzt ignoriert, aber manchmal wurde der Typ "String" als "java.lang.String" angezeigt. Der Typ "String" war im Paket "java.lang" enthalten, und das Paket "java.lang" konnte den Paketnamen weglassen, da "import" im Voraus durchgeführt wurde.

Erstellen wir nun ein Objekt der Klasse "JTextArea", das den Textbereich darstellt.

jshell> var textarea = new JTextArea()
textarea ==> javax.swing.JTextArea[,0,0,0x0,i ... rap=false]

Sie müssen dies im Fenster platzieren. Sie können es einem Fenster hinzufügen, indem Sie die Methode "add" für das Objekt "JFrame" aufrufen, das das Fenster darstellt.

jshell> f.add(textarea)
$14 ==> javax.swing.JTextArea[,0,0,0x0,inval ... se,wrap=false]

Es wird jedoch nicht so wie es ist im Fenster angezeigt, daher muss das Fenster neu organisiert werden. Wenn Sie die Größe des Fensters ändern, wird es neu organisiert. Ziehen Sie also den Rand des Fensters, um die Größe zu ändern, oder rufen Sie die Methode "setSize" auf. Wenn die Fenstergröße nicht geändert wird, wenn Sie die Größe mit der Methode "setSize" angeben, geschieht nichts, sodass Sie die Größe ein wenig ändern müssen.

jshell> f.setSize(400,301)

Ein Textbereich wird angezeigt und Sie können Zeichen eingeben.

image.png

Sie können dem Textbereich mit der Append-Methode eine Zeichenfolge hinzufügen.

jshell> textarea.append("te")

jshell> textarea.append("st")

Wenn es jedoch so bleibt, wie es ist, wird es kontinuierlich hinzugefügt, ohne zu brechen. image.png

Zeilenumbrüche werden durch \ n dargestellt. (Für Windows ist es \ n)

jshell> textarea.append("\ntester\n")

Die Zeilenumbrüche wurden ordnungsgemäß ausgeführt. image.png

Schaltfläche Hinzufügen

Fügen wir nun eine Schaltfläche hinzu. In Swing werden Schaltflächen von der Klasse "JButton" behandelt. Sie können die Schaltflächenbeschriftungszeichenfolge als Argument des Konstruktors angeben.

jshell> var button = new JButton("Hello")
button ==> javax.swing.JButton[,0,0,0x0,inval...pable=true]

Ich möchte dies dem Fenster hinzufügen, aber ich habe bereits den Textbereich eingerichtet, daher muss ich ihn dort hinzufügen, wo er sich nicht überlappt. In JFrame werden Komponenten durch Angabe von Nord, Süd, Ost, West und Mitte platziert. image.png

Geben Sie die Position an, die im ersten Argument der Methode "add" platziert werden soll, und die Komponente, die im zweiten Argument platziert werden soll.

jshell> f.add("North", button)
$27 ==> javax.swing.JButton[,0,0,0x0,inval...ltCapable=true]

Wenn Sie "Nord" falsch schreiben, wird eine solche Fehlermeldung angezeigt. Bitte beachten Sie, dass auch zwischen Groß- und Kleinschreibung unterschieden wird.

jshell> f.add("Nort", button)
|  Exception java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: Nort
|        at BorderLayout.addLayoutComponent (BorderLayout.java:468)
|        at BorderLayout.addLayoutComponent (BorderLayout.java:429)
|        at JRootPane$1.addLayoutComponent (JRootPane.java:507)
|        at Container.addImpl (Container.java:1151)
|        at Container.add (Container.java:1028)
|        at JFrame.addImpl (JFrame.java:553)
|        at Container.add (Container.java:459)
|        at (#31:1)

Dieser Fehler unterscheidet sich übrigens von dem, als ich vor langer Zeit versucht habe, der Variablen pi einen String zuzuweisen. Es ist auch anders, als wenn Sie "add" falsch geschrieben haben.

jshell> f.ad("North", b)
|Error:
|Symbol kann nicht gefunden werden
|Symbol:Methode ad(java.lang.String,javax.swing.JButton)
|Ort:Geben Sie javax ein.swing.JFrame-Variable f
|  f.ad("North", b)
|  ^--^

Diese Fehler treten zu unterschiedlichen Zeiten auf. Der Fehler beim Zuweisen einer Zeichenfolge zum Hinzufügen oder zur Variablen pi ist der Fehler beim Interpretieren des Programms, und der Fehler, wenn Sie einen Fehler in "Nord" machen, ist die interpretierte Verarbeitung Dies ist ein Fehler bei der Ausführung. Ein Fehler beim Interpretieren eines Programms wird als Kompilierungsfehler und ein Fehler zur Laufzeit als Ausnahme bezeichnet. Jetzt ist es schwierig, den Unterschied zu erkennen, da beide auftreten, wenn Sie einen Befehl eingeben und die Eingabetaste drücken, aber Sie werden ihn während der tatsächlichen Entwicklung deutlich sehen. Derzeit ist es in Ordnung, wenn Sie das Gefühl haben, dass es zwei Arten von Fehlern gibt.

Nun, selbst wenn das Hinzufügen erfolgreich ist, wird die Schaltfläche noch nicht angezeigt. Wenn Sie das Fenster mit der Methode "setSize" rekonstruieren, wird die Schaltfläche angezeigt.

jshell> f.setSize(400,300)

image.png

Aber wenn ich diesen Knopf drücke, passiert nichts. Ich muss etwas verarbeiten. Versuchen Sie Folgendes zu tippen: addActionListener ist etwas lang, aber wenn Sie addAc eingeben und die [Tab] -Taste drücken, sollte der Rest abgeschlossen sein.

jshell> button.addActionListener(ae -> textarea.append("Hello!\n"))

Sie sollten jetzt "Hallo" sehen, wenn die Taste gedrückt wird. image.png

Verwenden Sie die Methode "addActionListener", um die Verarbeitung hinzuzufügen, wenn die Schaltfläche gedrückt wird. Hier wird ae-> textarea.append (" Hello! \ N ") als Argument angegeben. Ich musste eine Verarbeitung an die Methode "addActionListener" übergeben, mit dem Gefühl "Bitte rufen Sie diese Verarbeitung auf, wenn die Taste gedrückt wird." Der Prozess hier ist "textarea.append (" Hallo! \ N ")", aber Sie müssen "Lambda-Ausdruck" usw. verwenden, um den Prozess als Wert zu übergeben. Der Lambda-Ausdruck ist wie folgt geschrieben.

Streit->wird bearbeitet

Bei der Verarbeitung beim Drücken der Schaltfläche wird hier, da sie ein "ActionEvent" -Objekt als Argument empfängt, hier als "ae" festgelegt, aber alles ist in Ordnung, solange es leicht zu verstehen ist. Das empfangene Argument wird diesmal nicht verwendet.

Eingaben in ein Textfeld empfangen

Geben wir unser Bestes. Versuchen wir, die im Textfeld eingegebene Zeichenfolge anzuzeigen, wenn die Taste gedrückt wird. Ich möchte ein Textfeld und eine Schaltfläche hinzufügen, kann sie jedoch nicht wie bei der JFrame-Layoutmethode hinzufügen. Also verwenden wir die JPanel-Komponente.

jshell> var panel = new JPanel()

jshell> f.add("South", panel)

Die "JPanel" -Komponente hat ein Layout, in dem die Komponenten in der Reihenfolge von links angeordnet sind. Wenn Sie hier verschiedene Komponenten einfügen und sie dann zum "JFrame" -Fenster hinzufügen, sieht es gut aus. Ich habe beschlossen, es hier zur Position "Süd" hinzuzufügen. Wenn ich die Fenstergröße ändere, wird etwas angezeigt. image.png

Fügen Sie ein Textfeld hinzu. Das Textfeld ist eine einzeilige Eingabekomponente und verwendet die Komponente "JTextField".

jshell> var textfield = new JTextField()

jshell> textfield.setColumns(15)

jshell> panel.add(textfield)

Die Breite wird durch die Methode "setColumns" bestimmt. image.png

Fügen wir am Ende eine Schaltfläche hinzu.

jshell> var printButton = new JButton("Print")

jshell> printButton.addActionListener(ae -> textarea.append(textfield.getText() + "\n"))

jshell> panel.add(printButton)

Wenn Sie die Taste drücken, wird die im Textfeld eingegebene Zeichenfolge zum Textbereich hinzugefügt. image.png

Übung: Fügen Sie eine Schaltfläche hinzu, die im Textbereich mit "Ja!" Angezeigt werden soll. Übung: Fügen Sie eine Schaltfläche hinzu, die das Alphabet der im Textfeld eingegebenen Zeichenfolge großschreibt und im Textbereich ausgibt. Verwenden Sie die Methode "toUpperCase", um das Alphabet in der Zeichenfolge groß zu schreiben. Versuchen wir zunächst, die Methode "toUpperCase" für JShell zu verwenden.

Lassen Sie JShell Java-Programme schreiben

Lassen Sie uns abschließend schreiben, was wir mit JShell als unabhängigem Java-Programm versucht haben. Geben Sie den folgenden Quellcode in Notepad oder Text Edit ein und speichern Sie ihn auf Ihrem Desktop als "FirstWindow.java".

FirstWindow.java


import javax.swing.*;

public class FirstWindow {
  public static void main(String... args) {
    var frame = new JFrame("test");

    var textarea = new JTextArea();
    frame.add(textarea);

    var textfield = new JTextField();
    textfield.setColumns(15);
    var button = new JButton("Print");
    button.addActionListener(ae -> textarea.append(textfield.getText() + "\n"));

    var panel = new JPanel();
    panel.add(textfield);
    panel.add(button);
    frame.add("North", panel);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.show();
  }
}

Verschiedene Dinge, die in JShell nicht angezeigt wurden, wurden hinzugefügt. Außerdem haben die in JShell eingegebenen Befehle ; (Semikolon). Im Vergleich zu vor Beginn dieses Tutorials fühlt es sich jedoch so an, als würde ich es lesen, ich kann es lesen!

Verschieben wir nun diesen Quellcode. Öffnen Sie eine Eingabeaufforderung. Ich werde JShell diesmal nicht verwenden. Verwenden Sie den Befehl cd, um zum Desktop zu gelangen.

$ cd Desktop

Kompilieren Sie dann den soeben eingegebenen Quellcode mit dem Befehl javac.

$ javac FirstWindow.java

Wenn ein Fehler auftritt, korrigieren Sie ihn, speichern Sie ihn und kompilieren Sie ihn erneut. Wenn der Fehler verschwindet, überprüfen wir die erstellte Datei. Verwenden Sie den Befehl dir unter Windows und den Befehl ls unter Mac und Linux.

$ dir FirstWindow.*

Sie haben jetzt eine FirstWindow.class-Datei. Hier ist der ausführbare Java-Code. Verwenden Sie dazu den Befehl java.

$ java FirstWindow

Hast du ein Fenster gesehen? Wenn es angezeigt wird, ist es erfolgreich. image.png

Starten Sie von hier aus Ihr umfassendes Java-Studium.

Recommended Posts

Java beginnend mit JShell-A Einblick in die Java-Welt
Folgen Sie dem Link mit Selen (Java)
Hallo Welt mit Java Template Engine Thymeleaf
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Java-Entwicklung mit Codenvy: Hello World! Run
Versuchen Sie es mit der Wii-Fernbedienung in Java
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
Hello World, eine plattformübergreifende GUI-App mit Groovy, die auf der Java-Plattform ausgeführt wird
[LeJOS] Lassen Sie uns den EV3-Motor mit Java steuern
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
Grundlegendes zum MVC-Framework mit serverseitigem Java 3/4 Controller
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Zeigen Sie "Hello World" im Browser mit Java an
Grundlegendes zum MVC-Framework mit dem serverseitigen Java 2/4 -Modell
Java, Hallo Welt!
Java Hallo Welt
Verfolgen Sie die mit dem Java-Agenten Insights der Anwendung ausgeführte SQL
[Tutorial] Eclipse herunterladen → Anwendung mit Java ausführen (Plejaden)
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
CI die Architektur von Java / Kotlin-Anwendungen mit ArchUnit
Überprüfen Sie das Verhalten von Java Intrinsic Locks mit bpftrace
[Java] Holen Sie sich das Datum 10 Tage später mit der Calendar-Klasse
HTTPS-Verbindung mit Java zum selbstsignierten Zertifikatsserver
[LeJOS] Lassen Sie uns den EV3-Motor mit Java fernsteuern
Versuchen Sie, Java mit GraalVM in ein natives Modul zu integrieren
Die Geschichte von dto, dao-like mit Java, SQLite
Java-Desktop mit demselben Frontend wie das WEB.
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!
Serverloses Java EE beginnend mit Quarkus und Cloud Run