Имеется следующий код:
package com.company;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
private static JLabel portText = new JLabel("Port:");
private static JLabel brokerAddressText = new JLabel("Broker ip address:");
private static JLabel topicText = new JLabel("Topic");
private static JLabel messageText = new JLabel("Message:");
private static JTextField port = new JTextField(4);
private static JTextField brokerAddress = new JTextField(10);
private static JTextField topic = new JTextField(10);
private static JTextField message = new JTextField(20);
private static JButton connect = new JButton("Connect");
private static JButton disconnect = new JButton("Disconnect");
private static JButton subscribe = new JButton("Subscribe");
private static JButton unsubscribe = new JButton("Unsubscribe");
private static JButton publish = new JButton("Publish");
private static int iPort;
private static String sIp;
public static void main(String[] args) {
JFrame jFrame = getFrame();
connect.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try{
iPort = Integer.parseInt(port.getText());
sIp = brokerAddress.getText();
}catch (NumberFormatException exc){
System.out.println("Wrong port input");
}
}
});
}
private static JFrame getFrame(){
JFrame jFrame = new JFrame();
JPanel jPanel = (JPanel) jFrame.getContentPane();
jFrame.setVisible(true);
jFrame.setBounds(750,250,500,500);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.add(jPanel);
jFrame.setTitle("MQTT client");
portText.setLocation(10,10);
jPanel.add(portText);
port.setLocation(10,30);
jPanel.add(port);
jPanel.add(brokerAddressText);
jPanel.add(brokerAddress);
jPanel.add(connect);
jPanel.add(disconnect);
jPanel.add(topicText);
jPanel.add(topic);
jPanel.add(subscribe);
jPanel.add(unsubscribe);
jPanel.add(messageText);
jPanel.add(message);
jPanel.add(publish);
jPanel.revalidate();
return jFrame;
}
}
При компиляции выдает ошибку:
Exception in thread "main" java.lang.IllegalArgumentException: adding container's parent to itself at java.desktop/java.awt.Container.checkAddToSelf(Container.java:497) at java.desktop/java.awt.Container.addImpl(Container.java:1110) at java.desktop/java.awt.Container.add(Container.java:1025) at java.desktop/javax.swing.JFrame.addImpl(JFrame.java:553) at java.desktop/java.awt.Container.add(Container.java:432) at com.company.Main.getFrame(Main.java:50) at com.company.Main.main(Main.java:26)
Понимаю, что скорее всего это из-за строк
JPanel jPanel = (JPanel) jFrame.getContentPane();
jFrame.add(jPanel);
Но в таком случае, не понимаю, как добавить панельку тогда
Лучше всего для JFrame создавать отдельный класс с удобным конструктором:
public class Main {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
}
}
class MyFrame extends JFrame {
MyFrame() {
}
}
Теперь можно указать основные настройки в конструкторе:
setVisible(); лучше всего ставить самым последним;
а также в конце самые не проблемные функции как размер,локация,фулскрин,выход,рамки...
название title (super) лучше всего в самом начале конструктора
class MyFrame extends JFrame {
MyFrame() {
super("MQTT client");
setBounds(400,400,400,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
}
теперь панель и layout (расположение) основных элементов интерфейса (кнопки и строки тд)
GridLayout,BoxLayout,GroupLayout,BorderLayout,CardLayout и другие
в GridLayout элементы распалогаються в сетке 3 на 3
MyFrame() {
super("MQTT client");
JPanel jPanel = new JPanel();
getContentPane().add(jPanel);
jPanel.setLayout(new GridLayout(3,3));
setBounds(400,400,400,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
}
теперь можно создавать всё остальное
package com.company;
import javax.swing.*;
import java.awt.*;
public class Main {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
}
}
class MyFrame extends JFrame {
private static JLabel portText = new JLabel("Port:");
private static JLabel brokerAddressText = new JLabel("Broker ip address:");
private static JLabel topicText = new JLabel("Topic");
private static JLabel messageText = new JLabel("Message:");
private static JTextField port = new JTextField(4);
private static JTextField brokerAddress = new JTextField(10);
private static JTextField topic = new JTextField(10);
private static JTextField message = new JTextField(20);
private static JButton connect = new JButton("Connect");
private static JButton disconnect = new JButton("Disconnect");
private static JButton subscribe = new JButton("Subscribe");
private static JButton unsubscribe = new JButton("Unsubscribe");
private static JButton publish = new JButton("Publish");
MyFrame() {
super("MQTT client");
JPanel jPanel = new JPanel();
getContentPane().add(jPanel);
jPanel.setLayout(new GridLayout(3,3));
jPanel.add(portText);
jPanel.add(port);
jPanel.add(brokerAddressText);
jPanel.add(brokerAddress);
jPanel.add(connect);
jPanel.add(disconnect);
jPanel.add(topicText);
jPanel.add(topic);
jPanel.add(subscribe);
jPanel.add(unsubscribe);
jPanel.add(messageText);
jPanel.add(message);
jPanel.add(publish);
setBounds(400,400,400,400);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
}
теперь осталось только настроить их местоположение вот видео о том как это сделать в gridLayout
https://www.youtube.com/watch?v=3cuVqLxNBbc
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Начал разбираться с этим фреймворком и хотелось бы узнать вот что:
помогите пожалуйста разобраться с TensorFlowМне нужно создать Android приложение для распознавания команд управления, но сделать это нужно с использованием...
Если создать Formatter из сокетного OutputStream-a, тоformat() не отрабатывает как ожидается:
В моем проекте есть тестовый модуль, и модули-pojo с hibernate entity классами