JavaAwtSwingComponent用setLocation()setSize()setBounds()调位置尺寸时,要用 父组件.setLayout(null);移除layout
父组件.setLayout(null) 如 frame.setLayout(null)
package component;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JLabel;
public class SetSizeLocationBounds要将layout设为null {
public static void main(String...arguments)throws Exception{
Frame frame = new Frame(Thread.currentThread().getStackTrace()[1].getClassName());
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
});
frame.setBounds(100, 100, 1024, 768);
//父组件移除layout后, 子件setLocation()setSize()setBounds()才有效
frame.setLayout(null);
JLabel jlb010 = new JLabel("JLabel010,<br>JLabel的文字默认是垂直居中水平靠左的"); frame.add(jlb010);
//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
jlb010.setOpaque(true); jlb010.setBackground(Color.GRAY); jlb010.setForeground(Color.CYAN);
jlb010.setLocation(300, 555);
jlb010.setSize(400, 100);
Label lb010 = new Label("Label010 Label中文显示是否正常"); frame.add(lb010);
lb010.setBackground(new Color(66,55,44,200));
lb010.setLocation(800,555);
lb010.setSize(100, 100);
JLabel jlb020 = new JLabel("<html><body style='background:blue;padding:10px;'>"
+ "<div>jlb020</div>"
+ "</body></html>");
frame.add(jlb020);
jlb020.setLocation(10,555); jlb020.setSize(200,100);
// jlb020.setBounds(20, 500, 200, 100);
//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
jlb020.setOpaque(true); jlb020.setBackground(Color.cyan);
JLabel jlb030 = new JLabel("<html><body style='background:yellow;color:red;'>"
+ "<div style='font-size:20px; text-align:center; color:black;'>jlb030</div>"
+ "<div>JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见</div>"
+ "可看到JLabel的html设置的background在JLabel本身的background上,未必会覆盖整个JLabel"
+ "</body></html>");
frame.add(jlb030);
jlb030.setBounds(10, 5, 800, 100);
//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
jlb030.setOpaque(true); jlb030.setBackground(Color.cyan);
//
jlb030.setForeground(Color.DARK_GRAY);
JLabel jlb040 = new JLabel("<html><body style='background:green;color:red;'>"
+ "<div style='font-size:20px; text-align:center; color:black;'>jlb040</div>"
+ "<div>JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见</div>"
+ "<div>JLabel可以在new时指定水平对齐方式, 垂直对齐方式要之后使用方法, <br>JLabel的文字默认是垂直居中水平靠左的</div>"
+ "</body></html>"
, JLabel.CENTER);
frame.add(jlb040);
jlb040.setBounds(10, 150, 800, 150);
//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
jlb040.setOpaque(true); jlb040.setBackground(Color.cyan);
//
jlb040.setForeground(Color.DARK_GRAY);
// jlb040.setHorizontalAlignment(JLabel.CENTER);
// jlb040.setVerticalAlignment(JLabel.BOTTOM);
JLabel jlb050 = new JLabel("<html><body style='background:blue;color:red;'>"
+ """
<ul>
<li>JLabel可通过setHorizontalAlignment(JLabel.RIGHT);设置水平对齐方式</li>
<li>JLabel可通过etVerticalAlignment(JLabel.BOTTOM);设置垂直对齐方式</li>
</ul>
"""
+ "</body></html>"
);
frame.add(jlb050);
jlb050.setBounds(0, 350, 800, 150);
//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
jlb050.setOpaque(true); jlb050.setBackground(Color.cyan);
//
jlb050.setForeground(Color.DARK_GRAY);
jlb050.setHorizontalAlignment(JLabel.RIGHT);
jlb050.setVerticalAlignment(JLabel.BOTTOM);
frame.setVisible(true);
}
}
javaAwtSwing的一些布局layout
所属类包 | 布局管理器名称 | 说明 |
---|---|---|
Java.awt | FlowLayout(流式布局) | 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 |
Java.awt | BorderLayout(边界布局) | 容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。 |
Java.awt | GridLayout(网格布局 | 容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。 |
Java.awt | CardLayout(卡片布局) | 如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况 |
Java.awt | GridBagLayout(网格包布局) | GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格 |
Java.swing | BoxLayout(箱式布局) | 允许在容器中纵向或者横向放置多个控件 |
Java.swing | SprigLayout(弹簧布局) | 根据一组约束条件放置控件 |
无 | 空布局 | 不使用布局管理器,按照控件自身提供的大小、位置信息放置控件 |