Gyakorlati alapok IV.
Végre ablakozunk! (AWT, Swing, JavaFX)
A textfield alaptulajdonságai
Ebben a fejezetben megnézzük a
textfield (szövegdoboz vagy szövegmező) nevű komponens alapszintű
működését és szerzett tudásunkat rögtön fel is használjuk konkrét programozási
projektekben. A komponens alapvetően szövegbevitelre és majd később látjuk,
szövegkiírásra alkalmas. Az objektum eléréséhez a
JTextField osztályt kell aktiválnunk, például:
JTextField textField = new JtextField();
A
getter-setter függvényeknél tanultak alapján a Java-komponens 2 fő
metódusa:
-
setText("text...") - szövegbevitel,
-
getText() - szövegmező tartalmának lekérdezése.
Természetesen példányosítás után
számos további metódus áll rendelkezésre az objektum hatékony és széleskörű
használatához. Ezeket konkrét projektekben fogjuk megmutatni.
Demonstrációként ugorjunk is bele 1. projektünkbe! Ez nem lesz olyan
bonyolult, csupán a 2 fenti metódus, a setText()
és a getText() alapszintű működését kívánjuk
bemutatni. A Center osztállyal középrezárt
főablak (frame) 3 komponensből fog állni:
-
label,
-
textfield,
-
button.
Gombnyomás hatására a szövegmező tartalma kerüljön kiírásra a label-objektumon, illetve a szövegmezőben jelenjen meg a Bang! felirat. Alapszintű követelmény pedig legyen az, hogy a szövegmező ne fogadjon el üres szöveget (azaz ha nem írtak bele); ezt belső üzenetablak feldobásával kontrollálhatjuk, így a felhasználó rá lesz kényszerítve a helyes szövegbevitelre:
Mindez nyilvánvalóan az
eseménykezelés függvényében (buttonAction()) lesz
megvalósítva:
private void buttonAction() {
if(textField.getText().equals("")) {
JOptionPane.showMessageDialog(frame, "Empty textfield!");
return;
}
label.setText(textField.getText());
textField.setText("Bang!");
}
}
Nézzük meg a futtatható Java-kódot:
Main.java
public class
Main {
public static void main(String[] args) {
Window window = new Window();
}
}
Window.java
import
java.awt.*;
import javax.swing.*;
class Window extends JFrame {
JFrame frame = new JFrame();
JButton button = new JButton("OK!");
JLabel label = new JLabel();
JTextField textField = new JTextField();
Window() {
super();
label.setBounds(100, 50, 200, 25);
label.setFont(new Font("Serif", Font.PLAIN, 18));
label.setText("This text will be changed!");
textField.setBounds(100, 75, 200, 25);
button.setBounds(100, 100, 200, 30);
button.addActionListener(event -> buttonAction());
frame.add(button);
frame.add(label);
frame.add(textField);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 325);
frame.setTitle("PJP - Penzes Java Programming");
Center center = new Center();
center.setCenter(frame);
frame.setLayout(null);
frame.setVisible(true);
}
private void buttonAction() {
if(textField.getText().equals("")) {
JOptionPane.showMessageDialog(frame,
"Empty textfield!");
return;
}
label.setText(textField.getText());
textField.setText("Bang!");
}
}
Center.java
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;
public class Center {
void setCenter(JFrame frame) {
Point center =
GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
int x = (int) center.getX() - (frame.getWidth() / 2);
int y = (int) center.getY() - (frame.getHeight() / 2);
Point ablakCenter = new Point(x, y);
frame.setLocation(ablakCenter);
}
}
Végeredmény (a monitor közepén / felbontástól függetlenül/):