今天总结java的几个组件吧!感觉好几天没有写了....
从swing和awt说起吧,这是个拥有很多丰富的方法的类的包,可以创建窗体、设置窗体可见、窗体Title、窗体关闭方式、窗体大小以及位置等等的方法、同时要是用窗体就需要建立一个画布,然后与窗体绑定,将一些组件增添到画布中去,这样就可以使用一些组件完成一些基本的功能,同时需要为组件添加监听,才能触发事件完成相应的功能,由于java组件与android组件有差别,即许多对应的名字不一样,且用法也会有出入,毕竟android有自己的一套api,但是要想学好android的界面,个人小小的认为还是可以先把java的研究研究再说吧
在swing中有JButton、JFrame、JLabel、JPanel、SwingConstants等等的已经封装好的类,所以我们只需要会如何使用便可以了,同样在awt中有BorderLayout、CardLayout、GridLayout、Image等等类,个人认为可以先看一下布局方式,下面先看一个东西南北中的布局吧:
package my01; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; public class Graphics extends JFrame{ JButton south = new JButton("south"); JButton west = new JButton("west"); JButton north = new JButton("north"); JButton east = new JButton("east"); JLabel center = new JLabel("center",SwingConstants.CENTER); JButton[] jb = new JButton[]{west,north,east,south}; public Graphics(){ JPanel pnBasic = new JPanel(); pnBasic.setColor.PINK); pnBasic.setLayout(new BorderLayout()); for(int i=0;i<jb.length;i++){ jb[i].addActionListener(new ButtonMonitor()); } pnBasic.add(south,BorderLayout.SOUTH); pnBasic.add(west,BorderLayout.WEST); pnBasic.add(north,BorderLayout.NORTH); pnBasic.add(east,BorderLayout.EAST); pnBasic.add(center,BorderLayout.CENTER); setContentPane(pnBasic); setTitle("东西南北"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(200,200); setVisible(true); } public class ButtonMonitor implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == jb[0]){ center.setText("West"); }else if(e.getSource() == jb[1]){ center.setText("north"); }else if(e.getSource() == jb[2]){ center.setText("east"); }else if(e.getSource() == jb[3]){ center.setText("south"); } } } public static void main(String[] args) { new Graphics(); } }
运行结果如下显示:
下面根据这个大框的主体布局增加了一些图片的处理,给按钮添加了监听,让其完成图片的显示,在其中又用到了cardLayout的图片显示布局:
package my01; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.GridLayout; import java.awt.Image; 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; import javax.swing.JPanel; public class Graphics1 extends JFrame { private CardLayout lyCard; JPanel pnBasic = new JPanel(); JPanel jp1 = new JPanel(); JPanel jp2 = new JPanel(); JButton btnLast = new JButton(); JButton btnNow = new JButton(); JButton btnNext = new JButton(); public Graphics1(){ pnBasic.setLayout(new BorderLayout()); lyCard = new CardLayout(); jp1.setLayout(lyCard); JLabel[] jlArrShow = new JLabel[7]; for(int i=0;i<jlArrShow.length;i++){ jlArrShow[i] = new JLabel(); ImageIcon icon = new ImageIcon("assets/logo/"+(i+1)+".png"); jlArrShow[i].setIcon(icon); jp1.add(i+"",jlArrShow[i]); } pnBasic.add(jp1,BorderLayout.CENTER); jp2.setLayout(new GridLayout(1,3)); String[] strArr = {"last","now","next"}; JButton[] btnArr = new JButton[strArr.length]; for(int i=0;i<btnArr.length;i++){ btnArr[i] = new JButton(strArr[i]); btnArr[i].addActionListener(new ButtonMonitor()); jp2.add(btnArr[i]); } pnBasic.add(jp2,BorderLayout.SOUTH); setContentPane(pnBasic); ImageIcon icon = new ImageIcon("assets/icon24.png"); Image p_w_picpath = icon.getImage(); setIconImage(p_w_picpath); setDefaultCloseOperation(EXIT_ON_CLOSE); setTitle("picture"); setBounds(200,200,400,400); pack(); setVisible(true); } public class ButtonMonitor implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { JButton btnClick = (JButton) e.getSource(); String strBtnTxt = btnClick.getText(); if("last".equalsIgnoreCase(strBtnTxt)){ lyCard.previous(jp1); }else if("now".equalsIgnoreCase(strBtnTxt)){ lyCard.first(jp1); lyCard.show(jp1, 2+""); }else if("next".equalsIgnoreCase(strBtnTxt)){ lyCard.next(jp1); } } } public static void main(String[] args) { new Graphics1(); } }
输出效果如下:
对应的按钮也可有相应的布局如上面的Layout流式布局,点击上面的按钮图片会相应的改变,如果frame中要添加的东西很多,如数组,还有一些并列的许多属性时,可以封装出一个实体类,那样操作会更加简单,这一点是老师提供的宝贵意见,等以后弄出来再补上吧!对于更深一步的优化以后学会了再说吧,今天就只能少说点啦~^_^~