Мой JTextField не появляется
Вот мой код Java:
JLabel persAdi,persSoyadi,persKodu,ust,alt;
JTextField ad,soyad,tckimlikno;
JButton bul,iptal;
public persBul(){
setSize (400,600);
setResizable(false);
setLocation (20, 20);
setVisible(true);
Container icerik = getContentPane();
icerik.setLayout(null);
icerik.getX();
ust=new JLabel("Bulmak İstediğiniz Personelin;");
ust.setBounds(10, 10, 200, 30);
icerik.add(ust);
persAdi=new JLabel("Adı:");
persAdi.setBounds(10,40,80,15);
icerik.add(persAdi);
ad=new JTextField();
ad.setBounds(50, 40, 80, 20);
icerik.add(ad);
persSoyadi=new JLabel("Soyadı:");
persSoyadi.setBounds(10, 180, 80, 30);
icerik.add(persSoyadi);
soyad=new JTextField();
soyad.setBounds(200, 40, 100, 30);
Icon bulPng=new ImageIcon(getClass().getResource("search.png"));
Icon iptalPng=new ImageIcon(getClass().getResource("cancel.png"));
bul=new JButton("",bulPng);
bul.setBounds(20, 120, 40, 40);
icerik.add(bul);
iptal=new JButton("",iptalPng);
iptal.setBounds(90, 120, 40, 40);
icerik.add(iptal);
}
public static void main(String[] args){
persBul app=new persBul();
}
Когда я отлаживаю этот код, мой JTextField
не появляется Только первый JLabel
может появиться, и я не вижу других JLabel
или же JTextField
или же JButton
, Моя кнопка появляется, когда на нее наведен курсор. Я должен сделать этот проект, но я еще не создал пользовательский интерфейс. Кто-нибудь может мне помочь?
1 ответ
Вы должны избегать использования null
макеты.
Вы можете достичь того же (или приблизительного) пользовательского интерфейса, используя layout
менеджеры. Как я указал в этом комментарии.
Вот MCVE, который я рекомендую вам сделать в дальнейших вопросах. Также посмотрите на Как спросить руководство, чтобы сделать лучшие вопросы.
Я создал новый класс, потому что пытаться изменить ваш был больше, чем этот. Скопируйте и вставьте его и поймите, как он работает, затем адаптируйте его к своему классу.
редактировать
Вы можете добавить разделители для добавления пробелов. Также, как сказал @Andrew Thompson в своем комментарии, вы можете посмотреть, как использовать несколько менеджеров компоновки (я сделал что-то подобное в примере). Вот другие варианты Как добавить пробелы в качелях. Может быть GridBag
Макет, который больше похож на null
раскладка.
Вот руководство по макетам (ссылка также предоставлена Эндрю).
Прочитав ваш вопрос:
Can I use setBounds(x,y,width,height); function with this code? Or What can I do for using this function (setBounds(x,y,width,height);)? Because I want to determine my own self x,y points of the JLabel,JTextField,JButton
Вы должны избегать использования setBounds(x,y,width,height);
любой ценой, потому что, как и Андрей, дал объяснение, почему:
Java GUIs might have to work on a number of platforms, on different screen resolutions & using different PLAFs. As such they are not conducive to exact placement of components.
Используя null
макет может привести к неожиданным ошибкам при выполнении программы. Это нормально использовать null
макет (я имею в виду, setBounds(x,y,width,height);
, если и только если вы новичок на свинге, но как можно скорее попробуйте начать использовать менеджеров по раскладке вместо null
раскладка.
То, что я хочу сказать, это: это не неправильно использовать null
макет только для образовательных целей, но даже если он больше, а иногда и сложнее и требует немного больше размышлений, лучше использовать их во избежание непредвиденных ошибок. Пока вы студент, используйте его, но избегайте, если это для профессиональной программы.
Вот результат этого ответа. Таким образом, вы можете увидеть использование пробелов в свинге.
import javax.swing.*;
import java.awt.*;
class example {
JFrame frame;
JPanel panel, hPanel1, hPanel2;
JLabel label1, label2;
JTextField field1, field2;
example() {
frame = new JFrame("example");
panel = new JPanel();
hPanel1 = new JPanel();
hPanel2 = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
hPanel1.setLayout(new FlowLayout());
hPanel2.setLayout(new FlowLayout());
label1 = new JLabel("Label 1");
label2 = new JLabel("Label 2");
field1 = new JTextField();
field2 = new JTextField();
field1.setColumns(6);
field2.setColumns(6);
hPanel1.add(label1);
hPanel1.add(field1);
hPanel2.add(label2);
hPanel2.add(field2);
panel.add(hPanel1);
panel.add(hPanel2);
frame.add(panel);
frame.setSize(400,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new example();
}
});
}
}