JTree problem on MAC

Hi,

I am adding a Panel as a JTree node .

It is working fine on windows and linux.

But it shows only small portion on MAc.

I have tried everything like using gridBagConstraints.

But still the problem persists on mac.Is it a java bug.

Can anyone please help me to sort out this problem.

I am posting two classes which will illustrate the problem

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JApplet;

import javax.swing.JButton;

publicclass app

extends JApplet

implements ActionListener

{

publicvoid init()

{

// TODO Auto-generated method stub

JButton app =new JButton();

app.setText("Click");

app.addActionListener(this);

this.getContentPane().add(app);

}

publicvoid actionPerformed(ActionEvent e)

{

if (e.getActionCommand().equals("Click"))

{

TestTree tt =new TestTree();

tt.init();

tt.setVisible(true);

}

}

}

the second class

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.FlowLayout;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTree;

import javax.swing.border.Border;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.DefaultTreeCellRenderer;

import javax.swing.tree.DefaultTreeModel;

publicclass TestTree

extends JDialog

{

JTree tree;

DefaultTreeModel treeModel;

public TestTree()

{

setTitle("Pandharinath");

setSize(450, 450);

}

publicvoid init()

{

DefaultMutableTreeNode root =new DefaultMutableTreeNode("Pandharinath");

DefaultMutableTreeNode subroot1 =new DefaultMutableTreeNode("Windows");

DefaultMutableTreeNode subroot2 =new DefaultMutableTreeNode("Mac");

JLabel key1 =new JLabel();

key1.setText("Pandri : ");

JLabel value1 =new JLabel();

value1.setText(" Dell ");

JLabel key2 =new JLabel();

key2.setText("Bhavesh : ");

JLabel value2 =new JLabel();

value2.setText(" Black ");

JLabel key11 =new JLabel();

key11.setText("Monitor : ");

JLabel value11 =new JLabel();

value11.setText(" Dell ");

JLabel key21 =new JLabel();

key21.setText("Color : ");

JLabel value21 =new JLabel();

value21.setText(" Black ");

JLabel key12 =new JLabel();

key12.setText("Monitor : ");

JLabel value12 =new JLabel();

value12.setText(" Dell ");

JLabel key22 =new JLabel();

key22.setText("Color : ");

JLabel value22 =new JLabel();

value22.setText(" Black ");

JLabel key01 =new JLabel();

key01.setText("Pandri : ");

JLabel value01 =new JLabel();

value01.setText(" Dell ");

JLabel key02 =new JLabel();

key02.setText("Bhavesh : ");

JLabel value02 =new JLabel();

value02.setText(" Black ");

JLabel key03 =new JLabel();

key03.setText("Monitor : ");

JLabel value03 =new JLabel();

value03.setText(" Dell ");

JLabel key04 =new JLabel();

key03.setText("Color : ");

JLabel value04 =new JLabel();

value03.setText(" Black ");

JLabel key05 =new JLabel();

key05.setText("Monitor : ");

JLabel value05 =new JLabel();

value05.setText(" Dell ");

JLabel key06 =new JLabel();

key06.setText("Color : ");

JLabel value06 =new JLabel();

value06.setText(" Black ");

JPanel winPanel =new JPanel();

winPanel.setSize(400, 400);

winPanel.setBackground(Color.GRAY);

winPanel.setLayout(new FlowLayout());

winPanel.setPreferredSize(new Dimension(200, 200));

winPanel.add(key2);

winPanel.add(value2);

winPanel.add(key1);

winPanel.add(value1);

winPanel.add(key11);

winPanel.add(value11);

winPanel.add(key21);

winPanel.add(value21);

winPanel.add(key22);

winPanel.add(value22);

winPanel.add(key12);

winPanel.add(value12);

JPanel macPanel =new JPanel();

macPanel.setSize(400, 400);

macPanel.setBackground(Color.GRAY);

macPanel.setLayout(new FlowLayout());

macPanel.setPreferredSize(new Dimension(200, 200));

macPanel.add(key01);

macPanel.add(value01);

macPanel.add(key02);

macPanel.add(value02);

macPanel.add(key03);

macPanel.add(value03);

macPanel.add(key04);

macPanel.add(value04);

macPanel.add(key05);

macPanel.add(value05);

macPanel.add(key06);

macPanel.add(value06);

treeModel =new DefaultTreeModel(root);

tree =new JTree(treeModel);

ren rend =new ren();

tree.setCellRenderer(rend);

// Build the tree up from the nodes we created.

treeModel.insertNodeInto(subroot1, root, 0);

treeModel.insertNodeInto(subroot2, root, 0);

// Or, more succinctly:

DefaultMutableTreeNode subroot1sub1 =new DefaultMutableTreeNode(winPanel);

DefaultMutableTreeNode subroot2sub2 =new DefaultMutableTreeNode(macPanel);

// Display it.

subroot1.add(subroot1sub1);

subroot2.add(subroot2sub2);

getContentPane().add(tree, BorderLayout.CENTER);

}

class ren

extends DefaultTreeCellRenderer

{

public Component getTreeCellRendererComponent(JTree tree, Object value,boolean selected,

boolean expanded,boolean leaf,int row,boolean hasFocus)

{

JPanel panel =null;

DefaultMutableTreeNode userObject = ((DefaultMutableTreeNode)value);

if (userObject.getUserObject()instanceof JPanel)

{

panel = (JPanel)userObject.getUserObject();

System.out.println("Panel Size :0->"+panel.getPreferredSize());

}

else

{

returnnew JLabel(value.toString());

}

return panel;

}

}

}

[10611 byte] By [sunilbelurgikara] at [2007-11-27 8:57:03]
# 1

Both Windows and Aqua LAF does not support your code.

But the default on the Mac is Aqua LAF while the default on Windows is Metal LAF.

So just change your actionPerformed function to force using Metal LAF on the Mac like this:public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("Click")) {

try {

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

} catch (Exception e) {e.printStackTrace();}

TestTree tt = new TestTree();

tt.init();

tt.setVisible(true);

}

}

Rodney_McKaya at 2007-7-12 21:21:00 > top of Java-index,Desktop,Core GUI APIs...
# 2
Thank Rodney. ..
sunilbelurgikara at 2007-7-12 21:21:00 > top of Java-index,Desktop,Core GUI APIs...