Mac X Swing problem

Discussion in 'Java' started by mhsampson, Dec 13, 2006.

  1. mhsampson

    mhsampson Guest

    Dear group,

    I am writing an desktop app that uses a JTable with a special Renderer
    for the column headers that parses the text for end-of-line characters
    and renders it as a JList. This is so I can show column headings of
    more than one line. Example:
    +----------------+
    | Monday |
    | Dec 11 |
    +----------------+
    | 45 |
    +----------------+
    | 31 |
    +----------------+

    The code works fine on Win2KP in Java 1.5.

    I have started testing it on a Macintosh with Mac OS X 10.4.8 and Java
    1.5. So far, I have found that I have to be more specific in my
    PropertyChangeEvent handling code (the Macintosh Swing created more
    property change events during normal operation), and that my multiple
    line JTable headers do not display.

    Does this sound familiar to anyone?

    Mike Sampson

    Here is the code for the renderer. It is borrowed from somewhere on
    the net.

    public class MultiLineHeaderRenderer extends JList implements
    TableCellRenderer
    {
    public MultiLineHeaderRenderer()
    {
    setOpaque(true);
    setForeground(UIManager.getColor("TableHeader.foreground"));
    setBackground(UIManager.getColor("TableHeader.background"));
    setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    ListCellRenderer renderer = getCellRenderer();
    ((JLabel)renderer).setHorizontalAlignment(JLabel.CENTER);
    setCellRenderer(renderer);
    }

    public Component getTableCellRendererComponent(JTable table, Object
    value,
    boolean isSelected, boolean hasFocus, int row, int
    column)
    {
    setFont(table.getFont());
    String str = (value == null) ? "" : value.toString();
    BufferedReader br = new BufferedReader(new StringReader(str));
    String line;
    Vector<String> v = new Vector<String>();
    try
    {
    while ((line = br.readLine()) != null)
    {
    v.addElement(line);
    }
    }
    catch (IOException ex)
    {
    ex.printStackTrace();
    }
    setListData(v);
    return this;
    }
    }
    mhsampson, Dec 13, 2006
    #1
    1. Advertising

  2. mhsampson

    Daniel Dyer Guest

    On Wed, 13 Dec 2006 15:58:52 -0000, mhsampson <> wrote:

    > Dear group,
    >
    > I am writing an desktop app that uses a JTable with a special Renderer
    > for the column headers that parses the text for end-of-line characters
    > and renders it as a JList.


    Perhaps an easier approach would be to take advantage of JLabel's support
    for HTML
    (http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html).
    Since the DefaultTableCellRenderer extends JLabel, it should just be a
    case of wrapping the text in the appropriate tags. Some <BR> tags will
    give you multiple lines. You may also have to add <FONT> tags to get the
    text to look right.

    Dan.

    --
    Daniel Dyer
    http://www.dandyer.co.uk
    Daniel Dyer, Dec 13, 2006
    #2
    1. Advertising

  3. mhsampson

    mhsampson Guest

    Thanks. I changed the code as follows, and it works nicely.

    Mike Sampson


    public class MultiLineHeaderRenderer extends JLabel implements
    TableCellRenderer
    {
    public MultiLineHeaderRenderer()
    {
    this.setOpaque(true);

    this.setForeground(UIManager.getColor("TableHeader.foreground"));

    this.setBackground(UIManager.getColor("TableHeader.background"));
    this.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    this.setHorizontalAlignment( JLabel.CENTER );
    this.setVerticalAlignment( JLabel.TOP );
    }

    public Component getTableCellRendererComponent(JTable table, Object
    value,
    boolean isSelected, boolean hasFocus, int row, int
    column)
    {
    setFont(table.getFont());
    String str = (value == null) ? "" : value.toString();
    BufferedReader br = new BufferedReader(new StringReader(str));
    String line;
    String htmlText = new String("<HTML>");
    int lines = 0;
    try
    {
    while ( (line = br.readLine()) != null )
    {

    if ( lines > 0 )
    {
    htmlText += "<P>";
    }
    htmlText += line;
    ++lines;
    }
    htmlText += "</HTML>";
    }
    catch (IOException ex)
    {
    ex.printStackTrace();
    }
    this.setText( htmlText );

    return this;
    }
    }
    mhsampson, Dec 13, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Big Daddy

    Java 1.2 Swing vs. Java 1.5 Swing

    Big Daddy, Apr 15, 2005, in forum: Java
    Replies:
    2
    Views:
    490
    Pete Barrett
    Apr 16, 2005
  2. mkrause
    Replies:
    0
    Views:
    663
    mkrause
    May 6, 2005
  3. lizard
    Replies:
    0
    Views:
    1,753
    lizard
    Jan 30, 2006
  4. S.T
    Replies:
    2
    Views:
    568
  5. Knute Johnson

    Swing is dead! Long live Swing.

    Knute Johnson, Feb 16, 2012, in forum: Java
    Replies:
    32
    Views:
    3,731
    Daniel Pitts
    Feb 29, 2012
Loading...

Share This Page