Java中GUI界面美化帮助类总结

1、更换面板JPanel的背景只需重写JPanel类中的paintComponent(Graphics gs)方法即可


import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class MyJpanel extends JPanel {
	
	String url="sk.png";
	public MyJpanel(String url){
		super();
		this.url = url;
	}
	public MyJpanel(){
		super();
	}
	@Override
	public void paintComponent(Graphics gs) {
		Graphics2D g = (Graphics2D) gs;
		super.paintComponent(g);

		InputStream in;
		try {
			in = new FileInputStream(url);
			// 画背景图片
			// Image image =
			// Toolkit.getDefaultToolkit().getImage(getClass().getResource("sk.png"));
			BufferedImage image = ImageIO.read(in);
			g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(),
					this);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

2、重写Jtable类中的getTableheader方法来设置表头的样式


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;

//重写Jtable类中的getTableheader方法来设置表头的样式

public class MyJTable extends JTable {
	boolean[] columnEditables = { false, false, false, false };
	public MyJTable(boolean[] columnEditables) {
		this.columnEditables = columnEditables;
	}
	public MyJTable() {
		super();
	}
	@Override
	public JTableHeader getTableHeader() {
		// TODO Auto-generated method stub
		JTableHeader tableHeader = super.getTableHeader();
		// 表格列不可移被移动
		tableHeader.setReorderingAllowed(false);
		// 设置表头的背景颜色
		tableHeader.setBackground(new Color(224, 255, 255));
		// 设置表头的高度
		tableHeader.setPreferredSize(new Dimension(this.getWidth(), 30));
		// 设置表头的字体
		tableHeader.setFont(new Font("楷体", Font.BOLD, 18));
		DefaultTableCellRenderer hr = (DefaultTableCellRenderer) tableHeader
				.getDefaultRenderer();
		// 列名居中
		hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
		return tableHeader;
	}
	@Override
	public boolean isCellEditable(int row, int column) {
		// TODO Auto-generated method stub
		return columnEditables[column];
	}

}

3.MyTableColor中makeFace()方法可以将表格奇偶行设置不同的颜色

package server.ui.tools;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

/**
 * 
 * @author han 
 * 调用该类的makeFace()方法可以将表格奇偶行设置不同的颜色
 * 
 */
public class MyTableColor {
	public static void makeFace(JTable table) {
		try {
			DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {
				@Override
				public Component getTableCellRendererComponent(JTable table,
						Object value, boolean isSelected, boolean hasFocus,
						int row, int column) {
					if (row % 2 == 0)
						setBackground(Color.white); // 设置奇数行底色
					else if (row % 2 == 1)
						setBackground(new Color(224, 255, 255)); // 设置偶数行底色
					return super.getTableCellRendererComponent(table, value,
							isSelected, hasFocus, row, column);
				}
			};

			for (int i = 0; i < table.getColumnCount(); i++) {
				table.getColumn(table.getColumnName(i)).setCellRenderer(tcr);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

4、将按钮JButton设置成自定义的图片样式

package server.ui.tools;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;

public class MyButton extends JButton {
	private BufferedImage image_over; // 鼠标在按钮上的图片
	private BufferedImage image_off; // 鼠标不在按钮上的图片
	private BufferedImage image_pressed; // 鼠标按下按钮时的图片
	private int buttonWidth; // 宽
	private int buttonHeight; // 高
	private int[] pixels; // 储存图片数据的数组,用于计算contains
	private boolean mouseOn;
	private boolean mousePressed;

	/**
	 * @param img_off
	 *            鼠标不在按钮上的图片
	 * @param img_over
	 *            鼠标在按钮上的图片
	 * @param img_pressed
	 *            鼠标按下按钮时的图片
	 */
	public MyButton(String img_off, String img_over, String img_pressed) {
		mouseOn = false;
		mousePressed = false;
		// 加载图片
		try {
			image_over = ImageIO.read(new FileInputStream(img_over));
			image_off = ImageIO.read(new FileInputStream(img_off));
			image_pressed = ImageIO.read(new FileInputStream(img_pressed));
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		buttonWidth = image_off.getWidth();
		buttonHeight = image_off.getHeight();

		// 读取图片数据
		pixels = new int[buttonWidth * buttonHeight];
		// 抓取像素数据
		PixelGrabber pg = new PixelGrabber(image_off, 0, 0, buttonWidth,
				buttonHeight, pixels, 0, buttonWidth);
		try {
			pg.grabPixels();
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 必须设置!否则会有残影!
		this.setOpaque(false);
		this.setPreferredSize(new Dimension(buttonWidth, buttonHeight));
		this.addMouseListener(new MouseHandler());
	}

	// 读取图片文件
	public BufferedImage loadImage(String filename) {
		File file = new File(filename);

		if (!file.exists())
			return null;

		try {
			return ImageIO.read(file);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

	// 覆盖此方法绘制自定义的图片
	@Override
	public void paintComponent(Graphics g) {
		g.drawImage(image_off, 0, 0, this);
		if (mouseOn)
			g.drawImage(image_over, 0, 0, this);
		else if (mousePressed)
			g.drawImage(image_pressed, 0, 0, this);
	}

	// 覆盖此方法绘制自定义的边框
	@Override
	public void paintBorder(Graphics g) {
		// 不要边框
	}

	@Override
	public void setSize(Dimension d) {
		// TODO Auto-generated method stub
		super.setSize(d);
	}

	public boolean contains(int x, int y) {
		// 不判定的话会越界,在组件之外也会激发这个方法
		if (!super.contains(x, y))
			return false;

		int alpha = (pixels[(buttonWidth * y + x)] >> 24) & 0xff;

		repaint();
		if (alpha == 0) {
			return false;
		} else {
			return true;
		}
	}

	// 处理进入、离开图片范围的消息
	class MouseHandler extends MouseAdapter {
		public void mouseExited(MouseEvent e) {
			mouseOn = false;
			repaint();
		}

		public void mouseEntered(MouseEvent e) {
			mouseOn = true;
			repaint();
		}

		public void mousePressed(MouseEvent e) {
			mouseOn = false;
			mousePressed = true;
			repaint();
		}

		public void mouseReleased(MouseEvent e) {
			// 防止在按钮之外的地方松开鼠标
			if (contains(e.getX(), e.getY()))
				mouseOn = true;
			else
				mouseOn = false;

			mousePressed = false;
			repaint();
		}
	}
}






你可能感兴趣的:(Java项目总结)