Java

Как создать программу (Java), чтобы была не консольной, а с интерфейсом GUI

1) Интерфейс (код) class TestFrame

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TestFrame {

public static void createGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JLabel label = new JLabel("Test label");
frame.getContentPane().add(label);

frame.setPreferredSize(new Dimension(200, 100));

frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createGUI();
}
});
}
}

2) код (консоль) class gg

import java.util.Scanner;

public class gg {

public static void main (String[] args) {

System.out.println("Введите слово");
Scanner scanner = new Scanner(System.in);
String a = scanner.nextLine();

System.out.print("В слове " + a + " " + a.length() + " БУКВЫ ");
}
}
Не вполне ясен вопрос..
Нужно сделать клон второй программы с использованием интерфейса?
Если да, то первый листинг с кодом такого не предоставит - он создаёт интерфейс, но не имеет ни одного компонента, допускающего ввод.
Как минимум, необходимо добавить объект JTextField, либо JTextArea
(однострочное и многострочное поле ввода)
Недолюбливаю менеджеры компоновки за их дурную привычку извращаться над размерами компонентов, так что предложу нижеследующее решение:

package exp;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
* @author Lira_Heartstrings, also known as OldTeaOwl
*/
public class NewClass1 {

static int x = 10;
static int y = 50;
static int width = 200;
static int height = 40;
//Собственно, окно. Пока невидимое, и не имеющее размеров
static JFrame frame = new JFrame("Заголовок окна");
//Однострочное текстовое поле, поддерживает ввод
static JTextField input = new JTextField("");
//Текстовая метка, не допускает ввод
static JLabel text = new JLabel("Введите текст!");

public static void main(String[] args) {
//Настраиваем размеры
text.setBounds(x, y, width, height);
input.setBounds(x, y + 50, width, height);
frame.setSize(500, 350);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Кнопка
JButton button = new JButton("Принято");
button.setBounds(180, y + 200, 120, 40);
//Слушатель событий, фиксирует и обрабатывает нажатие на кнопку
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String data = input.getText();
text.setText("В ведённой строке " + data.length() + " символов!");
frame.repaint();
}
});
/*Настройки окна - центрирование, код действия на кнопке закрытия окна,
добавление всех компонентов на окно, неизменяемость его размеров, отключение менеджера компоновки
и отображение на экране
*/
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(text);
frame.add(input);
frame.add(button);
frame.setResizable(false);
frame.setLayout(null);
frame.setVisible(true);
}

}

P.s. Пояснение ключевых точек см. в комментариях внутри программы
Тимур Маралбаев
Тимур Маралбаев
266
Лучший ответ
как много в написанном тобой коде ты реально понимаешь?
Maulen Banderas
Maulen Banderas
96 063
Ну так сделал же.
Жасулан Абишев
Жасулан Абишев
54 948