您的位置:首页 > 产品设计 > UI/UE

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

2015-07-12 17:57 609 查看

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

<span style="font-size:14px;">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();
}
}
}</span>


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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: