Java学习——图形用户界面编程

@源程序来自《Java程序设计标准教程(第二版)》邱加永


12.2  Swing容器


12.2.1  顶层容器

顶层容器可以独立存在,位于java.lang.Swing包层次的顶端,Swing顶层容器类包括JApplet、JFrame、JDialog、JWindow,分别从java.awt包中的Applet、Frame、Dialog和Window类直接衍生出来。


JFrame

import javax.swing.JFrame;
/** JFrame使用示例 */
public class JFrameTest {
	public static void main(String[] args) {
		//创建一个顶层容器窗口
		JFrame frame = new JFrame();
		//设置尺寸
		frame.setSize(300,300);
		//设置它的左上角的坐标
		frame.setLocation(300,200);
		//一次性设置尺寸和左上角的坐标
		frame.setBounds(300,200,300,300);
		//设置标题
		frame.setTitle("第一个窗体");
		//设置不允许调整窗口的大小
		frame.setResizable(false);
		//设置它的可见性
		frame.setVisible(true);
	}
}

JDialog


12.2.2通用容器

通用容器是中间容器,它们不能独立存在,必须存放到其他容器中,常用的通用容器有JPanel、JScrollPane、JToolBar、JSplitPane、JTabbedPane。


面板JPanel

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
/** JPanel使用示例 */
public class JPanelTest {
	public static void main(String[] args) {
		JFrame frame = new JFrame;
		frame.setLayout(null);  //自由布局
		frame.setBounds(300,300,320,320);  //边大小
		frame.setResizable(false);
		frame.setTitle("窗体中添加面板");

		JPanel panel = new JPanel();  //创建面板
		panel.setBounds(60,50,200,200);
		panel.setBackground(new Color(204,204,255));  //面板颜色
		frame.add(panel);  //将面板加到窗体上

		//设置关闭窗口时退出应用程序
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);  //显示窗体
	}
}

滚动面板JScrollPane

import javax.swing.JFrame;
import javax.swing.JScrollPane;
/** JScrollPane使用示例 */
public class JScrollPaneTest {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setLayout(null);  //自由布局
		frame.setBounds(300,300,320,320);  //边大小
		frame.setResizable(false);
		frame.setTitle("窗体中添加滚动面板");

		//创建指定滚动策略的面板
		JScrollPane panel = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScorllPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		panel.setBounds(60,50,200,200);
		frame.add(panel);

		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

工具栏JToolBar

import java.awt.BorderLayout;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JToolBar;
/** 工具栏的使用 */
public class JToolBarTest {
	public static void main(String[] args) {
		//获取指定路径名的图片URL
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		URL url1 = loader.getResource("newclass_wiz.gif");
		URL url2 = loader.getResource("save_edit.gif");
		URL url3 = loader.getResource("delete_edit.gif");
		URL url4 = loader.getResource("print_edit.gif");
		//创建图标按钮
		JButton button1 = new JButton(new ImageIcon(url1));
		button1.setToolTipText("新建文件");
		JButton button2 = new JButton(new ImageIcon(url2));
		button2.setToolTipText("保存文件");
		JButton button3 = new JButton(new ImageIcon(url3));
		button3.setToolTipText("删除");
		JButton button4 = new JButton(new ImageIcon(url4));
		button4.setToolTipText("打印");

		JToolBar bar = new JToolBar();  //创建工具集
		bar.add(button1);  //添加图标按钮
		bar.add(button2);
		bar.addSeparator();  //添加分隔符
		bar.add(button3);
		bar.add(button4);
		bar.setFloatable(true);  //设置可浮动

		JFrame frame = new JFrame("工具栏使用示例");
		frame.add(bar,BorderLayout.NORTH);
		frame.setSize(300,300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

分割式面板JSplitPane

import javax.swing.JFrame;
import javax.swing.JSplitPane;
/** 分割式面板的使用示例 */
public class JSplitPaneTest {
	public static void main(String[] args) {
		JFrame frame = new JFrame("分割式面板的使用示例");
		frame.setBounds(200,300,400,300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//第一个参数指定了分隔的方向,另外两个参数是放置在该分隔窗格的组件
		JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,new JPanel(),new JPanel());

		//设置分隔器是否显示用来展开/折叠分隔器的空间
		splitPane.setOneTouchExpandable(true);
		//设置分隔器的大小,单位为像素
		splitPane.setDeviderSize(8);
		//将分隔式面板添加到容器中
		frame.add(splitPane);
		frame.setVisible(true);

		//设置分隔器的位置,可以用整数(像素)或百分比来制定
		//用百分比时,需要在JSplitPane为可见后设置才起效
		splitPane.setDeviderLocation(0.5);
	}
}

选项卡面板JTabbedPane

import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
/** 选项卡面板的使用示例 */
public class JTabbedPaneTest {
    public static void main(String[] args) {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        URL iconURL1 = loader.getResource("newclass_wiz.gif");
        URL iconURL2 = loader.getResource("save_edit.gif");
        
        //创建选项卡面板,默认把选项卡放在上部
        JTabbedPane tabPane = new JTabbedPane();
        //创建一个StockPanel面板并添加到选项窗格,并指定图标
        tabPane.addTab("选项卡1",new ImageIcon(iconURL1),new JPanel());
        tabPane.addTab("选项卡2",new ImageIcon(iconURL2),new JPanel());
        //创建一个SaledPanel面板并添加到选项窗格
        tabPane.addTab("选项卡3",new JPanel());
        //设置所选择的此选项卡窗格的索引
        tabPane.setSelectedIndex(1);
        
        JFrame frame = new JFrame("选项卡面板的使用示例");
        frame.setBounds(200,300,400,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //将选项窗格放置在面板中
        frame.add(tabPane);
        frame.setVisible(true);
    }
}


12.2.3  专用容器

内部框架JInternalFrame

import javax.swing.JInternalFrame;
import javax.swing.JDesktopPane;
import javax.swing.JPanel;
/** 内部框架使用示例 */
public class JInternalFrameTest {
    public static void main(String[] args) {
        //创建多文档面板
        JDesktopPane desktopPane = new JDesktopPane();
        
        //创建第一个内部框架
        JInternalFrame interFrame = new JInternalFrame("内部框架1",true,true,true,true);
        interFrame.setBounds(10,10,200,200);
        interFrame.setVisible(true);
        //添加到多文档面板中
        desktopPane.add(interFrame);
        //创建第二个内部框架
        JInternalFrame interFrame2 = new JInternalFrame("内部框架2",true,true,true,true);
        interFrame2.setBounds(150,50,200,200);
        interFrame2.setVisible(true);
        desktopPane.add(interFrame2);
        
        JFrame frame = new JFrame("内部框架使用示例");
        frame.setBounds(200,300,400,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //将多文档面板放置在面板中央位置
        frame.add(desktopPane);
        frame.setVisible(true);
    }
}


12.3  


12.4  Swing组件


12.4.2  按钮


常规按钮JButton

JButton btn = new JButton("提交");  //按钮
btn.setBounds(50,420,60,26);  //移动组件并调整大小
panel.add(btn);  //添加到面板

复选框JCheckBox

JCheckBox hobbyChk1 = new JCheckBox("睡觉");
hobbyChk1.setBounds(80,170,60,26);
panel.add(hobbyChk1);  //添加到面板中
JCheckBox hobbyChk2 = new JCheckBox("运动",true);
hobbyChk2.setBounds(150,170,60,26);
panel.add(hobbyChk2);
JCheckBox hobbyChk3 = new JCheckBox("爬山");
hobbyChk3.setBounds(220,170,60,26);
panel.add(hobbyChk3);

单选按钮JRadioButton

ButtonGroup group = new ButtonGroup();  //按钮组
JRadioButton fRdo = new JRadioButton("男",true);  //创建一个单选按钮,默认为选中
fRdo.setBounds(80,110,50,26);  //移动组件并调整其大小
group.add(fRdo);  //添加到按钮组
JRadioButton mRdo = new JRadioButton("女",false);  //第二个单选按钮
group.add(mRdo);


12.4.3  文本组件

文本字段JTextField

JTextField nameTxt = new JTextField();
nameTxt.setBounds(80,50,120,26);
panel.add(nameTxt);

密码框JPasswordField

JPasswordField pwd = new JPasswordField();
pwd.setEchoChar('#');  //设置回显字符
pwd.setBounds(80,80,120,26);
panel.add(pwd);


12.5  布局管理器

每个容器都有一个布局管理器,默认布局管理器的层次关系:

BorderLayout:Window、Frame、Dialog、JFrame、JDialog

FlowLayout:JPanel


12.5.1  FlowLayout

import java.awt
import javax.swing.
/** FlowLayout 布局管理器 */
public class FlowLayoutTest {
    public static void main(String[] args) {
        JFrame f = new JFrame("FlowLayout布局管理器使用示例");
        f.setBounds(300,300,400,300);
        JPanel p = new JPanel();  //Panel类
        p.setBackground(Color.ORANGE);  //Panel为橘黄色
        p.setLayout(new FlowLayout());
        p.add(new JButton("按钮1"));  //在面板上加入5个按钮
        p.add(new JButton("按钮2"));
        p.add(new JButton("按钮3"));
        p.add(new JButton("按钮4"));
        p.add(new JButton("按钮5"));
        f.add(p);  //将面板添加到窗体上
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);  //显示窗体
    }
}


12.5.2  BorderLayout

import java.awt
import javax.swing
/** BorderLayout使用示例 */
public class BorderLayoutTest {
    public static void main(String[] args) {
        //创建一个顶层容器窗口
        JFrame frame = new JFrame();
        frame.setBounds(200,120,300,300);
        frame.setTitle("BorderLayout的示例");
        //设置为边框布局管理器(JFrame默认就是边框布局管理器)
        BorderLayout borderLayout = new BorderLayout(10,10);
        frame.setLayout(borderLayout);
        //Panel默认的布局管理器是流式布局管理器
        JPanel cPanel = new JPanel();
        cPanel.setBackground(Color.RED);
        cPanel.add(new JButton("中间1"));
        cPanel.add(new JButton("中间2"));
        cPanel.add(new JButton("中间3"));
        frame.add(cPanel,BorderLayout.CENTER);
        frame.add(new JButton("北"),BorderLayout.NORTH);
        frame.add(new JButton("南"),BorderLayout.SOUTH);
        frame.add(new JButton("东"),BorderLayout.EAST);
        frame.add(new JButton("西"),BorderLayout.WEST);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}





















你可能感兴趣的:(Java学习笔记)