<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Alinhar um texto em uma JTableHeader"]]></title>
		<link>http://www.guj.com.br/posts/list/13.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Alinhar um texto em uma JTableHeader"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Alinhar um texto em uma JTableHeader</title>
				<description><![CDATA[ Olá amigos, alguém saberia me dizer como eu posso colocar um texto de uma coluna de cabeçalho em duas linhas centralizado?<br /> Obrigado.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/32829/175799.java</guid>
				<link>http://www.guj.com.br/posts/preList/32829/175799.java</link>
				<pubDate><![CDATA[Mon, 15 May 2006 14:22:11]]> GMT</pubDate>
				<author><![CDATA[ luiszerba]]></author>
			</item>
			<item>
				<title>Alinhar um texto em uma JTableHeader</title>
				<description><![CDATA[ [quote=luiszerba]Olá amigos, alguém saberia me dizer como eu posso colocar um texto de uma coluna de cabeçalho em duas linhas centralizado?<br /> Obrigado.<br /> [/quote]<br /> <br /> Cara o que vc pediu é sinistro ......segue o exemplo....aliás BigExample  :shock: <br /> <br /> [b]MultiLine Header Table [/b]<br /> <br /> [code]<br /> <br /> /*<br /> Core SWING Advanced Programming <br /> By Kim Topley<br /> ISBN: 0 13 083292 8       <br /> Publisher: Prentice Hall  <br /> */<br /> <br /> import java.awt.Color;<br /> import java.awt.Component;<br /> import java.awt.Font;<br /> import java.awt.event.WindowAdapter;<br /> import java.awt.event.WindowEvent;<br /> import java.text.NumberFormat;<br /> <br /> import javax.swing.Box;<br /> import javax.swing.BoxLayout;<br /> import javax.swing.Icon;<br /> import javax.swing.ImageIcon;<br /> import javax.swing.JComponent;<br /> import javax.swing.JFrame;<br /> import javax.swing.JLabel;<br /> import javax.swing.JPanel;<br /> import javax.swing.JScrollPane;<br /> import javax.swing.JTable;<br /> import javax.swing.SwingConstants;<br /> import javax.swing.UIManager;<br /> import javax.swing.border.Border;<br /> import javax.swing.table.AbstractTableModel;<br /> import javax.swing.table.DefaultTableCellRenderer;<br /> import javax.swing.table.JTableHeader;<br /> import javax.swing.table.TableCellRenderer;<br /> import javax.swing.table.TableColumn;<br /> import javax.swing.table.TableColumnModel;<br /> <br /> public class MultiLineHeaderTable {<br />   public static void main(String[] args) {<br />     try {<br />         UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");<br />     } catch (Exception evt) {}<br />     JFrame f = new JFrame("Multi-line Header Table");<br />     JTable tbl = new JTable(new CurrencyTableModel());<br />     tbl.setDefaultRenderer(java.lang.Number.class,<br />         new FractionCellRenderer(10, 3, SwingConstants.RIGHT));<br /> <br />     TableColumnModel tcm = tbl.getColumnModel();<br />     tcm.getColumn(0).setPreferredWidth(150);<br />     tcm.getColumn(0).setMinWidth(150);<br />     TextWithIconCellRenderer renderer = new TextWithIconCellRenderer();<br />     tcm.getColumn(0).setCellRenderer(renderer);<br />     tcm.getColumn(1).setPreferredWidth(100);<br />     tcm.getColumn(1).setMinWidth(100);<br /> <br />     // Add the stripe renderer.<br />     StripedTableCellRenderer.installInTable(tbl, Color.lightGray,<br />         Color.white, null, null);<br /> <br />     // Add the custom header renderer<br />     MultiLineHeaderRenderer headerRenderer = new MultiLineHeaderRenderer(<br />         SwingConstants.CENTER, SwingConstants.BOTTOM);<br />     headerRenderer.setBackground(Color.blue);<br />     headerRenderer.setForeground(Color.white);<br />     headerRenderer.setFont(new Font("Dialog", Font.BOLD, 12));<br />     int columns = tableHeaders.length;<br />     for (int i = 0; i &lt; columns; i++) {<br />       tcm.getColumn(i).setHeaderRenderer(headerRenderer);<br />       tcm.getColumn(i).setHeaderValue(tableHeaders[i]);<br />     }<br /> <br />     tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);<br />     tbl.setPreferredScrollableViewportSize(tbl.getPreferredSize());<br /> <br />     JScrollPane sp = new JScrollPane(tbl);<br />     f.getContentPane().add(sp, "Center");<br />     f.pack();<br />     f.addWindowListener(new WindowAdapter() {<br />       public void windowClosing(WindowEvent evt) {<br />         System.exit(0);<br />       }<br />     });<br />     f.setVisible(true);<br />   }<br /> <br />   // Header values. Note the table model provides<br />   // string column names that are the default header<br />   // values.<br />   public static Object[][] tableHeaders = new Object[][] {<br />       new String[] { "Currency" },<br />       new String[] { "Yesterday's", "Rate" },<br />       new String[] { "Today's", "Rate" },<br />       new String[] { "Rate", "Change" } };<br /> }<br /> <br /> class CurrencyTableModel extends AbstractTableModel {<br />   protected String[] columnNames = { "Currency", "Yesterday", "Today",<br />       "Change" };<br />   // Constructor: calculate currency change to create the last column<br />   public CurrencyTableModel() {<br />     for (int i = 0; i &lt; data.length; i++) {<br />       data[i][DIFF_COLUMN] = new Double(<br />           ((Double) data[i][NEW_RATE_COLUMN]).doubleValue()<br />               - ((Double) data[i][OLD_RATE_COLUMN]).doubleValue());<br />     }<br />   }<br /> <br />   // Implementation of TableModel interface<br />   public int getRowCount() {<br />     return data.length;<br />   }<br /> <br />   public int getColumnCount() {<br />     return COLUMN_COUNT;<br />   }<br /> <br />   public Object getValueAt(int row, int column) {<br />     return data[row][column];<br />   }<br /> <br />   public Class getColumnClass(int column) {<br />     return (data[0][column]).getClass();<br />   }<br /> <br />   public String getColumnName(int column) {<br />     return columnNames[column];<br />   }<br /> <br />   protected static final int OLD_RATE_COLUMN = 1;<br /> <br />   protected static final int NEW_RATE_COLUMN = 2;<br /> <br />   protected static final int DIFF_COLUMN = 3;<br /> <br />   protected static final int COLUMN_COUNT = 4;<br /> <br />   protected static final Class thisClass = CurrencyTableModel.class;<br /> <br />   protected Object[][] data = new Object[][] {<br />       {<br />           new DataWithIcon("Belgian Franc", new ImageIcon(thisClass<br />               .getResource("belgium.gif"))),<br />           new Double(37.6460110), new Double(37.6508921), null },<br />       {<br />           new DataWithIcon("British Pound", new ImageIcon(thisClass<br />               .getResource("gb.gif"))), new Double(0.6213051),<br />           new Double(0.6104102), null },<br />       {<br />           new DataWithIcon("Canadian Dollar", new ImageIcon(thisClass<br />               .getResource("canada.gif"))),<br />           new Double(1.4651209), new Double(1.5011104), null },<br />       {<br />           new DataWithIcon("French Franc", new ImageIcon(thisClass<br />               .getResource("france.gif"))),<br />           new Double(6.1060001), new Double(6.0100101), null },<br />       {<br />           new DataWithIcon("Italian Lire", new ImageIcon(thisClass<br />               .getResource("italy.gif"))),<br />           new Double(1181.3668977), new Double(1182.104), null },<br />       {<br />           new DataWithIcon("German Mark", new ImageIcon(thisClass<br />               .getResource("germany.gif"))),<br />           new Double(1.8191804), new Double(1.8223421), null },<br />       {<br />           new DataWithIcon("Japanese Yen", new ImageIcon(thisClass<br />               .getResource("japan.gif"))),<br />           new Double(141.0815412), new Double(121.0040432), null } };<br /> }<br /> <br /> class DataWithIcon {<br />   public DataWithIcon(Object data, Icon icon) {<br />     this.data = data;<br />     this.icon = icon;<br />   }<br /> <br />   public Icon getIcon() {<br />     return icon;<br />   }<br /> <br />   public Object getData() {<br />     return data;<br />   }<br /> <br />   public String toString() {<br />     return data.toString();<br />   }<br /> <br />   protected Icon icon;<br /> <br />   protected Object data;<br /> }<br /> <br /> class StripedTableCellRenderer implements TableCellRenderer {<br />   public StripedTableCellRenderer(TableCellRenderer targetRenderer,<br />       Color evenBack, Color evenFore, Color oddBack, Color oddFore) {<br />     this.targetRenderer = targetRenderer;<br />     this.evenBack = evenBack;<br />     this.evenFore = evenFore;<br />     this.oddBack = oddBack;<br />     this.oddFore = oddFore;<br />   }<br /> <br />   // Implementation of TableCellRenderer interface<br />   public Component getTableCellRendererComponent(JTable table, Object value,<br />       boolean isSelected, boolean hasFocus, int row, int column) {<br />     TableCellRenderer renderer = targetRenderer;<br />     if (renderer == null) {<br />       // Get default renderer from the table<br />       renderer = table.getDefaultRenderer(table.getColumnClass(column));<br />     }<br /> <br />     // Let the real renderer create the component<br />     Component comp = renderer.getTableCellRendererComponent(table, value,<br />         isSelected, hasFocus, row, column);<br /> <br />     // Now apply the stripe effect<br />     if (isSelected == false && hasFocus == false) {<br />       if ((row & 1) == 0) {<br />         comp.setBackground(evenBack != null ? evenBack : table<br />             .getBackground());<br />         comp.setForeground(evenFore != null ? evenFore : table<br />             .getForeground());<br />       } else {<br />         comp.setBackground(oddBack != null ? oddBack : table<br />             .getBackground());<br />         comp.setForeground(oddFore != null ? oddFore : table<br />             .getForeground());<br />       }<br />     }<br /> <br />     return comp;<br />   }<br /> <br />   // Convenience method to apply this renderer to single column<br />   public static void installInColumn(JTable table, int columnIndex,<br />       Color evenBack, Color evenFore, Color oddBack, Color oddFore) {<br />     TableColumn tc = table.getColumnModel().getColumn(columnIndex);<br /> <br />     // Get the cell renderer for this column, if any<br />     TableCellRenderer targetRenderer = tc.getCellRenderer();<br /> <br />     // Create a new StripedTableCellRenderer and install it<br />     tc.setCellRenderer(new StripedTableCellRenderer(targetRenderer,<br />         evenBack, evenFore, oddBack, oddFore));<br />   }<br /> <br />   // Convenience method to apply this renderer to an entire table<br />   public static void installInTable(JTable table, Color evenBack,<br />       Color evenFore, Color oddBack, Color oddFore) {<br />     StripedTableCellRenderer sharedInstance = null;<br />     int columns = table.getColumnCount();<br />     for (int i = 0; i &lt; columns; i++) {<br />       TableColumn tc = table.getColumnModel().getColumn(i);<br />       TableCellRenderer targetRenderer = tc.getCellRenderer();<br />       if (targetRenderer != null) {<br />         // This column has a specific renderer<br />         tc.setCellRenderer(new StripedTableCellRenderer(targetRenderer,<br />             evenBack, evenFore, oddBack, oddFore));<br />       } else {<br />         // This column uses a class renderer - use a shared renderer<br />         if (sharedInstance == null) {<br />           sharedInstance = new StripedTableCellRenderer(null,<br />               evenBack, evenFore, oddBack, oddFore);<br />         }<br />         tc.setCellRenderer(sharedInstance);<br />       }<br />     }<br />   }<br /> <br />   protected TableCellRenderer targetRenderer;<br /> <br />   protected Color evenBack;<br /> <br />   protected Color evenFore;<br /> <br />   protected Color oddBack;<br /> <br />   protected Color oddFore;<br /> }<br /> <br /> class FractionCellRenderer extends DefaultTableCellRenderer {<br />   public FractionCellRenderer(int integer, int fraction, int align) {<br />     this.integer = integer; // maximum integer digits<br />     this.fraction = fraction; // exact number of fraction digits<br />     this.align = align; // alignment (LEFT, CENTER, RIGHT)<br />   }<br /> <br />   protected void setValue(Object value) {<br />     if (value != null && value instanceof Number) {<br />       formatter.setMaximumIntegerDigits(integer);<br />       formatter.setMaximumFractionDigits(fraction);<br />       formatter.setMinimumFractionDigits(fraction);<br />       setText(formatter.format(((Number) value).doubleValue()));<br />     } else {<br />       super.setValue(value);<br />     }<br />     setHorizontalAlignment(align);<br />   }<br /> <br />   protected int integer;<br /> <br />   protected int fraction;<br /> <br />   protected int align;<br /> <br />   protected static NumberFormat formatter = NumberFormat.getInstance();<br /> }<br /> <br /> class TextWithIconCellRenderer extends DefaultTableCellRenderer {<br />   protected void setValue(Object value) {<br />     if (value instanceof DataWithIcon) {<br />       if (value != null) {<br />         DataWithIcon d = (DataWithIcon) value;<br />         Object dataValue = d.getData();<br /> <br />         setText(dataValue == null ? "" : dataValue.toString());<br />         setIcon(d.getIcon());<br />         setHorizontalTextPosition(SwingConstants.RIGHT);<br />         setVerticalTextPosition(SwingConstants.CENTER);<br />         setHorizontalAlignment(SwingConstants.LEFT);<br />         setVerticalAlignment(SwingConstants.CENTER);<br />       } else {<br />         setText("");<br />         setIcon(null);<br />       }<br />     } else {<br />       super.setValue(value);<br />     }<br />   }<br /> }<br /> <br /> class MultiLineHeaderRenderer extends JPanel implements TableCellRenderer {<br />   public MultiLineHeaderRenderer(int horizontalAlignment,<br />       int verticalAlignment) {<br />     this.horizontalAlignment = horizontalAlignment;<br />     this.verticalAlignment = verticalAlignment;<br />     switch (horizontalAlignment) {<br />     case SwingConstants.LEFT:<br />       alignmentX = (float) 0.0;<br />       break;<br /> <br />     case SwingConstants.CENTER:<br />       alignmentX = (float) 0.5;<br />       break;<br /> <br />     case SwingConstants.RIGHT:<br />       alignmentX = (float) 1.0;<br />       break;<br /> <br />     default:<br />       throw new IllegalArgumentException(<br />           "Illegal horizontal alignment value");<br />     }<br />     setBorder(headerBorder);<br />     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));<br />     setOpaque(true);<br /> <br />     background = null;<br />   }<br /> <br />   public void setForeground(Color foreground) {<br />     this.foreground = foreground;<br />     super.setForeground(foreground);<br />   }<br /> <br />   public void setBackground(Color background) {<br />     this.background = background;<br />     super.setBackground(background);<br />   }<br /> <br />   public void setFont(Font font) {<br />     this.font = font;<br />   }<br /> <br />   // Implementation of TableCellRenderer interface<br />   public Component getTableCellRendererComponent(JTable table, Object value,<br />       boolean isSelected, boolean hasFocus, int row, int column) {<br />     removeAll();<br />     invalidate();<br /> <br />     if (value == null) {<br />       // Do nothing if no value<br />       return this;<br />     }<br /> <br />     // Set the foreground and background colors<br />     // from the table header if they are not set<br />     if (table != null) {<br />       JTableHeader header = table.getTableHeader();<br />       if (header != null) {<br />         if (foreground == null) {<br />           super.setForeground(header.getForeground());<br />         }<br /> <br />         if (background == null) {<br />           super.setBackground(header.getBackground());<br />         }<br />       }<br />     }<br /> <br />     if (verticalAlignment != SwingConstants.TOP) {<br />       add(Box.createVerticalGlue());<br />     }<br /> <br />     Object[] values;<br />     int length;<br />     if (value instanceof Object[]) {<br />       // Input is an array - use it<br />       values = (Object[]) value;<br />     } else {<br />       // Not an array - turn it into one<br />       values = new Object[1];<br />       values[0] = value;<br />     }<br />     length = values.length;<br /> <br />     // Configure each row of the header using<br />     // a separate JLabel. If a given row is<br />     // a JComponent, add it directly..<br />     for (int i = 0; i &lt; length; i++) {<br />       Object thisRow = values[i];<br /> <br />       if (thisRow instanceof JComponent) {<br />         add((JComponent) thisRow);<br />       } else {<br />         JLabel l = new JLabel();<br />         setValue(l, thisRow, i);<br />         add(l);<br />       }<br />     }<br /> <br />     if (verticalAlignment != SwingConstants.BOTTOM) {<br />       add(Box.createVerticalGlue());<br />     }<br />     return this;<br />   }<br /> <br />   // Configures a label for one line of the header.<br />   // This can be overridden by derived classes<br />   protected void setValue(JLabel l, Object value, int lineNumber) {<br />     if (value != null && value instanceof Icon) {<br />       l.setIcon((Icon) value);<br />     } else {<br />       l.setText(value == null ? "" : value.toString());<br />     }<br />     l.setHorizontalAlignment(horizontalAlignment);<br />     l.setAlignmentX(alignmentX);<br />     l.setOpaque(false);<br />     l.setForeground(foreground);<br />     l.setFont(font);<br />   }<br /> <br />   protected int verticalAlignment;<br /> <br />   protected int horizontalAlignment;<br /> <br />   protected float alignmentX;<br /> <br />   // These attributes may be explicitly set<br />   // They are defaulted to the colors and attributes<br />   // of the table header<br />   protected Color foreground;<br /> <br />   protected Color background;<br /> <br />   // These attributes have fixed defaults<br />   protected Border headerBorder = UIManager<br />       .getBorder("TableHeader.cellBorder");<br /> <br />   protected Font font = UIManager.getFont("TableHeader.font");<br /> }  <br />  [/code]<br /> <br /> Fui .....]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/32829/175873.java</guid>
				<link>http://www.guj.com.br/posts/preList/32829/175873.java</link>
				<pubDate><![CDATA[Mon, 15 May 2006 16:46:39]]> GMT</pubDate>
				<author><![CDATA[ dsfextreme]]></author>
			</item>
			<item>
				<title>Re:Alinhar um texto em uma JTableHeader</title>
				<description><![CDATA[  <img src="http://www.guj.com.br/images/smilies/385970365b8ed7503b4294502a458efa.gif" border="0"> Super Sinistro.<br /> Valeu brother .<br /> <br /> Alguém mais conhece alguma solução com o TableCellRenderer ?<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/32829/175904.java</guid>
				<link>http://www.guj.com.br/posts/preList/32829/175904.java</link>
				<pubDate><![CDATA[Mon, 15 May 2006 18:45:03]]> GMT</pubDate>
				<author><![CDATA[ luiszerba]]></author>
			</item>
	</channel>
</rss>