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;
}
}
}

