Сначала вернемся к основному коду ...
public class GUI extends JFrame {
//...
public static void main(String[] args) {
JFrame frame = new JFrame();
GUI one = new GUI();
frame.getContentPane().add(one);
frame.pack();
frame.setVisible(true);
}
}
Не удастся, потому что вы не можете добавить оконный компонент в окно.Как правило, вы должны избегать прямого переопределения JFrame
(и других контейнеров верхнего уровня) и отдавать предпочтение чему-то менее сложному, например JPanel
public class GUI extends JPanel {
//...
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new GUI());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Next ...
calc.addActionListener((ActionListener) this);
Тот факт, что вам нужно выполнить приведение, чтобы заставить код работать, является явным признаком того, что что-то не так, и это может вызвать ошибку во время выполнения и привести к сбою вашей программы.Возможно, вам следует начать с чтения Как написать Action Listener и Как использовать кнопки, флажки и радиокнопки , чтобы лучше понять, как работает API
Это дополнительно поддерживается использованием аннотации @Override
, которую следует использовать, когда вы «думаете», что реализуете или переопределяете существующие функции ...
@Override
public void actionPerformed(ActionEvent e) {
//...
}
Этозатем не сможет скомпилироваться, так как вы не реализуете какой-либо существующий функционалЭта функциональность описывается интерфейсом ActionListener
, который вы не реализуете.
Хотя вы могли бы реализовать этот интерфейс напрямую, я предпочитаю избегать этого, поскольку он предоставляет функциональность, к которой другие классы не должны иметь доступи вы рискуете создать метод «бога», который никогда не является хорошей идеей.
Вместо этого я предпочитаю использовать анонимные классы Java , которые предоставляют гораздо лучшие средствадля выделения функциональности в одном случае использования, например ...
calc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
double bInput = Integer.valueOf(base.getText());
double hInput = Integer.valueOf(height.getText());
double aOutput = 0.5 * bInput * hInput;
area.setText("Area of your triangle is: " + aOutput);
} catch (NumberFormatException n) {
System.out.println(n.getMessage());
}
}
});
Runnable Example
import java.awt.EventQueue;
import java.awt.GridLayout;
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.JPanel;
import javax.swing.JTextField;
public class GUI extends JPanel {
GridLayout g = new GridLayout(5, 2);
private JLabel baseIn = new JLabel("Base Input");
private JLabel heightIn = new JLabel("Height Input");
private JTextField base = new JTextField();
private JTextField height = new JTextField();
private JTextField area = new JTextField();
private JButton calc = new JButton("Calculate Area");
public GUI() {
setLayout(g);
add(baseIn);
add(heightIn);
add(base);
add(height);
add(area);
add(calc);
area.setEditable(false);
calc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
double bInput = Integer.valueOf(base.getText());
double hInput = Integer.valueOf(height.getText());
double aOutput = 0.5 * bInput * hInput;
area.setText("Area of your triangle is: " + aOutput);
} catch (NumberFormatException n) {
System.out.println(n.getMessage());
}
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new GUI());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Свойства Netbeans ...
Теперь, если все это ещерезультат не получается, вам нужно убедиться, что ваш класс GUI
настроен как "Основной класс".
Начните с щелчка правой кнопкой мыши по узлу проекта Netbeans и выберите "Свойства" (он находится ввнизу).
В «Свойствах проектов» выберите «Выполнить» из опций «Сборка» внизу слева.
Убедитесь, что ваш класс GUI
помечен как«Основной класс», используйте «Обзор», чтобы найти его, если он не