Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Swing bug? cannot set width of JToggleButton

843805Dec 1 2006 — edited Dec 3 2006
Hello,
Just wondered if this was a Swing bug. See also
bug 6349010.
The width of the JToggleButton cannot be set.
However the height can be set.
The important line is line 135 - and also 140.
Try changing the width of the button - it does not change.
thanks,
Anil

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.util.EventObject;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import javax.swing.JTree;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellEditor;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;

public class TreeUIFailed extends JPanel {
	  AnilTreeCellRenderer3 atcr;
	  AnilTreeCellEditor4 atce;
	  DefaultTreeModel treeModel;
	  JTree tree;
	  DefaultMutableTreeNode markedNode = null;
	  
	public TreeUIFailed() {
		  super(new BorderLayout());
			treeModel = new DefaultTreeModel(null);
			tree = new JTree(treeModel);		
		    tree.setEditable(true);
			tree.getSelectionModel().setSelectionMode(
					TreeSelectionModel.SINGLE_TREE_SELECTION);
			tree.setShowsRootHandles(true);
		    tree.setCellRenderer(atcr = new AnilTreeCellRenderer3());
		    tree.setCellEditor(atce = new AnilTreeCellEditor4(tree, atcr));
		    tree.setRowHeight(0);//TEMP - needed only if setting Win L&F
			JScrollPane scrollPane = new JScrollPane(tree);
			add(scrollPane,BorderLayout.CENTER);
	}
	public void setRootNode(DefaultMutableTreeNode node) {
		treeModel.setRoot(node);
		treeModel.reload();
	}
	  public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException{
//		  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		  TreeUIFailed tb = new TreeUIFailed();
		  tb.setPreferredSize(new Dimension(800,600));
		    JFrame frame = new JFrame("Tree Windows UI Failed");
		    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		    frame.setContentPane(tb);
		    frame.setSize(800, 600);
		    frame.pack();
		    frame.setVisible(true);
		    tb.populate();
	  }

	private void populate() {
		TextAreaNode3 r = new TextAreaNode3(this);
		 setRootNode(r);
			r.gNode.notes.addTab("0", null/* icon */, new JTextArea(2,25),
			"no menu!");
			r.gNode.notes.addTab("1", null/* icon */, new JTextArea(2,25),
			"no menu!");
			TextAreaNode3 a = new TextAreaNode3(this);
			a.gNode.notes.addTab("1", null/* icon */, new JTextArea(2,25),
			"no menu!");
		 treeModel.insertNodeInto(a, r, r.getChildCount());		
	}
}

class AnilTreeCellRenderer3 extends DefaultTreeCellRenderer{
	TreeUIFailed panel;
 DefaultMutableTreeNode currentNode;
 
  public AnilTreeCellRenderer3() {
	super();
}

public Component getTreeCellRendererComponent
   (JTree tree, Object value, boolean selected, boolean expanded,
   boolean leaf, int row, boolean hasFocus){
	TextAreaNode3 currentNode = (TextAreaNode3)value;
	NodeGUI4 gNode = (NodeGUI4) currentNode.gNode;
    return gNode.vBox;
  }
}
 
class AnilTreeCellEditor4 extends DefaultTreeCellEditor{
  DefaultTreeCellRenderer rend;
 
  public AnilTreeCellEditor4(JTree tree, DefaultTreeCellRenderer r){
    super(tree, r);
    rend = r;
  }
 
  public Component getTreeCellEditorComponent(JTree tree, Object value,
   boolean isSelected, boolean expanded, boolean leaf, int row){
    return rend.getTreeCellRendererComponent(tree, value, isSelected, expanded,
     leaf, row, true);
  }
 
  public boolean isCellEditable(EventObject event){
    return true;
  }
}
/**
 * this is done to keep gui separate from model - as in MVC.
 * not necessary.
 * @author juwo
 *
 */
class NodeGUI4 {
	JPanel notesPanel = new JPanel(new BorderLayout(), true);
	JTabbedPane notes = new JTabbedPane(JTabbedPane.RIGHT);
	final TreeUIFailed view;
	Box vBox = Box.createVerticalBox();
	Box hBox = Box.createHorizontalBox();
	final JTextArea textArea = new JTextArea( 1, 5 );
	JToggleButton toggleButton = new JToggleButton();

	NodeGUI4( TreeUIFailed view_ ) {
		this.view = view_;
		toggleButton.setAlignmentX(Component.CENTER_ALIGNMENT);
// BEGIN PROBLEM		
		toggleButton.setPreferredSize(new Dimension(200,toggleButton.getPreferredSize().height));
// END PROBLEM
		vBox.add(toggleButton);
		vBox.add(hBox);
		hBox.add( textArea );
		textArea.setBorder( BorderFactory.createMatteBorder( 0, 0, 1, 0, Color.GREEN ) );
		notesPanel.add(notes);
		hBox.add( notesPanel);
		hBox.setBorder( BorderFactory.createMatteBorder( 5, 5, 5, 5, Color.CYAN ) );

// THE FOLLOWING DOES NOT WORK EITHER!!!		
		//		halo.setPreferredSize(new Dimension(vBox.getPreferredSize().width,halo.getPreferredSize().height));
	}
}

class TextAreaNode3 extends DefaultMutableTreeNode {   
	NodeGUI4 gNode;
	TextAreaNode3(TreeUIFailed view_t) {	
		gNode = new NodeGUI4(view_t);		
	}
}

Comments

Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Dec 30 2006
Added on Dec 1 2006
4 comments
1,127 views