added minimal border support to sucky viewer (currently just ON or OFF)

PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352716 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andrew C. Oliver 2002-06-23 02:54:08 +00:00
parent 63cfe59acc
commit d23edd5bd1
2 changed files with 145 additions and 3 deletions

View File

@ -0,0 +1,94 @@
package org.apache.poi.hssf.contrib.view;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Color;
import java.awt.Component;
import javax.swing.border.AbstractBorder;
/**
* This is an attempt to implement Excel style borders for the SuckyViewer
*
*/
public class SVBorder extends AbstractBorder {
Color northColor = null;
Color eastColor = null;
Color southColor = null;
Color westColor = null;
int northThickness;
int eastThickness;
int southThickness;
int westThickness;
boolean northBorder=false;
boolean eastBorder=false;
boolean southBorder=false;
boolean westBorder=false;
public SVBorder(Color northColor, Color eastColor,
Color southColor, Color westColor,
int northThickness, int eastThickness,
int southThickness, int westThickness,
boolean northBorder, boolean eastBorder,
boolean southBorder, boolean westBorder) {
this.northColor = northColor;
this.eastColor = eastColor;
this.southColor = southColor;
this.westColor = westColor;
this.northThickness = northThickness;
this.eastThickness = eastThickness;
this.southThickness = southThickness;
this.westThickness = westThickness;
this.northBorder=northBorder;
this.eastBorder=eastBorder;
this.southBorder=southBorder;
this.westBorder=westBorder;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width,
int height) {
Color oldColor = g.getColor();
int i;
if (northBorder) {
System.out.println("NorthBorder x="+x+",y="+y+"x1="+width+"y1="+y);
g.setColor(northColor);
for (int k=0; k < northThickness; k++) {
g.drawLine(x,y+k,width,y+k);
}
}
if (eastBorder) {
System.out.println("EastBorder x="+x+",y="+y+"x1="+width+"y1="+y);
g.setColor(eastColor);
for (int k=0; k < eastThickness; k++) {
g.drawLine(width-k,y,width-k,height);
}
}
if (southBorder) {
System.out.println("SouthBorder x="+x+",y="+height+"x1="+width+"y1="+height);
g.setColor(southColor);
for (int k=0; k < southThickness; k++) {
g.drawLine(x,height - k,width,height - k);
}
}
if (westBorder) {
System.out.println("WestBorder x="+x+",y="+y+"x1="+width+"y1="+y);
g.setColor(westColor);
for (int k=0; k < westThickness; k++) {
g.drawLine(x+k,y,x+k,height);
}
}
g.setColor(oldColor);
}
}

View File

@ -123,6 +123,8 @@ public class SVTableCellRenderer extends JLabel
public Component getTableCellRendererComponent(JTable table, Object value, public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) { boolean isSelected, boolean hasFocus, int row, int column) {
boolean isBorderSet = false;
if (isSelected) { if (isSelected) {
super.setForeground(table.getSelectionForeground()); super.setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground()); super.setBackground(table.getSelectionBackground());
@ -134,13 +136,19 @@ public class SVTableCellRenderer extends JLabel
HSSFFont f = wb.getFontAt(s.getFontIndex()); HSSFFont f = wb.getFontAt(s.getFontIndex());
boolean isbold = f.getBoldweight() > HSSFFont.BOLDWEIGHT_NORMAL; boolean isbold = f.getBoldweight() > HSSFFont.BOLDWEIGHT_NORMAL;
boolean isitalics = f.getItalic(); boolean isitalics = f.getItalic();
// System.out.println("bold="+isbold);
// System.out.println("italics="+isitalics);
int fontstyle = 0; int fontstyle = 0;
if (isbold) fontstyle = Font.BOLD; if (isbold) fontstyle = Font.BOLD;
if (isitalics) fontstyle = fontstyle | Font.ITALIC; if (isitalics) fontstyle = fontstyle | Font.ITALIC;
int fontheight = f.getFontHeightInPoints();
if (fontheight == 9) fontheight = 10; //fix for stupid ol Windows
Font font = new Font(f.getFontName(),fontstyle,f.getFontHeightInPoints()); // System.out.println("fontsizeinpnts="+f.getFontHeightInPoints());
Font font = new Font(f.getFontName(),fontstyle,fontheight);
setFont(font); setFont(font);
@ -160,16 +168,56 @@ public class SVTableCellRenderer extends JLabel
rgb = clr.getTriplet(); rgb = clr.getTriplet();
awtcolor = new Color(rgb[0],rgb[1],rgb[2]); awtcolor = new Color(rgb[0],rgb[1],rgb[2]);
setForeground(awtcolor); setForeground(awtcolor);
if (s.getBorderBottom() != HSSFCellStyle.BORDER_NONE ||
s.getBorderTop() != HSSFCellStyle.BORDER_NONE ||
s.getBorderLeft() != HSSFCellStyle.BORDER_NONE ||
s.getBorderRight() != HSSFCellStyle.BORDER_NONE) {
int borderTop = 0;
int borderRight = 0;
int borderBottom = 0;
int borderLeft = 0;
if(s.getBorderBottom() != HSSFCellStyle.BORDER_NONE) {
borderBottom = 2;
}
if(s.getBorderRight() != HSSFCellStyle.BORDER_NONE) {
borderRight = 2;
}
if(s.getBorderTop() != HSSFCellStyle.BORDER_NONE) {
borderTop = 2;
}
if(s.getBorderLeft() != HSSFCellStyle.BORDER_NONE) {
borderLeft = 2;
}
SVBorder border = new SVBorder(Color.black, Color.black,
Color.black, Color.black,
borderTop, borderRight,
borderBottom, borderLeft,
s.getBorderTop() != HSSFCellStyle.BORDER_NONE,
s.getBorderRight() != HSSFCellStyle.BORDER_NONE,
s.getBorderBottom() != HSSFCellStyle.BORDER_NONE,
s.getBorderLeft() != HSSFCellStyle.BORDER_NONE);
setBorder(border);
isBorderSet=true;
//need custom border that can have north,east,south,west settings
}
} }
if (hasFocus) { if (hasFocus) {
setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") ); if (!isBorderSet) {
setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
}
if (table.isCellEditable(row, column)) { if (table.isCellEditable(row, column)) {
super.setForeground( UIManager.getColor("Table.focusCellForeground") ); super.setForeground( UIManager.getColor("Table.focusCellForeground") );
super.setBackground( UIManager.getColor("Table.focusCellBackground") ); super.setBackground( UIManager.getColor("Table.focusCellBackground") );
} }
} else { } else if (!isBorderSet) {
setBorder(noFocusBorder); setBorder(noFocusBorder);
} }