窗口
1.JFrame类的实例就是一个底层容器,即窗口,JDialog类的实例也是一个底层容器,即对话框,其他组件必须被添加到底层容器中,借助底层容器和操作系统进行交互。JFrame类是Container类的间接子类,窗口也是一个容器,可以向其中添加组件。窗口默认被添加到显示器屏幕上,因此不允许将窗口添加到另一个容器里。
2.Component类的子类及间接子类创建的对象称为一个组件;Container类的子类及间接子类创建的对象称为一个容器;可以通过add方法向容器中添加组件;可以通过removeAll方法移除容器中的所有组件;remove(Component c)方法移除指定的组件;容器本身也是一个组件,可以把一个容器嵌套在另一个容器中;当容器中添加或移除组件时,应让容器调用validate方法,保证容器中的组件能正确显示出来。
3.setDefaultCloseOperation用来设置关闭图标窗口的处理效果:
EXIT_ON_CLOSE:结束窗口所在的应用程序
DO_NOTHING_ON_CLOSE:什么也不做
HIDE_ON_CLOSE:隐藏当前窗口
DISPOSE_ON_CLOSE:隐藏当前窗口并释放窗体所占有的其他资源
public class Text1 {
public static void main(String[] args) {
JFrame jFrame=new JFrame("窗口");
Container container=jFrame.getContentPane();
container.setBackground(Color.BLUE);//设置背景为蓝色
jFrame.setVisible(true);//设置窗口可见
jFrame.setBounds(100,100,100,100);//设置窗口的位置和长,宽
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);窗口关闭效果
}
}
效果:
菜单,菜单条,菜单项
1.菜单放在菜单条里,菜单项放在菜单里
2.JComponent的子类JMenuBar负责创建菜单条,JMenuBar的一个实例就是一个菜单条;子类JMenu负责创建菜单,JMenu的一个实例就是一个菜单;子类JMenuItem负责创建菜单项,JMenuItem的一个实例就是一个菜单项。菜单本身也是一个菜单项,可以将菜单看作菜单项添加到某个菜单中。
3.可以通过setIcon方法为菜单项设置图标
public class Text2 extends JFrame{
JMenuBar jMenuBar;
JMenu jMenu1,jMenu2;
JMenuItem item1,item2;
Text2(){
setLayout(new FlowLayout());
jMenuBar=new JMenuBar();//菜单条
jMenu1=new JMenu("菜单");//菜单
jMenu2=new JMenu("java");//菜单里的菜单
item1=new JMenuItem("c");//菜单项
item2=new JMenuItem("c++");
jMenu2.add(new JMenuItem("继承"));
jMenu2.add(new JMenuItem("封装"));
setJMenuBar(jMenuBar);
jMenuBar.add(jMenu1);
jMenu1.add(jMenu2);
jMenu1.add(item1);
jMenu1.add(item2);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,200,200);
}
public static void main(String[] args) {
Text2 text2=new Text2();
}
}
常用组件与布局
1.常用组件:
JTextField:文本框:允许用户输入单行文本
JTextArea:文本区:允许用户输入多行文本
JButton:按钮:单击
JLabel:标签:为用户提供提示信息
JCheckBox:复选框:为用户提供多项选择,有选中与未选中两种状态
JRadioButton:单选按钮:为用户提供单项选择
JComboBox:下拉列表:单项选择
JPasswordField:密码框,默认显字符是*,可通过setEchoChar(char c)重新设置显字符
public class Text3 extends JFrame{
JComboBox<String> comboBox;
JRadioButton radioButton1,radioButton2;
ButtonGroup group;
JCheckBox checkBox1,checkBox2;
Text3(){
setLayout(new FlowLayout());
checkBox1=new JCheckBox("音乐");
checkBox2=new JCheckBox("美术");
radioButton1=new JRadioButton("man");
radioButton2=new JRadioButton("woman");
group=new ButtonGroup();
group.add(radioButton1);
group.add(radioButton2);
comboBox=new JComboBox<>();
comboBox.addItem("java");
comboBox.addItem("c++");
add(comboBox);
add(radioButton1);
add(radioButton2);
add(checkBox1);
add(checkBox2);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,400,200);
}
public static void main(String[] args) {
Text3 text3=new Text3();
}
}
效果:
2.常用容器
JPanel面板:默认是FlowLayout布局,可以向面板中添加组件,再把面板添加到其他容器中
JTabbedPane:选项卡容器,当向选项卡容器添加组件时,会为这个组件设置选项卡,这样点击这个选项卡就会显示这个组件,选项卡默认在顶部从左向右排列。也可以通过JTabbedPane.TOP等设置位置
JScrollPane:滚动窗格,可以将文本区放在滚动窗格中
如:
JScrollPane jScrollPane=new JScrollPane(new TextArea())
JSplitPane:拆分窗格,可分为左右或上下两部分,有两个构造方法:
JSplitPane(int a,Component b,Component c)
//参数a决定时水平还是垂直:HORIZONTAL_SPLIT,VERTICAL_SPLIT
//如
JSplitPane jSplitPane=new JSplitPane(JSplitPane.VERTICAL_SPLIT,new JButton(),new JButton())
JSplitPane(int a,boolean d,Component b,Component c)
//参数d是决定拆分线移动时,组件是否连续变化,true是连续
JLayeredPane:分层窗格
3.常用布局