Я работаю над приложением, и я застрял в начальной фазе. У меня есть JTextField
в JPanel
в JFrame
. JTextField
нет. Если я используюкомпонент поворота не отображается
JPanel p0 = (JPanel) f.getContentPane();
это работает. Но не с
JPanel p0 = new JPanel();
f.add(p0);
Так что проблемы:
- Почему не поле видно? (самое главное q)
- В чем разница между двумя вышеупомянутыми подходами?
Код:
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
public class Main
{
static Font fontDefault = new Font("arial", Font.PLAIN, 15);
public static void main (String [ ] args)
{
JFrame f = new JFrame("Liquid");
f.setSize(new Dimension(840, 400));
//f.setIconImage(image);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//JPanel p0 = (JPanel) f.getContentPane();// is it necessary?
JPanel p0 = new JPanel();
p0.setLayout(null);
JPanel p1 = new JPanel();
p1.setLayout(null);
JTextField tfHostName = new JTextField("default text", 20);
tfHostName.setBounds(50, 50, 200, 25);
tfHostName.setFont(fontDefault);
JButton bRequest = new JButton("request");
JButton bReset = new JButton("reset");
JTextArea taTest = new JTextArea("default text", 1, 20);
p0.add(tfHostName);
f.add(p0);
f.add(p1);
p0.add(taTest);
//f.pack();
f.setResizable(false);
f.setVisible(true);
}
}
В качестве напоминания:
Он работает с JPanel p0 = (JPanel) f.getContentPane();
но почему идентификатор не с 2-го подхода, который я более комфортно? Плюс, таким образом, как добавить вторую панель и как сделать автоматическую компоновку компонентов на каждой панели?
Update:
я понял, что код не работает, в первую очередь, наверное, потому что я не указали координаты/положение ...
для лучшей помощи скорее отправить сообщение [SSCCE] (http://sscce.org/), краткое, выполнимое, компилируемое о JPanel p0 = new JPanel(); f.add (p0); – mKorbel
EDITED. Добавлен код. Я хотел сделать это в первую очередь, но это не позволило мне, заявив, что вопрос не соответствует их стандартам ... – mireazma
'В чем разница между двумя вышеупомянутыми подходами?' - в первом подходе используется стандартный ящик-манипулятор по умолчанию , Второй подход не использует диспетчер компоновки. Не используйте нулевой макет !!! Не используйте setBounds() !!! Почему новички всегда играют с нулевым макетом, а затем жалуются, когда они не работают? Весь код кода, который мы публикуем на этом форуме, использует диспетчер компоновки. Где вы получаете этот код, который показывает вам использовать нулевой макет? Мой совет - игнорировать этот веб-сайт. – camickr