Gyakorlati alapok IV.

Végre ablakozunk! (AWT, Swing, JavaFX)

 

Üveghangkereső


Nyilvánvalóan nem várhatom el, hogy a Java-programozást tanuló tanítvány egyúttal zeneileg is képzett legyen, ezért most nem fogom megmagyarázni az alábbi minialkalmazás funkcionalitását. A téma iránt érdeklődő a kapcsolódó zeneelméletet elolvashatja az alábbi fejezetekben:

Itt legyen annyi elég, hogy a program adott hangszerhúrhosszból kiszámolja a húron lecsapódó úgynevezett „természetes felharmonikus hangok” (másnéven üveghangok - flageolet) konkrét pozícióit. A program alapfunkciója tehát nem bonyolult, bár a teljes körű validálás és a baloldali menü már kissé azzá teszi.
 

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 java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URI;
import javax.swing.*;

class Window extends JFrame implements ActionListener{
JFrame frame = new JFrame();
JButton buttonCount = new JButton("Count!");
JButton buttonClear = new JButton("Clear!");
JMenuItem close, about, visit, help;

JLabel labelTitle = new JLabel();
JLabel label_1_1 = new JLabel();
JLabel label_1_2 = new JLabel();
JLabel label_1_3 = new JLabel();
JLabel label_1_4 = new JLabel();
JLabel label_1_5 = new JLabel();
JLabel label_1_6 = new JLabel();
JLabel label_1_7 = new JLabel();
JLabel label_1_8 = new JLabel();
JLabel label_1_9 = new JLabel();
JLabel label_1_10 = new JLabel();
JLabel label_1_11 = new JLabel();
JLabel label_1_12 = new JLabel();
JLabel label_1_13 = new JLabel();
JLabel label_1_14 = new JLabel();
JLabel label_1_15 = new JLabel();
JLabel label_1_16 = new JLabel();

JTextField textFieldLength = new JTextField();
JTextField textField_1_1 = new JTextField();
JTextField textField_1_2 = new JTextField();
JTextField textField_1_3 = new JTextField();
JTextField textField_1_4 = new JTextField();
JTextField textField_1_5 = new JTextField();
JTextField textField_1_6 = new JTextField();
JTextField textField_1_7 = new JTextField();
JTextField textField_1_8 = new JTextField();
JTextField textField_1_9 = new JTextField();
JTextField textField_1_10 = new JTextField();
JTextField textField_1_11 = new JTextField();
JTextField textField_1_12 = new JTextField();
JTextField textField_1_13 = new JTextField();
JTextField textField_1_14 = new JTextField();
JTextField textField_1_15 = new JTextField();
JTextField textField_1_16 = new JTextField();

Window() {
    super();
    initializationLabels();
    initializationTextFields();

    JMenu menu;
    JMenuBar menuBar = new JMenuBar();
    menu = new JMenu("Menu");
    menuBar.add(menu);
    visit = new JMenuItem("Visit my website!");
    about = new JMenuItem("About");
    close = new JMenuItem("Close");
    help = new JMenuItem("Help");
    menu.add(visit);
    menu.add(help);
    menu.add(about);
    menu.add(close);
    frame.setJMenuBar(menuBar);

    visit.addActionListener(this);
    about.addActionListener(this);
    close.addActionListener(this);
    help.addActionListener(this);

    buttonCount.setBounds(100, 87, 200, 25);
    buttonCount.addActionListener(event -> buttonActionCount());

    buttonClear.setBounds(100, 120, 200, 25);
    buttonClear.addActionListener(event -> buttonActionClear());

    ImageIcon ikon = new ImageIcon("ikon.jpg");
    frame.setIconImage(ikon.getImage());

    frame.add(buttonCount);
    frame.add(buttonClear);

    frame.add(labelTitle);
    frame.add(label_1_1);
    frame.add(label_1_2);
    frame.add(label_1_3);
    frame.add(label_1_4);
    frame.add(label_1_5);
    frame.add(label_1_6);
    frame.add(label_1_7);
    frame.add(label_1_8);
    frame.add(label_1_9);
    frame.add(label_1_10);
    frame.add(label_1_11);
    frame.add(label_1_12);
    frame.add(label_1_13);
    frame.add(label_1_14);
    frame.add(label_1_15);
    frame.add(label_1_16);

    frame.add(textFieldLength);
    frame.add(textField_1_1);
    frame.add(textField_1_2);
    frame.add(textField_1_3);
    frame.add(textField_1_4);
    frame.add(textField_1_5);
    frame.add(textField_1_6);
    frame.add(textField_1_7);
    frame.add(textField_1_8);
    frame.add(textField_1_9);
    frame.add(textField_1_10);
    frame.add(textField_1_11);
    frame.add(textField_1_12);
    frame.add(textField_1_13);
    frame.add(textField_1_14);
    frame.add(textField_1_15);
    frame.add(textField_1_16);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(420, 650);
    frame.setTitle("PJP - Penzes Java Programming");

    Center center = new Center();
    center.setCenter(frame);

    frame.setLayout(null);
    frame.setVisible(true);
}

private void buttonActionCount() {
    double menzura = 0;

    if(textFieldLength.getText().equals ("")) {
        JOptionPane.showMessageDialog(frame, "Empty textfield!");
        buttonActionClear();
        return;
        }
    try {
        menzura = Double.parseDouble(textFieldLength.getText());
        } catch (Exception e) {
        JOptionPane.showMessageDialog(frame,

            "The text is not a number or bad typing!"
            + "\nAn example for correct typing: 863.2");
            buttonActionClear();
            return;
        }

    if(menzura < 100 || menzura > 1500) {
        JOptionPane.showMessageDialog(frame,

            "No instrument with this string length!");
            buttonActionClear();
            return;
    }

    textField_1_1.setText(Double.toString(menzura));
    textField_1_2.setText(Double.toString(menzura / 2));
    textField_1_3.setText(Double.toString(menzura / 3));
    textField_1_4.setText(Double.toString(menzura / 4));
    textField_1_5.setText(Double.toString(menzura / 5));
    textField_1_6.setText(Double.toString(menzura / 6));
    textField_1_7.setText(Double.toString(menzura / 7));
    textField_1_8.setText(Double.toString(menzura / 8));
    textField_1_9.setText(Double.toString(menzura / 9));
    textField_1_10.setText(Double.toString(menzura / 10));
    textField_1_11.setText(Double.toString(menzura / 11));
    textField_1_12.setText(Double.toString(menzura / 12));
    textField_1_13.setText(Double.toString(menzura / 13));
    textField_1_14.setText(Double.toString(menzura / 14));
    textField_1_15.setText(Double.toString(menzura / 15));
    textField_1_16.setText(Double.toString(menzura / 16));
}

private void buttonActionClear() {
    textFieldLength.setText("0");
    textField_1_1.setText("0");
    textField_1_2.setText("0");
    textField_1_3.setText("0");
    textField_1_4.setText("0");
    textField_1_5.setText("0");
    textField_1_6.setText("0");
    textField_1_7.setText("0");
    textField_1_8.setText("0");
    textField_1_9.setText("0");
    textField_1_10.setText("0");
    textField_1_11.setText("0");
    textField_1_12.setText("0");
    textField_1_13.setText("0");
    textField_1_14.setText("0");
    textField_1_15.setText("0");
    textField_1_16.setText("0");
}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == visit) {
    try {
    Desktop.getDesktop().browse(new URI("http://www.informatika-programozas.hu"));
   
} catch (Exception ex) {
        JOptionPane.showMessageDialog(frame, "Connection was not successful!");
    }
}

if(e.getSource() == help) {
    JOptionPane.showMessageDialog(frame,
    "It is NOT allowed:\n"
    + "1. string length < 100 mm or > 1500 mm\n"
    + "2. empty string length textfield\n"
    + "3. NOT integer or floating point number (e.g.: any letter, symbol, etc.)\n"
    + "4. in case of floating point number: 3,5\n"
    + "\n"
    + "You should type a floating point number like this: 3.5");
}

if(e.getSource() == about) {
    JOptionPane.showMessageDialog(frame,
    "Copyright PJP-Pénzes László - 2015-2022. All rights reserved.\n"
    + "This free software is only for educational purpose.\n"
    + "NOT allowed to redistribute, sale or change the statement of copyrights.\n"
    + "If you need any additional help, plesase send me an e-mail here:\n"
    + "info@informatika-programozas.hu");
}

if(e.getSource() == close) {
    System.exit(0);
    }
}

private void initializationLabels() {
labelTitle.setBounds(137, 15, 200, 25);
labelTitle.setFont(new Font("Serif", Font.PLAIN, 15));
labelTitle.setText("String length (in mm)");

label_1_1.setBounds(80, 152, 50, 25);
label_1_1.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_1.setText("1/1");

label_1_2.setBounds(80, 177, 50, 25); //25
label_1_2.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_2.setText("1/2");

label_1_3.setBounds(80, 202, 50, 25);
label_1_3.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_3.setText("1/3");

label_1_4.setBounds(80, 227, 50, 25);
label_1_4.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_4.setText("1/4");

label_1_5.setBounds(80, 252, 50, 25);
label_1_5.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_5.setText("1/5");

label_1_6.setBounds(80, 277, 50, 25);
label_1_6.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_6.setText("1/6");

label_1_7.setBounds(80, 302, 50, 25);
label_1_7.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_7.setText("1/7");

label_1_8.setBounds(80, 327, 50, 25);
label_1_8.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_8.setText("1/8");

label_1_9.setBounds(80, 352, 50, 25);
label_1_9.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_9.setText("1/9");

label_1_10.setBounds(73, 377, 50, 25);
label_1_10.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_10.setText("1/10");

label_1_11.setBounds(73, 402, 50, 25);
label_1_11.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_11.setText("1/11");

label_1_12.setBounds(73, 427, 50, 25);
label_1_12.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_12.setText("1/12");

label_1_13.setBounds(73, 452, 50, 25);
label_1_13.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_13.setText("1/13");

label_1_14.setBounds(73, 477, 50, 25);
label_1_14.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_14.setText("1/14");

label_1_15.setBounds(73, 502, 50, 25);
label_1_15.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_15.setText("1/15");

label_1_16.setBounds(73, 527, 50, 25);
label_1_16.setFont(new Font("Serif", Font.PLAIN, 15));
label_1_16.setText("1/16");
}

private void initializationTextFields() {
textFieldLength.setBounds(100, 40, 200, 40);
textFieldLength.setFont(new Font("Serif", Font.PLAIN, 20));
textFieldLength.setHorizontalAlignment(JTextField.CENTER);
textFieldLength.setText("0");

textField_1_1.setBounds(100, 155, 200, 20);
textField_1_1.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_1.setHorizontalAlignment(JTextField.CENTER);

textField_1_2.setBounds(100, 180, 200, 20); //25
textField_1_2.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_2.setHorizontalAlignment(JTextField.CENTER);

textField_1_3.setBounds(100, 205, 200, 20);
textField_1_3.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_3.setHorizontalAlignment(JTextField.CENTER);

textField_1_4.setBounds(100, 230, 200, 20);
textField_1_4.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_4.setHorizontalAlignment(JTextField.CENTER);

textField_1_5.setBounds(100, 255, 200, 20);
textField_1_5.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_5.setHorizontalAlignment(JTextField.CENTER);

textField_1_6.setBounds(100, 280, 200, 20);
textField_1_6.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_6.setHorizontalAlignment(JTextField.CENTER);

textField_1_7.setBounds(100, 305, 200, 20);
textField_1_7.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_7.setHorizontalAlignment(JTextField.CENTER);

textField_1_8.setBounds(100, 330, 200, 20);
textField_1_8.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_8.setHorizontalAlignment(JTextField.CENTER);

textField_1_9.setBounds(100, 355, 200, 20);
textField_1_9.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_9.setHorizontalAlignment(JTextField.CENTER);

textField_1_10.setBounds(100, 380, 200, 20);
textField_1_10.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_10.setHorizontalAlignment(JTextField.CENTER);

textField_1_11.setBounds(100, 405, 200, 20);
textField_1_11.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_11.setHorizontalAlignment(JTextField.CENTER);

textField_1_12.setBounds(100, 430, 200, 20);
textField_1_12.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_12.setHorizontalAlignment(JTextField.CENTER);

textField_1_13.setBounds(100, 455, 200, 20);
textField_1_13.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_13.setHorizontalAlignment(JTextField.CENTER);

textField_1_14.setBounds(100, 480, 200, 20);
textField_1_14.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_14.setHorizontalAlignment(JTextField.CENTER);

textField_1_15.setBounds(100, 505, 200, 20);
textField_1_15.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_15.setHorizontalAlignment(JTextField.CENTER);

textField_1_16.setBounds(100, 530, 200, 20);
textField_1_16.setFont(new Font("Serif", Font.PLAIN, 15));
textField_1_16.setHorizontalAlignment(JTextField.CENTER);

buttonActionClear();
    }
}


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:

 

www.informatika-programozas.hu - Üveghangkereső