Java中setLayout(null)这一段为什么会导致文字消失?
packagechapter13;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;classMyJ...
package chapter13;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyJDialog extends JDialog{
public MyJDialog(MyFrame frame){
super(frame, "The 1st JDialog window", true);
Container container = getContentPane();
container.add(new JLabel("C'mon!"));
container.setBackground(new Color(255, 255, 200));
setBounds(120, 120, 100, 120);
}
}
public class MyFrame extends JFrame{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame();
}
public MyFrame(){
Container container = getContentPane();
container.setLayout(null);
JLabel jl = new JLabel("This is a JDialog window");
jl.setHorizontalAlignment(SwingConstants.RIGHT);
jl.setVerticalAlignment(SwingConstants.CENTER);
jl.setForeground(new Color(255, 0, 0));
container.add(jl);
JButton bl = new JButton("Get it!");
bl.setBounds(10, 10, 100, 20);
bl.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new MyJDialog(MyFrame.this).setVisible(true);
}
});
container.add(bl);
container.setBackground(Color.white);
setSize(200, 180);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
}
如上,"This is a JDialog window"这句并没有出现,即使去掉按钮的代码也不会出现。但是将container.setLayout(null);这段删掉后文字就出现了,求原因。谢谢 展开
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyJDialog extends JDialog{
public MyJDialog(MyFrame frame){
super(frame, "The 1st JDialog window", true);
Container container = getContentPane();
container.add(new JLabel("C'mon!"));
container.setBackground(new Color(255, 255, 200));
setBounds(120, 120, 100, 120);
}
}
public class MyFrame extends JFrame{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame();
}
public MyFrame(){
Container container = getContentPane();
container.setLayout(null);
JLabel jl = new JLabel("This is a JDialog window");
jl.setHorizontalAlignment(SwingConstants.RIGHT);
jl.setVerticalAlignment(SwingConstants.CENTER);
jl.setForeground(new Color(255, 0, 0));
container.add(jl);
JButton bl = new JButton("Get it!");
bl.setBounds(10, 10, 100, 20);
bl.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new MyJDialog(MyFrame.this).setVisible(true);
}
});
container.add(bl);
container.setBackground(Color.white);
setSize(200, 180);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
}
}
如上,"This is a JDialog window"这句并没有出现,即使去掉按钮的代码也不会出现。但是将container.setLayout(null);这段删掉后文字就出现了,求原因。谢谢 展开
1个回答
展开全部
JFrame默认的Layou为BorderLayout,在BorderLayout中添加组件应该明确方位,比如:
container.add(jl,BorderLayout.CENTER);
container.add(bl,BorderLayout.NORTH);
如果布局为BorderLayout但是使用的是container.add(Component)这个方法,BorderLayout会默认的放在CENTER处。
所以,如果去掉container.setLayout(null);这一句,先加入了jl,有加入了bl,bl把jl覆盖了。
如果按照你上面给出的代码,给JFrame设置的Layout为null,即没有布局,那你如果要加入组件,必须说明组件的大小与位置,否则大小就是0,0,谁都看不到。
希望能帮助到你。
container.add(jl,BorderLayout.CENTER);
container.add(bl,BorderLayout.NORTH);
如果布局为BorderLayout但是使用的是container.add(Component)这个方法,BorderLayout会默认的放在CENTER处。
所以,如果去掉container.setLayout(null);这一句,先加入了jl,有加入了bl,bl把jl覆盖了。
如果按照你上面给出的代码,给JFrame设置的Layout为null,即没有布局,那你如果要加入组件,必须说明组件的大小与位置,否则大小就是0,0,谁都看不到。
希望能帮助到你。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询