Кнопка и текстовое поле не отображаются в Java
для школы мне пришлось сделать JFrame и внутри этой одной кнопки и двух текстовых полей. Что бы вы ни поместили в Textfield, нужно попасть в textfield two при нажатии кнопки. Я получил код до такой степени, что должен видеть текстовые поля и кнопку при запуске программы. По какой-то причине.
My come so far:
package helloworld;
import javax.swing.*;
import java.awt.event.*;
public class HelloWorld extends JFrame {
public static void main(String[] args) {
JFrame frame = new HelloWorld();
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Hello World Button App");
JPanel panel = new JPanel();
frame.setContentPane(panel);
fram.setVisible(true);
}
}
class panel extends JPanel {
public JButton btn1 = new JButton("Klick!");
public JTextField txt1 = new JTextField(10);
public JTextField txt2 = new JTextField(10);
public panel() {
add(btn1);
add(txt1);
add(txt2);
}
}
мне еще не разрешено публиковать изображения, но я предоставлю ссылку на изображение вниз здесь
I извините, если этот вопрос allready exests, но я не мог найти аналогичный вопрос. Я новичок в программировании, поэтому, пожалуйста, не кричите на меня, когда я что-то забыл или написал что-то не так!
3 ответов
здесь я немного изменил ваш код, но сделал аналогичным образом.
Я не буду продлевать JFrame
пока и если я не хочу делать что-то творческое, но вы всегда можете.
вы уже продлен JFrame
, поэтому нет смысла вызывать методы с frame.foo()
но просто foo()
и самое главное JFrame frame = new HelloWorld()
, не будет иметь смысла, если вы уже расширили свой класс с JFrame
:
import javax.swing.*;
public class HelloWorld extends JFrame{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new HelloWorld().setVisible(true);
}
});
}
public HelloWorld()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Hello World Button App");
panel pan= new panel();
add(pan.panel);
pack();
setVisible(true);
}
}
class panel {
private JButton btn1 = new JButton("Klick!");
private JTextField txt1 = new JTextField(10);
private JTextField txt2 = new JTextField(10);
JPanel panel;
public panel() {
panel = new JPanel();
panel.add(btn1);
panel.add(txt1);
panel.add(txt2);
}
}
кроме того, вы также можете расширить свой panel
класс JPanel
:
public HelloWorld()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Hello World Button App");
panel pan= new panel();
add(pan);
pack();
setVisible(true);
}
}
class panel extends JPanel {
private JButton btn1 = new JButton("Klick!");
private JTextField txt1 = new JTextField(10);
private JTextField txt2 = new JTextField(10);
public panel() {
add(btn1);
add(txt1);
add(txt2);
}
}
это потому, что ваше имя класс panel
не JPanel
изменить это:
panel panel = new panel();
frame.setContentPane(panel);
frame.setVisible(true);
вы должны попытаться использовать имена для своего класса, которые не так запутаны, и попытаться объявить их в верхнем регистре.
пример:
Class Panel extends JPanel {}
вы объявили класс panel
что вы нигде не используете. Пожалуйста, замените строку bwlow:
JPanel panel = new JPanel();
С:
SomePanel panel = new SomePanel();
тогда ваш класс panel
становится SomePanel
чтобы следовать правильному названию класса.
некоторые мысли, чтобы помочь вам:
- Назовите свои классы, следуя стилю Java
- не используйте открытые поля
- установка макетов на панелях. На этот раз это сработало для вас, поскольку по умолчанию
FlowLayout
.