package circusRefine.util; import java.awt.Font; import java.awt.FontMetrics; import javax.swing.JLabel; import javax.swing.JOptionPane; public class SchemaUtils { protected static String Space = " "; /** * Metodo auxiliar para pegar o tamanho(largura) de uma String. Como * esse tamanho também depende do comprimento de cada caracter em sua Fonte, * a fonte tb é passada como parametro * @param text Texto que se deseja saber o tamanho * @param font A Font em que o texto esta sendo impresso * @return Largura do texto */ public static int getWidthOfString (String text, Font font){ JLabel label = new JLabel(text); label.setFont(font); int count = 0; FontMetrics metrics = label.getFontMetrics(label.getFont()); char [] c = label.getText().toCharArray(); for (int i = 0; i < c.length; i++) { int width = metrics.charWidth(c[i]); count += width; } return count; } /** * Metodo que me retorna a parte de Cima do Schema em Unicode * @param exprs Expressoes que seram utilizadas para medir o tamanho * da parte de cima do Schema * @param name Nome do Schema * @return Parte de cima do Schema que sera utilizada no pacote printer */ public static String StringSchemaUP(String[] strExprs, String name) { int maxTam =0; String result = ""; result = SchemaString.lEFTUP + Space + name + Space + SchemaString.ROW + SchemaString.ROW; Font font = new Font("CZT", Font.PLAIN, 12); //compara o tamanho do nome do Schema int aux1 = getWidthOfString(result, font); if (aux1 > maxTam){ maxTam = aux1; } if (strExprs.length > 0) { for (int i =0; i< strExprs.length; i++) { int aux = getWidthOfString(strExprs[i], font); if (aux > maxTam){ maxTam = aux; } } } while (getWidthOfString(result, font) < maxTam){ result += SchemaString.ROW; } result += SchemaString.RIGHTUP; return result; } public static String StringSchemaCENTER(String[] strExprs, String name) { String result = SchemaString.BARRINHADOMEIO + SchemaString.ROW + SchemaString.ROW; Font font = new Font("CZT", Font.PLAIN, 12); String stringUP = SchemaUtils.StringSchemaUP(strExprs, name); while (getWidthOfString(result, font) < 0.5*getWidthOfString(stringUP, font)){; result += SchemaString.ROW; } return result; } /** * Metodo que me retorna a baixo de Cima do Schema em Unicode * @param exprs Expressoes que seram utilizadas para medir o tamanho * da parte de baixo do Schema * @param name Nome do Schema * @return Parte de baixo do Schema que sera utilizada no pacote printer */ public static String StringSchemaDOWN(String[] strExprs, String name) { String result = SchemaString.lEFTDOW; String SchemaUP = SchemaUtils.StringSchemaUP(strExprs, name); /** * Lembrando que essa fonte deve ser a mesma do Tela Desenvolvimento; */ Font fonte = new Font("CZT", Font.PLAIN, 12); int counter = SchemaUtils.getWidthOfString(SchemaUP, fonte); int aux = SchemaUtils.getWidthOfString(SchemaString.RIGHTDOWN, fonte); while (SchemaUtils.getWidthOfString(result, fonte) < counter - aux) { result+= SchemaString.ROW; } result += SchemaString.RIGHTDOWN; return result; } }