Swing中的顶级容器与布局
1. 顶级容器
JFrame(框架):表示主程序窗口
package top.level.container; import javax.swing.*; import java.awt.*; public class TopLevelContainerDemo { public static void main(String[] args) { JFrame jFrame = new JFrame("第一个Swing窗体"); //获取JFrame根节点的Container,此Container可以添加组件 Container contentPane = jFrame.getContentPane(); contentPane.add(new JLabel("这是一个窗体")); //设置默认的关闭窗体的动作,这里设置为关闭窗体之后推出程序 jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //将窗口显示的位置设置为屏幕的正中间 center(jFrame); jFrame.setSize(new Dimension(500,350)); jFrame.setVisible(true); } public static JFrame center(JFrame jFrame){ // 1、获取窗体的宽和高 int widthFrame = jFrame.getWidth(); int heightFrame = jFrame.getHeight(); // 2、获取屏幕的宽和高 Toolkit defaultToolkit = Toolkit.getDefaultToolkit(); Dimension screenSize = defaultToolkit.getScreenSize(); double widthScreen = screenSize.getWidth(); double heightScreen = screenSize.getHeight(); // 3、如果窗体的尺寸超过了,则直接用屏幕的尺寸 if (widthFrame > widthScreen){ widthFrame = (int)widthScreen; } if (heightFrame > heightScreen){ heightFrame = (int)heightScreen; } // 4、设置位置 int positionX = (int) ((widthScreen - widthFrame)/2); int positionY = (int)((heightScreen - heightFrame)/2); jFrame.setSize(new Dimension(widthFrame,heightFrame)); jFrame.setLocation(new Point(positionX,positionY)); return jFrame; } }
JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口
package top.level.container; import utils.Utils; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TopLevelContainerDialog { public static void main(String[] args) { JFrame jFrame = new JFrame("模拟dialog"); jFrame.setSize(500,350); Utils.centerFrame(jFrame); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JButton jButton = new JButton("点击打开dialog"); JDialog jDialog = new JDialog(jFrame,"Dialog",true); jDialog.setSize(100,75); jDialog.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); jDialog.setLocationRelativeTo(jFrame); // jDialog.setLocation(jFrame.getWidth()/2,jFrame.getHeight()/2); jButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { jDialog.setVisible(true); } }); jFrame.getContentPane().add(jButton); jFrame.setVisible(true); } }
JApplet(小程序):在浏览器内显示一个小程序界面
2. 布局方式
1、 边界布局(BorderLayout)
package layout; import javax.swing.*; import java.awt.*; public class SwingBorderLayoutDemo { public static void main(String[] args) { JFrame jFrame = new JFrame("边界布局"); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jFrame.setLocationRelativeTo(null); jFrame.setSize(new Dimension(500,350)); Container contentPane = jFrame.getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(new JLabel("南"),BorderLayout.SOUTH);//南边 contentPane.add(new JLabel("北"),BorderLayout.NORTH);//北边 contentPane.add(new JLabel("中"),BorderLayout.CENTER);//中间 contentPane.add(new JLabel("西"),BorderLayout.WEST);//西边 contentPane.add(new JLabel("西"),BorderLayout.EAST);//东边 jFrame.setVisible(true); } }
2、流式布局(FlowLayout)
package layout; import javax.swing.*; import javax.swing.plaf.PanelUI; import java.awt.*; public class SwingFlowLayoutDemo { public static void main(String[] args) { JFrame jFrame = new JFrame("边界布局"); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jFrame.setLocationRelativeTo(null); jFrame.setSize(new Dimension(500,350)); Container contentPane = jFrame.getContentPane(); contentPane.setLayout(new FlowLayout(FlowLayout.LEADING)); jFrame.add(new JButton("按钮1")); jFrame.add(new JButton("按钮2")); jFrame.add(new JButton("按钮3")); jFrame.setBackground(Color.BLUE); jFrame.setVisible(true); } }
3、网格布局(GridLayout)
package layout; import javax.swing.*; import java.awt.*; public class SwingGridLayoutDemo { public static void main(String[] args) { //1.创建Frame对象,并且标题设置为计算器 JFrame frame = new JFrame("计算器"); //2.创建一个Panel对象,并且往Panel中放置一个TextField组件 JPanel p1 = new JPanel(); p1.add(new JTextField(30)); //3.把上述的Panel放入到Frame的北侧区域 frame.add(p1, BorderLayout.NORTH); //4.创建一个Panel对象,并且设置其布局管理器为GridLayout JPanel p2 = new JPanel(); p2.setLayout(new GridLayout(3,5,4,4)); //5.往上述Panel中,放置15个按钮,内容依次是:0,1,2,3,4,5,6,7,8,9,+,-,*,/,. for (int i = 0; i < 10; i++) { p2.add(new Button(i+"")); } p2.add(new Button("+")); p2.add(new Button("-")); p2.add(new Button("*")); p2.add(new Button("/")); p2.add(new Button(".")); //6.把上述Panel添加到Frame的中间区域中国 frame.add(p2); //7.设置Frame为最佳大小 frame.pack(); //8.设置Frame可见 frame.setVisible(true); } }
4、盒子布局(BoxLaYout)
package layout; import utils.Utils; import javax.swing.*; import java.awt.*; public class SwingBoxLaLayoutDemo { public static void main(String[] args) { JFrame jFrame = new JFrame("盒子布局"); Utils.centerFrame(jFrame); Container contentPane = jFrame.getContentPane(); Box hBox = Box.createHorizontalBox(); hBox.add(new Button("水平按钮一")); hBox.add(new Button("水平按钮二")); jFrame.add(hBox,BorderLayout.NORTH); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jFrame.pack(); jFrame.setVisible(true); } }
5、空布局(null)