Хорошо, давайте начнем с ...
JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);
Вы:
- Создать кнопку
- Создать панель
- ВыДобавить кнопку на панель
- Вы добавляете панель к рамке
А потом ...
JFrame f = new JFrame("calculator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new
f.setVisible(true);
Вы создаете новый экземпляр JFrame
и покажи это, но это ничего не значит ?!?!
Вместо этого вам следует избегать расширения от JFrame
и, возможно, использовать вместо него JPanel
, что-то вроде ...
public class Swing extends JPanel {
private JButton button;
private JLabel label;
public Swing() {
creatButton();
add(button);
}
public void creatButton() {
JButton btn = new JButton("click me");
}
}
Тогда вы можете просто создать окно (или другоеконтейнер) и добавьте его к нему
JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new Swing());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
Как правило, JFrame
является действительно плохой точкой расширения, это сложный, составной компонент, который блокирует вас в одном случае использования.Как правило, лучше начинать с чего-то JPanel
, которое предоставляет вам гораздо большую гибкость и намного меньшую сложность, и его легко использовать повторно.
Вам действительно очень нужно избегать null
макетов