Swing bug? cannot set width of JToggleButton
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;
publicclass TreeUIFailedextends 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);
}
publicvoid setRootNode(DefaultMutableTreeNode node){
treeModel.setRoot(node);
treeModel.reload();
}
publicstaticvoid 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();
}
privatevoid 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 AnilTreeCellRenderer3extends 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 AnilTreeCellEditor4extends 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);
}
publicboolean isCellEditable(EventObject event){
returntrue;
}
}
/**
* 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 TextAreaNode3extends DefaultMutableTreeNode{
NodeGUI4 gNode;
TextAreaNode3(TreeUIFailed view_t){
gNode =new NodeGUI4(view_t);
}
}

