GUI не добавляет панели

-5

начинающий с помощью GUI и не может понять, почему это не добавляет поля в мой графический интерфейс. Он открывает фрейм, но он пуст. Ошибок нет. Любая помощь приветствуется.

import javax.swing.*;
import java.awt.*;

public class Project3 extends JFrame {

public Project3() {

//set layout
setLayout(new GridLayout(5, 2, 5, 5));

//add radio panel
JPanel radioPanel = new JPanel();

//set Radio Buttons
JRadioButton iter = new JRadioButton("Iteration", true);
JRadioButton recur = new JRadioButton("Recursion", true);

//add radio buttons to group
ButtonGroup radioGroup = new ButtonGroup();
radioGroup.add(iter);
radioGroup.add(recur);
radioPanel.add(iter);
radioPanel.add(recur);
recur.setSelected(true);

//add another panel
JPanel secondPanel = new JPanel();
secondPanel.setLayout(new GridLayout(4, 2, 5, 5));

//add text fields and button
JLabel enter = new JLabel("Enter n:");
JTextField eight = new JTextField(8);
//?????????????????????????????
JButton compute = new JButton("Compute");
JLabel result = new JLabel("Result:");
JTextField eight1 = new JTextField(8);
JLabel efficiency = new JLabel("Efficiency:");
JTextField eight2 = new JTextField(8);

//add items to panel
secondPanel.add(enter);
secondPanel.add(eight);
secondPanel.add(compute);
secondPanel.add(result);
secondPanel.add(eight1);
secondPanel.add(efficiency);
secondPanel.add(eight2);

add(radioPanel);
add(secondPanel);

}

public static void main(String[] args) {

// Create frame
JFrame frame = new JFrame("Project 3");
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

}

}

спросил(а) 2021-01-19T18:53:18+03:00 6 месяцев, 1 неделя назад
1
Решение
78

Вы Project3 простирается от JFrame, но в вашем main методе вы создаете совершенно отдельный экземпляр JFrame и игнорировать ваш Project3 класс в целом

Это просто добавляет путаницу, вместо этого расширяет Project3 от JPanel и ADD экземпляр его на ваш вновь созданный JFrame

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Project3 extends JPanel {

public Project3() {

//set layout
setLayout(new GridLayout(5, 2, 5, 5));

//add radio panel
JPanel radioPanel = new JPanel();

//set Radio Buttons
JRadioButton iter = new JRadioButton("Iteration", true);
JRadioButton recur = new JRadioButton("Recursion", true);

//add radio buttons to group
ButtonGroup radioGroup = new ButtonGroup();
radioGroup.add(iter);
radioGroup.add(recur);
radioPanel.add(iter);
radioPanel.add(recur);
recur.setSelected(true);

//add another panel
JPanel secondPanel = new JPanel();
secondPanel.setLayout(new GridLayout(4, 2, 5, 5));

//add text fields and button
JLabel enter = new JLabel("Enter n:");
JTextField eight = new JTextField(8);
//?????????????????????????????
JButton compute = new JButton("Compute");
JLabel result = new JLabel("Result:");
JTextField eight1 = new JTextField(8);
JLabel efficiency = new JLabel("Efficiency:");
JTextField eight2 = new JTextField(8);

//add items to panel
secondPanel.add(enter);
secondPanel.add(eight);
secondPanel.add(compute);
secondPanel.add(result);
secondPanel.add(eight1);
secondPanel.add(efficiency);
secondPanel.add(eight2);

add(radioPanel);
add(secondPanel);

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Project 3");
frame.add(new Project3());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}

}

Делая это, вы отделите свой код и обеспечите более высокий уровень повторного использования вашего компонента, теперь вы можете добавить Project3 к тому, что когда-либо вам понравилось

ответил(а) 2021-01-19T18:53:18+03:00 6 месяцев, 1 неделя назад
64

Вы просто создаете простой JFrame. Вам нужно создать экземпляр класса Project3 вы написали.

Т.е.

public static void main(String[] args) {

// Create frame
Project3 frame = new Project3();
frame.setTitle("Project 3");
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

ответил(а) 2021-01-19T18:53:18+03:00 6 месяцев, 1 неделя назад
63

Вы никогда не создаете Project3 - просто JFrame.

Pehaps

// Create frame
JFrame frame = new JFrame("Project 3");

Предполагалось, что

// Create frame
JFrame frame = new Project3();

ответил(а) 2021-01-19T18:53:18+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема