这是我的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
。我的光标在我的按钮上时出现我的按钮。我必须做这个项目,但我还没有创建用户界面。有人能帮助我吗?
答案 0 :(得分:2)
您应该避免使用null
布局。
您可以使用layout
经理实现相同(或近似的)用户界面。正如我在this comment指出的那样。
这里是MCVE我建议你在进一步的问题中做。另请查看How to ask guide以便提出更好的问题。
我创建了一个新课程,因为尝试修改你的课程比这还要多。复制粘贴并理解它是如何工作的,然后将其调整到您自己的类中。
修改强>
您可以添加separators来添加空格。同样正如@Andrew Thompson在评论中所说,你可以看一下How to use multiple layout managers(我在例子中做了类似的事情)。以下是How to add spaces in swing的其他选项。也许GridBag
Layout似乎更像null
布局。
此处布局guide(链接也由Andrew提供)。
阅读完问题后:
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
布局仅用于教育目的并没有错,但即使它更大,有时也更复杂,需要更多思考,它就是&#39 ; s 更好使用它们以避免意外错误。虽然您是学生使用它,但如果是专业课程,请避免使用它。
这里是this answer的输出所以你可以在秋千中看到空格的使用。
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();
}
});
}
}