今天总结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中要添加的东西很多,如数组,还有一些并列的许多属性时,可以封装出一个实体类,那样操作会更加简单,这一点是老师提供的宝贵意见,等以后弄出来再补上吧!对于更深一步的优化以后学会了再说吧,今天就只能少说点啦~^_^~
转载于:https://blog.51cto.com/maidoujava/1264733