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(); } } }
相关文章推荐
- iOS --- 去掉UITableView中的空白行
- [LeetCode] Implement Stack using Queues
- 关于querySelector()与querySelectorAll()的在ie下的一点与众不同之处。
- 使用Git、Git GUI和TortoiseGit
- OpenGL蓝宝书第五章5.4Tunnuel 纹理映射和过滤:较好的可读性代码
- 1626 - Brackets sequence(DP)
- 4.Median of Two Sorted Arrays(Array; Divide-and-Conquer)
- POJ 2784 Buy or Build最小生成树
- Failed to convert property value of type 'com.sun.proxy.$Proxy8 implementing
- EasyUI DataGrid和Pagination
- mongoVue的使用
- break与continue的区别
- 高逼格UI-ASD(Android Support Design)
- [leedcode 52] N-Queens II
- java-GUI
- UITableView 表示图学习笔记
- [LeetCode] Implement Queue using Stacks
- [leedcode 51] N-Queens
- @QueryParam和@PathParam比较
- emulator: ERROR: x86 emulation currently requires hardware acceleration! Please ensure Intel HAXM is