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:

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:

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:

 

www.informatika-programozas.hu - Textfield

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 



 

 

 

 

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/):

 

www.informatika-programozas.hu - Textfield

www.informatika-programozas.hu - Textfield