#java #swing
#java #swing
Вопрос:
Выполнение базовой двухпанельной панели кода заключается в том, чтобы предоставить информацию и поле для ввода данных, а второе — просто завершить работу или выполнить. Изначально должно было появиться пустое окно, но после добавления panelTwo окно больше не появляется.
Программа компилируется и не показывает ошибок, за исключением того, что в основном классе она сообщает мне «Новый экземпляр игнорируется», относящийся к new SalesClassGUI (); . Не уверен, как действовать, любая помощь была бы оценена!
public class SalesClassGUI extends JFrame {
private JPanel panelOne;
private JPanel panelTwo;
private JLabel associateNameLabel;
private JLabel associateNumberLabel;
private JLabel productSoldLabel;
private JLabel productPriceLabel;
private JLabel stateCodeLabel;
private JLabel regionCodeLabel;
private JLabel productNumberLabel;
private JLabel productDescripLabel;
private JTextField associateNameField;
private JTextField associateNumberField;
private JTextField productSoldField;
private JTextField productPriceField;
private JTextField stateCodeField;
private JTextField regionCodeField;
private JTextField productNumberField;
private JTextField productDescripField;
private JButton calcButton;
private JButton exitButton;
private final int WINDOW_WIDTH = 500;
private final int WINDOW_HEIGHT = 500;
public void SalesClassGUI() {
setTitle("Associate Tracker");
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout (new GridLayout (8,1));
buildPanel();
add(panelOne);
add(panelTwo);
setVisible(true);
}
private void buildPanel() {
associateNameLabel = new JLabel("Enter name of associate");
associateNumberLabel = new JLabel("Enter associate number");
productSoldLabel = new JLabel("Enter number of product sold");
productPriceLabel = new JLabel("Enter price of the product");
stateCodeLabel = new JLabel("Enter state code");
regionCodeLabel = new JLabel("Enter region code");
productNumberLabel = new JLabel("Enter product number");
productDescripLabel = new JLabel("Enter product description");
associateNameField = new JTextField();
associateNumberField = new JTextField();
productSoldField = new JTextField();
productPriceField = new JTextField();
stateCodeField = new JTextField();
regionCodeField = new JTextField();
productNumberField = new JTextField();
productDescripField = new JTextField();
//associate name
panelOne = new JPanel();
/*panelOne.setLayout(new GridLayout(8, 2));*/
panelOne.add(associateNameLabel);
panelOne.add(associateNameField);
//associate number
panelOne.add(associateNumberLabel);
panelOne.add(associateNumberField);
//prouct sold
panelOne.add(productSoldLabel);
panelOne.add(productSoldField);
//product price
panelOne.add(productPriceLabel);
panelOne.add(productPriceField);
//state code
panelOne = new JPanel();
panelOne.add(stateCodeLabel);
panelOne.add(stateCodeField);
//region code
panelOne.add(regionCodeLabel);
panelOne.add(regionCodeField);
//product number
panelOne.add(productNumberLabel);
panelOne.add(productNumberField);
//product description
panelOne.add(productDescripLabel);
panelOne.add(productDescripField);
panelTwo = new JPanel();
panelTwo.setLayout(new GridLayout(1, 2));
// Define the button
calcButton = new JButton("Calculate");
// Add the buttons to the panel
panelTwo.add(calcButton);
panelTwo.add(exitButton);
}
public static void main(String[] args) {
SalesClassGUI salesClassGUI = new SalesClassGUI();
}
}
Комментарии:
1. Ну, вы действительно должны выполнять код GUI в потоке отправки событий.
Ответ №1:
В вашем классе нет конструктора. Итак, при вызове new SalesClassGUI()
вызывается конструктор по умолчанию, который ничего не делает. И тогда ваша программа просто завершается.
Чтобы правильно объявить конструктор, вам нужно опустить возвращаемый тип.
Изменить:
public void SalesClassGUI() {
Для:
public SalesClassGUI() {
Примечание: вы получите NPE, потому что у вашего ctor есть некоторые ошибки, но это устранит проблему «ничего не происходит». Я обнаружил это, просмотрев код в отладчике. Вам также следует научиться делать это.
Кроме того, еще один хороший метод отладки — просто добавить несколько инструкций print для отслеживания хода выполнения программы и проверки того, что код достигает определенных точек. Это то, что подсказало мне, что что-то было серьезно не так, и мне нужно было использовать отладчик.
public SalesClassGUI() {
setTitle("Associate Tracker");
System.err.println( "ctor" );
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout (new GridLayout (8,1));
buildPanel();
add(panelOne);
add(panelTwo);
pack();
System.err.println( "setvisible true" );
setVisible(true);
}
Когда «ctor» не печатался, я знал, что что-то действительно не так.
Комментарии:
1. Извините за поздний ответ, но это очень помогло! Я столкнулся с проблемами при удалении void, но, по сути, просто включил метод buildPanel () в SalesClass и все заработало! Большое спасибо!