1.窗体
容器是用来存放 按钮,输入框等组件:
1,JFrame是最常用的窗体型容器,默认情况下,在右上角有最大化最小化按钮
2,JDialog也是窗体型容器,右上角没有最大和最小化按钮
JDialog模态:当JFrame容器被JDialog容器设置为模态的时候,JFrame容器是不能被激活的
JFrame f = new JFrame("外部窗体");
JDialog d = new JDialog(f);
// 设置为模态
d.setModal(true);
2.布局器
布局器是用在窗体上的。 用来决定窗体上的组件摆放的位置和大小
// 设置布局器为null,即进行绝对定位,容器上的组件都需要指定位置和大小
f.setLayout(null);
// 设置布局器为FlowLayerout
// 容器上的组件水平摆放,不需要指定位置和大小
f.setLayout(new FlowLayout());
// 设置布局器为BorderLayerout
// 容器上的组件按照上北下南左西右东中的顺序摆放
f.setLayout(new BorderLayout());
// 加入到容器的时候,组件需要指定位置
f.add(b1, BorderLayout.NORTH);
// 设置布局器为GridLayerout,即网格布局器
// 该GridLayerout的构造方法表示该网格是2行3列
f.setLayout(new GridLayout(2, 3));
3.组件
//文字
JLabel l = new JLabel("LOL文字");
//文字颜色
l.setForeground(Color.red);
//图片
JLabel l = new JLabel();
//根据图片创建ImageIcon对象
ImageIcon i = new ImageIcon("e:/project/j2se/shana.png");
//设置ImageIcon
l.setIcon(i);
//label的大小设置为ImageIcon,否则显示不完整
l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight());
//复选框
JCheckBox bCheckBox = new JCheckBox("物理英雄");
//设置 为 默认被选中
bCheckBox.setSelected(true);
//单选框
JRadioButton b1 = new JRadioButton("物理英雄");
// 设置 为 默认被选中
b1.setSelected(true);
// 按钮分组
ButtonGroup bg = new ButtonGroup();
// 把按钮b1,b2放在 同一个 按钮分组里 ,这样同一时间,只有一个 按钮 会被选中
bg.add(b1);
bg.add(b2);
//下拉框
String[] heros = new String[] { "卡特琳娜", "库奇" };
JComboBox cb = new JComboBox(heros);
//对话框
int option = JOptionPane.showConfirmDialog(f, "是否 使用外挂 ?");
if (JOptionPane.OK_OPTION == option) {
String answer = JOptionPane.showInputDialog(f, "请输入yes,表明使用外挂后果自负");
if ("yes".equals(answer))
JOptionPane.showMessageDialog(f, "你使用外挂被抓住! 罚拣肥皂3次!");
}
// 输入框
JTextField tfName = new JTextField("");
tfName.setText("请输入账号");
//文本域
JTextArea ta = new JTextArea();
//设置自动换行
ta.setLineWrap(true);
// 密码框
JPasswordField pf = new JPasswordField("");
pf.setText("&48kdh4@#");
// 获取密码框里的内容,推荐使用getPassword,该方法会返回一个字符数组
char[] password = pf.getPassword();
String p = String.valueOf(password);
//进度条
JProgressBar pb = new JProgressBar();
//进度条最大100
pb.setMaximum(100);
//当前进度是50
pb.setValue(50);
//显示当前进度
pb.setStringPainted(true);
//文件选择
JFileChooser fc = new JFileChooser();
4.面板
面板(JPanel)的作用:把组件放在面板上,然后再把面板放在窗体上。一旦移动一个面板,其上面的组件,就会全部统一跟着移动
JPanel p1 = new JPanel();
// 设置面板大小
p1.setBounds(50, 50, 300, 60);
// 设置面板背景颜色
p1.setBackground(Color.RED);
JFrame上有一层面板,叫做ContentPane
平时通过f.add()向JFrame增加组件,其实是向JFrame上的 ContentPane加东西
// 创建一个水平JSplitPane,左边是面板p1,右边是p2
JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pLeft, pRight);
// 设置分割条的位置
sp.setDividerLocation(80);
// 把sp当作ContentPane
f.setContentPane(sp);
//带滚动条的面板
JTextArea ta = new JTextArea();
for (int i = 0; i < 1000; i++) {
ta.append(String.valueOf(i));
}
//自动换行
ta.setLineWrap(true);
JScrollPane sp = new JScrollPane(ta);
5.菜单
// 菜单栏
JMenuBar mb = new JMenuBar();
// 菜单
JMenu mHero = new JMenu("英雄");
// 菜单项
mHero.add(new JMenuItem("近战英雄"));
mHero.add(new JMenuItem("远程英雄"));
// 把菜单加入到菜单栏
mb.add(mHero);
// 把菜单栏加入到frame,这里用的是set而非add
f.setJMenuBar(mb);
6.工具栏
工具栏用于存放常用的按钮
// 工具栏
JToolBar tb = new JToolBar();
// 为工具栏增加按钮
JButton b1 = new JButton(new ImageIcon());
// 把工具栏放在north的位置
f.setLayout(new BorderLayout());
f.add(tb, BorderLayout.NORTH);
// 给按钮设置提示信息
b1.setToolTipText("坑爹英雄");
7.表格
显示一个Table需要两组数据
// 表格上的title
String[] columnNames = new String[]{ "id", "name", "hp", "damage" };
// 表格中的内容,是一个二维数组
String[][] heros = new String[][] {
{ "1", "盖伦", "616", "100" },
{ "2", "提莫", "512", "102" },
{ "3", "奎因", "832", "200" }
};
//创建表格
JTable t = new JTable(heros, columnNames);
// 把table放进去就可以看到table的title
JScrollPane sp = new JScrollPane(t);
// 把sp而非JTable加入到JFrame上,
f.add(sp, BorderLayout.CENTER);
// 设置列宽度
t.getColumnModel().getColumn(0).setPreferredWidth(10);