<目录>
(2) FlowLayout(顺序布局器:容器上的组件水平摆放)
(3) BorderLayout(边框布局器:容器上的组件按上北、下南、左西、右东、中的顺序摆放)
(4) GridLayout(网格布局器:容器上的组件按网格区域摆放)
(5) setPreferredSize(使用布局器的时候,改变组件显示大小,仅部分有效)
<正文内容>
package practice; import javax.swing.JButton; import javax.swing.JFrame;
public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的窗体"); //主窗体,括号里面是标题 f.setSize(400,300); //主窗体设置大小,宽400高300 f.setLocation(200, 200); //主窗体设置位置,距离(屏幕左侧200,屏幕上方200) f.setLayout(null); //主窗体中的组件设置为绝对定位 JButton b=new JButton("Kannyi的按钮");//按钮组件,还没设置功能 b.setBounds(50,50,280,30); //同时设置组件的位置和大小 f.add(b); //把按钮加入到主窗体中 //关闭窗体时,退出程序,不关会越来越卡 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //让窗体可见 f.setVisible(true); } }
界面如下:
package practice; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的窗体"); //主窗体,括号里面是标题 f.setSize(400,300); //主窗体设置大小,宽400高300 f.setLocation(580,200); //主窗体设置位置,距离(屏幕左侧200,屏幕上方200) f.setLayout(null); //主窗体中的组件设置为绝对定位 //标签,用于显示信息,比如文本或图像 JLabel l1=new JLabel(); //获取图像 ImageIcon i=new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png"); //设置指定的图像到标签中 l1.setIcon(i); //设置标签的位置和大小 l1.setBounds(50,50,i.getIconWidth(),i.getIconHeight()); JLabel l2=new JLabel(); l2.setText("Kannyi的文本"); //设置指定的文本到标签中 l2.setBounds(30, 30, 80, 12); //设置标签的位置和大小,高度太高排版会出问题,12正好 JButton b=new JButton("隐藏图片"); //按钮组件 b.setBounds(250,200,100,30); //给按钮增加监听 //写法1 /*---------------------------------------------- b.addActionListener(new ActionListener(){ //当按钮被点击时,actionPerformed方法就会被执行 //就会触发ActionEvent事件 public void actionPerformed(ActionEvent e) { l.setVisible(false); } }); -----------------------------------------------*/ //写法2 b.addActionListener(e->l1.setVisible(false)); f.add(b); f.add(l1); f.add(l2); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
package practice; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Test { public static void main(String[] args) { JFrame f = new JFrame("Kannyi的窗体"); f.setSize(400, 300); f.setLocation(580, 200); f.setLayout(null); JLabel l = new JLabel(); ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png"); l.setIcon(i); l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight()); //增加键盘监听 f.addKeyListener(new KeyListener() { //键被弹起 public void keyReleased(KeyEvent e) { //左键37 上键38 右键39 下键40 /* 可用下面这个函数知道键位的Code System.out.println(e.getKeyCode()); */ if (e.getKeyCode() == 37) { //图片向左移动 (x坐标减少,y坐标不变) l.setLocation(l.getX() -10, l.getY()); } if (e.getKeyCode() == 38) { //图片向上移动 (x坐标不变,y坐标减少) l.setLocation(l.getX(), l.getY() - 10); } if (e.getKeyCode() == 39) { //图片向右移动 (x坐标增加,y坐标不变) l.setLocation(l.getX() + 10, l.getY()); } if (e.getKeyCode() == 40) { //图片向下移动 (x坐标不变,y坐标增加) l.setLocation(l.getX(), l.getY() + 10); } } //键被按下,可以实现连续运动 //之前被定义过的键位就不能用了 public void keyPressed(KeyEvent e) { } // 一个按下弹起的组合动作 //不会用!!! public void keyTyped(KeyEvent e) { } }); f.add(l); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下(看不出什么特别,因为要用键盘实现上下左右操作):
package practice; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class Test { public static void main(String[] args) { JFrame f = new JFrame("Kannyi的窗体"); f.setLayout(null); f.setSize(500, 400); f.setLocationRelativeTo(null); //设置窗体在屏幕正中央 JLabel l = new JLabel(); ImageIcon i = new ImageIcon("C:/Users/ASUS/Pictures/其他/img.png"); l.setIcon(i); l.setBounds(150, 100, i.getIconWidth(), i.getIconHeight()); /* //鼠标监听-方法1 //这种方法的缺点在于每个方法都要写出来,很麻烦 l.addMouseListener(new MouseListener() { //释放鼠标 public void mouseReleased(MouseEvent e) { } //按下鼠标 public void mousePressed(MouseEvent e) { } //鼠标退出 public void mouseExited(MouseEvent e) { } //鼠标进入 public void mouseEntered(MouseEvent e) { //Random r.nextInt(int n)可以随机生成一个[0,n)的区间 Random r = new Random(); //下面的相减操作是防止图片随机到窗体外 int x = r.nextInt(f.getWidth() - l.getWidth()); int y = r.nextInt(f.getHeight() - l.getHeight()); l.setLocation(x, y); } //按下释放组合动作为点击鼠标 public void mouseClicked(MouseEvent e) { } }); */ //鼠标监听-方法2 //用适配器,只需要重写用到的方法即可,较为方便 l.addMouseListener(new MouseAdapter() { //只有mouseEnter用到了 public void mouseEntered(MouseEvent e) { Random r=new Random(); int x=r.nextInt(f.getWidth()-l.getWidth()); int y=r.nextInt(f.getHeight()-l.getHeight()); l.setLocation(x, y); } }); f.add(l); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下(看不出什么特别,因为要用鼠标实现操作):
package practice; import javax.swing.JButton; import javax.swing.JDialog; public class Test { public static void main(String[] args) { JDialog d=new JDialog(); //对话框 d.setTitle("Kannyi的对话框"); //设置对话框的标题 d.setSize(400,300); d.setLocation(200,200); d.setLayout(null); JButton b=new JButton("kannyi的按钮"); b.setBounds(50,50,280,30); d.add(b); d.setVisible(true); } }
界面如下:
(2)创建一个简单的模态对话框(父窗体不能被激活,除非对话框关闭)
package practice; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的外部窗体"); f.setSize(600, 500); f.setLocation(100, 100); JDialog d=new JDialog(f); //根据外部窗体实例化JDialog d.setModal(true); //设置为模态,其后的父窗体不能被激活,除非对话框关闭 d.setTitle("Kannyi的模态对话框"); d.setSize(400,300); d.setLocation(200,200); d.setLayout(null); JButton b=new JButton("Kannyi的按钮"); b.setBounds(50,50,280,30); d.add(b); f.setVisible(true); d.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
界面如下:
package practice; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的窗口"); f.setSize(400,300); f.setLocation(200, 200); f.setLayout(null); JButton b=new JButton("Kannyi的按钮"); b.setBounds(50, 50, 280, 30); f.add(b); //窗体大小不可变化 f.setResizable(false); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
package practice; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的窗体"); f.setSize(400,300); f.setLocation(200,200); //绝对定位:设置布局器为null,容器上的组件都需要指定位置和大小 f.setLayout(null); JButton b1=new JButton("按钮1"); b1.setBounds(50,50,70,30); JButton b2=new JButton("按钮2"); b2.setBounds(150,50,80,30); //没有指定位置和大小,不会出现在容器上 JButton b3=new JButton("按钮3"); f.add(b1); f.add(b2); f.add(b3); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
package practice; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的窗体"); f.setSize(400,300); f.setLocation(200, 200); //设置布局器为FlowLayrout //容器上的组件水平摆放 f.setLayout(new FlowLayout()); JButton b1=new JButton("按钮1"); JButton b2=new JButton("按钮2"); JButton b3=new JButton("按钮3"); //加入到容器,无需单独指定大小和位置 f.add(b1); f.add(b2); f.add(b3); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
package practice; import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f=new JFrame("Kannyi的窗体"); f.setSize(400,300); f.setLocation(200,200); //设置布局为BorderLayout //容器上的组件按照 上北 下南 左西 右东 的顺序摆放(可以自己设置) f.setLayout(new BorderLayout()); JButton b1 = new JButton("按钮1"); JButton b2 = new JButton("按钮2"); JButton b3 = new JButton("按钮3"); JButton b4 = new JButton("按钮4"); JButton b5 = new JButton("按钮5"); //加入到容器的时候,需要指定位置 f.add(b1, BorderLayout.NORTH); f.add(b2, BorderLayout.SOUTH); f.add(b3, BorderLayout.WEST); f.add(b4, BorderLayout.EAST); f.add(b5, BorderLayout.CENTER); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f = new JFrame("Kannyi的窗体"); f.setSize(400, 300); f.setLocation(200, 200); // 设置布局器为GridLayerout,即网格布局器 // 该GridLayerout的构造方法表示该网格是2行3列 f.setLayout(new GridLayout(2, 3)); JButton b1 = new JButton("甲"); JButton b2 = new JButton("乙"); JButton b3 = new JButton("丙"); JButton b4 = new JButton("丁"); JButton b5 = new JButton("戊"); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] args) { JFrame f = new JFrame("Kannyi的窗体"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new FlowLayout()); JButton b1 = new JButton("甲"); JButton b2 = new JButton("乙"); JButton b3 = new JButton("丙"); // 即便使用布局器,也可以通过setPreferredSize,向布局器建议该组件显示的大小 b3.setPreferredSize(new Dimension(180, 40)); f.add(b1); f.add(b2); f.add(b3); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
package practice; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; public class Test33 { public static void main(String[] args) { JFrame f = new JFrame("Kannyi"); f.setSize(400, 300); f.setLocation(200, 200); //菜单栏 JMenuBar mb = new JMenuBar(); //菜单 JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); //把菜单加入到菜单栏 mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); //把菜单栏加入到frame,这里用的是set而非add f.setJMenuBar(mb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
package practice; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; public class Test34 { public static void main(String[] args) { JFrame f = new JFrame("Kannyi的窗体"); f.setSize(500, 400); f.setLocation(200, 200); JMenuBar mb = new JMenuBar(); JMenu mHero = new JMenu("英雄"); JMenu mItem = new JMenu("道具"); JMenu mWord = new JMenu("符文"); JMenu mSummon = new JMenu("召唤师"); JMenu mTalent = new JMenu("天赋树"); //菜单项 mHero.add(new JMenuItem("近战")); mHero.add(new JMenuItem("远程")); mHero.add(new JMenuItem("物理")); mHero.add(new JMenuItem("坦克")); mHero.add(new JMenuItem("法系")); mHero.add(new JMenuItem("辅助")); mHero.add(new JMenuItem("打野")); mHero.add(new JMenuItem("突进")); mHero.add(new JMenuItem("男性")); mHero.add(new JMenuItem("女性")); //分隔符 mHero.addSeparator(); mHero.add(new JMenuItem("所有")); mb.add(mHero); mb.add(mItem); mb.add(mWord); mb.add(mSummon); mb.add(mTalent); f.setJMenuBar(mb); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下:
界面如下: