JTree setRoot method problem!!! Maybe swing bug???

Hi all,
i have problem with setRoot method of the DefaultTreeModel class. Sometimes when i've switched the root element of my tree (i've called setRoot method) ...swing has fired this exception....
java.lang.NullPointerException
     at javax/swing/SizeRequirements.calculateAlignedPositions (SizeRequirements.java:333)
     at javax/swing/OverlayLayout.layoutContainer (OverlayLayout.java:214)
     at java/awt/Container.layout (Container.java)
     at java/awt/Container.doLayout (Container.java)
     at java/awt/Container.validateTree (Container.java)
     at java/awt/Container.validate (Container.java)
     at javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler.getNodeDimensions (BasicTreeUI.java:2509)
     at javax/swing/tree/AbstractLayoutCache.getNodeDimensions (AbstractLayoutCache.java:402)
     at javax/swing/tree/VariableHeightLayoutCache$TreeStateNode.updatePreferredSize (VariableHeightLayoutCache.java:1289)
     at javax/swing/tree/VariableHeightLayoutCache$TreeStateNode.expand (VariableHeightLayoutCache.java:1421)
     at javax/swing/tree/VariableHeightLayoutCache$TreeStateNode.expand (VariableHeightLayoutCache.java:1216)
     at javax/swing/tree/VariableHeightLayoutCache.rebuild (VariableHeightLayoutCache.java:669)
     at javax/swing/tree/VariableHeightLayoutCache.treeStructureChanged (VariableHeightLayoutCache.java:573)
     at javax/swing/plaf/basic/BasicTreeUI$TreeModelHandler.treeStructureChanged (BasicTreeUI.java:2286)
     at javax/swing/tree/DefaultTreeModel.fireTreeStructureChanged (DefaultTreeModel.java:513)
     at javax/swing/tree/DefaultTreeModel.nodeStructureChanged (DefaultTreeModel.java:339)
     at javax/swing/tree/DefaultTreeModel.setRoot (DefaultTreeModel.java:115)
Had someone similar problem like me..??????

sounds like something in the tree structure is null...
or possibly you are changing it from a different thread then the event dispatch thread, in which case, use SwingUtilities.invokeLater() or invokeAndWait() to change the root, otherwise there could be timing issues with repaints.

Similar Messages

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

    ok, sorry!
    I understood why it does not work.
    Box Layout respects the maximum size of the component.
    By default, a JToggleButton is set to 34.
    Changing the JToggleButton max width to 75, allows the preferred size to be set.
    Thank you camickr!
    Note: in contrast, Flow Layout respects the preferred size and ignores the max size!
    Message was edited by:
    anilp1

  • BufferedReader's readLine() method problem (REPOST)

    Hello,
    If anyone can help me out I would not have to struggle :)
    Here is the thing. I have a file like this:
    1 srjetnuaazcebsqfbzerhxfbdfcbxyvihswlygzsfvjleengcftwvxcjriwdohjisnzppipiwpnniui yjpeppaezftgjfviwxunu
    2 ekjghqflatrcdteurofahxoiyvrwhvaxjgcuvkkpondsqhedxylxyjizflfbgusoizogbffgwnswohe njixwufcdlbjlkoqevqdy
    3 stfhcbslgcrywwrgbsqdkcxfbizvniyookceonscwugixgrxvvkxiqezltsiwhhepqusjdlkhadvkzg iefgarenbxnxtxnqdqpfh
    4 dcuefkdrkoovjwdrqbpgoirruutphuiobqweknxhboyktxzcczgekrlbfsbfuygjpheydiwaasxifph tldawxsfepotkgqqsivur
    5 fpfrspbuhangkeugfuwexsgivetovkoyloddgofdcajwwlrocgjrhonsrfrfxozvgohwoytycfjoycr xdhnhxyitkeqynedrbroh
    6 hgzqqsfgnotfepywbpccrosxborslqtkanyffrwknjapnzjnesjlkbbsckbyvgrxujqyocpcpctsqyz apcinhjyysxsdwfjugndr
    7 pltzealtrklzrugxdcskndqyvsrzncitqvjcnndeqossyrifzvbqovtdzsixjlizsbxwutgqipuxfid xyoktwupsuqbqgnxdfbze
    8 avpxfjgwpxnzfsfosgsryhpyaezigrqsxsgdvwdbwovhcchrijbitvbcvltrgvadogokaennwpjjpku uttidlnqftdnzqpqafels
    9 oyvztgletdwdtibshpzeuqryvulnubrqtgxwizfsdzqlgxvsebhslnovphgehfigbjyyqsirqcwflbn bnrflotpqytqzbgnkeyrk
    10 unvryrnlqucuydrasyzyiclnjvospzdoviqchdhasxzffblwsewikzbznyegrqtjvxfxfjenvrboofb xfsynlxhyuvqprqbvoruk
    and my java programs is like this:
    public String searchForAString(String fileName, int lineNumber)
    File fileObject = new File(fileName);
    String finalString ="";
    String record = "";
    int line;
    try
    FileInputStream fileInputStreamObject = new FileInputStream(fileObject);
    BufferedInputStream bufferedInputStreamObject = new BufferedInputStream(fileInputStreamObject);
    //DataInputStream dataInputStreamObject = new DataInputStream(bufferedInputStreamObject);
    BufferedReader bufferedReaderObject = new BufferedReader(new InputStreamReader(bufferedInputStreamObject));
    //System.out.println(bufferedReaderObject.readLine());
    //System.out.println("_____________________");
    while((bufferedReaderObject.readLine()) != null)
    System.out.println(bufferedReaderObject.readLine());
    Last System.out.println statement only displays second, forth, sixth, eigth, tenth and null lines. Why not every line? Any ideas? Thanks!
    Re: BufferedReader's readLine() method problem.
    Author: EagleEye101 Feb 18, 2005 8:48 PM (reply 1 of 1)
    You do relize that when you call the in.readLine() in your loop conditional and in your loop body it reads in diffrent lines. Try this:
    public String searchForAString(String fileName, int lineNumber)
    File fileObject = new File(fileName);
    String finalString ="";
    String record = "";
    int line;
    try
    FileInputStream fileInputStreamObject = new FileInputStream(fileObject);
    BufferedInputStream bufferedInputStreamObject = new BufferedInputStream(fileInputStreamObject);
    //DataInputStream dataInputStreamObject = new DataInputStream(bufferedInputStreamObject);
    BufferedReader bufferedReaderObject = new BufferedReader(new InputStreamReader(bufferedInputStreamObject));
    //System.out.println(bufferedReaderObject.readLine());
    //System.out.println("_____________________");
    String s = bufferedReaderObject.readLine();
    while(s != null)
    System.out.println(bufferedReaderObject.readLine());
    s = bufferedReaderObject.readLine();
    Every time you call the readLine method, it does read a diffrent line. Java does not know you want to read the same line twice.
    Tried it, did not work. I need to go through each line of the file I have. Any ideas?

    solution should be in your other thread.
    Please do not repeat threads--it really bugs the people here, just some 'nettiquite' --I don't mean to be a grouch.
    --later.  : )                                                                                                                                                                                                                                                                                                                                                       

  • Graphic card problem maybe? Since when I have changed the hard drive to my macbook pro and I installed all the new softwares, my mac is very slow and the screen gives crazy pictures,could maybe be the graphic card, does anybody have experienced this?

    Graphic card problem maybe? Since when I have changed the hard drive to my macbook pro and I installed all the new softwares, my mac is very slow and the screen gives crazy pictures,could maybe be the graphic card, does anybody have experienced this?

    after a restart it works for a time, but always slow. I went to the Applestore this afternoon and the made a check and said it would be the logicboard and they would have to change it for CHF 600 and it would be ready in 10 - 15 days

  • Recalling up main() or method handling maybe??

    I have the following code which has a menu in main and the methods related to this method.
    import javax.swing.*;
    import java.util.*;
    import java.io.*;
    public class Sport
    public static void main (String[] args)
    try     
                   String menu = JOptionPane.showInputDialog(   //This the menu the user see's
                   "Select 1 to input results\n"+
                  "Select 2 to linearsearch\n"+
                  "Select 3 to Check contents of  array\n"+
                  "Select 0 to Quit");
              int menu2=Integer.parseInt(menu);
              if (menu2==1)           //i use if statements to match the methods with the menu
                 inputteams();
              if (menu2==2)
                   linearsearch();
              if (menu2==3)
                   printArray();
              else
                   System.exit(0);
         catch (IOException e)
                   System.err.println("Caught IOException: "+ e.getMessage());
    public static void inputteams()throws IOException
         resultList myList = new resultList();
         int count = 0;
         int stillContinue= JOptionPane.YES_OPTION;
            while (stillContinue == JOptionPane.YES_OPTION)
             String na = JOptionPane.showInputDialog("Please, enter team name");
             String da = JOptionPane.showInputDialog("Enter date:");
              String sc = JOptionPane.showInputDialog("Please enter score");
        if (na!=null && da!=null && sc!=null)
              result data = new result(na, da, sc);
             myList.insert(data);
            stillContinue = JOptionPane.showConfirmDialog(null, "Enter another record?",
                              "???", JOptionPane.YES_NO_OPTION);
              count++;
         public static void printArray() 
        resultList myList = new resultList();
        result[] myArray = myList.getResult(); 
        for( int i=0; i<myArray.length; i++)
                 result myResults = myArray;
              if( myResults != null )
    System.out.println("Database contents" + myArray.toString());
    else
    System.out.println(""); //Handling empty elements in the array
    }               //to avoid return of nullPointer
    }Now it starts of asking the user for their choice from the menu.  When they enter their choice the appropiate method comes up for the entered choice.  When the user finishes with completing their choice the application closes.  What i need to do is return back to the menu everytime.
    So for example, if at the main menu the user enters 1, they will be inputting information about their team.  They can repeat inputting until the NO option is choosen on the input dialog.  Once this is choosen, the user should then once again be presented with the menu option.  How would i go about doing this?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Check out the while loop in your main method below...
    It will keep looping around your code till the boolean variable alive becomes false and the only place it can become false is when the user has not chosen one of your menus.
         public static void main (String[] args)
              boolean alive = true;
              try     
                   while (alive)
                        String menu = JOptionPane.showInputDialog(   //This the menu the user see's
                                  "Select 1 to input results\n"+
                                  "Select 2 to linearsearch\n"+
                                  "Select 3 to Check contents of  array\n"+
                        "Select 0 to Quit");
                        int menu2=Integer.parseInt(menu);
                        if (menu2==1)           //i use if statements to match the methods with the menu
                             inputteams();
                        if (menu2==2)
                             linearsearch();
                        if (menu2==3)
                             printArray();
                        else
                             alive = false;
              catch (IOException e)
                   System.err.println("Caught IOException: "+ e.getMessage());
         }Hope this helps...
    [email protected]

  • Authentication problem - solved, but maybe a bug in Mac OS X?

    Hi,
    I've a rather small installation with only a handful of users configured on a Mac mini (Mac OS X Server, 10.6.8). All of them use the mail, calendar and addressbook server on the Mac, nothing more. They use it with Mac, iPhone and iPad. Everything worked fine for months but suddenly all of them were faced authentication problems: it was not possible to login on the imap server, the calendar server, the addressbook server. It was possible to login using the admin account on the server directly. Moreover, all users disappeared from the workgroup manager, however they still were available on the servers LDAP server and findable using ldapsearch.
    First, I used to completely restart the server to solve the problem, but it reappeared after only few hours again.
    Second, after understanding more about the authentication process, I found the "killall DirectoryService" was sufficient to solve the problem, but it still reappeared after few hours.
    Then I found the, once the problem occured, there was nearly no more communication to the local LDAP server on port 389 on localhost. When everything was working fine, the was a lot of such communication, including queries for usernames, when a login attempt was made. I started a "tcpdump -n -i lo0 port 389" and waited for the problem again. After the problem occured, I found in the pcap files that there were a few final query attempts, actually attempts the open a port 389 TCP connection to the slapd running on localhost, which were answered with a TCP RST. Then, no more attempts were made until l restarted the DirectoryService. Using the logfile of the slapd I found that this happened exactly at the time the slapd was stopped and restarted. And - surprisingly for me - stopping and restarting the slapd happened exactly once an hour.
    I then found that it happened exactly at the time the time machine backup process was started and indeed it was possible to trigger the event of restarting the slapd by manually starting a time machine backup.
    (Indeed, I switched my backup strategy from SuperDuper to time machine the other day and maybe that was the time the problem occured for the first time. I know that time machine is not considered as the best backup strategy for a server but I wanted to try on my own.)
    Google helped my to find a hint that time machine will actually stop and restart slapd - which is a generally a good idea, since otherwise a backup from some open database files would be made, which could work but may fail. So, I thing, someone of the developers thought about that problem too and has considered time machine for backups of a server.
    However, a not running slapd can not answer queries from a DirectoryService and a stopping or starting process might indeed end up with TCP SYNs answered with TCP RST.
    My solution was to disable time machine again and from that time the problem does not occur again.
    I'm wondering why the DirectoryService process isn't starting to query the slapd again after a failed connection. Isn't this a bug? After this experience I consider time machine as not only the not preferred backup solution for a server but as completely incompatible with Mac OS X server - although, as I said, it seems that someone thought about backing up the LDAP database using time machine.
    (On a Lion server this problem does not occur, the slapd will not be stopped and restarted when time machine is running. Moreover, I saw a com.apple.slapd.start notification in the slapd.log ... maybe this tells DirectoryService to try again.)
    Cheers,
    Wolfgang

    Another problem I found with the MacOS X key bindings: the 6 key doesn't work!
    In the config that ships with SQL Developer, I found this:
    <Item class="oracle.javatools.util.Pair">
    <first class="java.lang.String">DOCUMENT_6_CMD_ID</first>
    <second class="oracle.ide.keyboard.KeyStrokes">
    <data>
    <Item class="javax.swing.KeyStroke">6</Item>
    </data>
    </second>
    </Item>
    which should be:
    <Item class="oracle.javatools.util.Pair">
    <first class="java.lang.String">DOCUMENT_6_CMD_ID</first>
    <second class="oracle.ide.keyboard.KeyStrokes">
    <data>
    <Item class="javax.swing.KeyStroke">meta 6</Item>
    </data>
    </second>
    </Item>

  • Jtree's ValueChange method problem

    my code are as follow:
    i'm now doing a JTree which will list all the directory in the computers(every node is a directory) ..
    When i click on each node, i wanna it to display all files names in this directory ...
    but i just fail that statement:
    DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
    this statement will cause an error
    anyone know how to solve it ??
    Thanks very very much !!!
    my codes:
    import java.io.*;
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.tree.*;
    import javax.swing.event.*;
    import java.util.*;
    import java.awt.event.*;
    public class PDThumnailer extends JFrame {
         private JTree tree;
         private JScrollPane scpTree;
         private JSplitPane split;
         private JPanel leftPane;
         public PDThumnailer() {
              super();
              Vector dirs = new Vector();
              File[] roots = File.listRoots();
              for(int i=0; i<roots.length; i++) {
                   dirs.add(roots);
              leftPane = new JPanel();
              tree = new JTree(new FileTreeModel(dirs));
              tree.setCellRenderer(new FileTreeCellRenderer());
              tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
              scpTree = new JScrollPane(tree);
              split = new JSplitPane(1, scpTree, leftPane);
              split.setOneTouchExpandable(true);
    split.setDividerLocation(200);
              this.getContentPane().add(split);
              this.setSize(550,400);
              this.setVisible(true);
              this.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                             //setVisible(false);
                             System.exit(-1);
              tree.addTreeSelectionListener(new TreeSelectionListener() {
                        public void valueChanged(TreeSelectionEvent e) {
                                  DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
                                  if (node == null)
                                       return;
                                  Object nodeInfo = node.getUserObject();
                                  System.out.println("nodeInfo");
                                  if(nodeInfo instanceof File) {
                                       File file = (File) nodeInfo;
                                       File[] allFiles = file.listFiles();
                                       for(int i=0;i<allFiles.length;i++)
                                            System.out.println(allFiles[i].getName());
         public static void main(String[] arg){
                   new PDThumnailer();
    class FileTreeCellRenderer extends JLabel implements TreeCellRenderer {
    public FileTreeCellRenderer() {
         super("", JLabel.LEFT);
         this.setOpaque(true);
    /* implements TreeCellRenderer BEGIN */
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
         if (selected) {
              this.setBackground(Color.black);
              this.setForeground(Color.white);
         else {
              this.setBackground(Color.white);
              this.setForeground(Color.black);
         if (value instanceof File) {
              File file = (File) value;
              if (file.isDirectory()) {
                        this.setText(file.getPath());
                        this.setIcon(new ImageIcon("icon/folder.gif"));
              else {
                        this.setText(file.getName());
                        this.setIcon(new ImageIcon("icon/file.gif"));
         else {
                   setText("");
         return this;
    /* implements TreeCellRenderer END */
    class FileTreeModel implements TreeModel {
    private Vector dirs;
    public FileTreeModel(Vector dirs) {
    this.dirs = dirs;
    /* implements TreeModel BEGIN */
    public void addTreeModelListener(TreeModelListener l) {
    public Object getChild(Object parent, int index) {
    if (parent instanceof Vector) {
    return dirs.get(index);
    else if (parent instanceof File) {
    File file = (File) parent;
    if (file.isDirectory()) {
    File[] allFiles = file.listFiles(new DirectoryFilter());
    if (allFiles != null) {
              return allFiles[index];
    return null;
    public int getChildCount(Object parent) {
    if (parent instanceof Vector) {
    return dirs.size();
    else if (parent instanceof File) {
    File file = (File) parent;
    if (file.isDirectory()) {
    File[] allFiles = file.listFiles(new DirectoryFilter());
         int count =0;
    if (allFiles != null) {
    return allFiles.length;
    return 0;
    public int getIndexOfChild(Object parent, Object child) {
         if (parent instanceof Vector) {
              return dirs.indexOf(child);
         else if (parent instanceof File) {
              File file = (File) parent;
                   if (file.isDirectory()) {
                             File[] allFiles = file.listFiles(new DirectoryFilter());
                             if (allFiles != null) {
                                  for (int i=0; i<allFiles.length; i++) {
                                       if (child.equals(allFiles[i])) {
                                                 return i;
         return -1;
    public Object getRoot() {
    return this.dirs;
    public boolean isLeaf(Object node) {
         if (node instanceof Vector) {
              return dirs.isEmpty();
         else if (node instanceof File) {
         File file = (File) node;
         if (file.isDirectory()) {
                   File[] allFiles = file.listFiles(new DirectoryFilter());
                   if (allFiles != null) {
                        return allFiles.length == 0;
         return true;
    public void removeTreeModelListener(TreeModelListener l) {
    public void valueForPathChanged(TreePath path, Object newValue) {
    /* implements TreeModel END */
    class DirectoryFilter implements FileFilter
         public boolean accept(File f) {
              return f.isDirectory();

    Replace this line with
    DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode)(event.getPath().getLastPathComponent());Tell me whether that helps to solve your problem.

  • Problem with immediate=true, maybe a Bug

    I'm using a dataTable for selecting an user. The selected userBean will be put to the session context with id "selectedUser". The next page allows to edit users values. This edit page contains a cancel button with immedtiate=true param to abort editing and go back to the list. The edit page contains some input fields like:
    <h:inputText id="firstName" value="#{selectedUser.firstName}" />
    <h:inputText id="lastName" value="#{selectedUser.lastName}" />
    These fields are showing correct values for the selected user. But after selecting another user from the list the edit page is showing the values of the previous selected user! By selecting the second user again and again after a while the edit page shows the correct values.
    Well, I've added a JSP expression to the edit page to show me if the selected user is the right one "Edit User (${selectedUser})". The value of this expression always shows the correct selected user.
    If I modify the command button from:
    <h:commandButton action="users" value="Cancel" immediate="true" />
    to:
    <h:commandButton type="reset" onclick="window.location.href='/faces/users'" value="Cancel" />
    the problem does not appear!!!
    For me it looks like a bug. Any ideas?
    Thx,
    Wolfgang

    Sorry for the imcomplete testcase, here it comes again:
    --- Users.java ---------------------------------------------
    package jsf.test;
    import java.util.ArrayList;
    import javax.faces.context.FacesContext;
    public class Users
    private ArrayList users;
    public Users()
    super();
    users = new ArrayList();
    users.add(new User("User_A", "firstName_A", "lastName_A"));
    users.add(new User("User_B", "firstName_B", "lastName_B"));
    users.add(new User("User_C", "firstName_C", "lastName_C"));
    public ArrayList getUsers()
    return users;
    public String edit()
    FacesContext context = FacesContext.getCurrentInstance();
    User user = (User)context.getExternalContext().getRequestMap().get("user");
    System.out.println("selectedUser: " + user);
    context.getExternalContext().getSessionMap().put("selectedUser", user);
    return "navToUser";
    --- User.java ---------------------------------------------
    package jsf.test;
    public class User
    private String loginName;
    private String firstName;
    private String lastName;
    public User()
    public User(String loginName, String firstName, String lastName)
    this.loginName = loginName;
    this.firstName = firstName;
    this.lastName = lastName;
    public String getLoginName()
    return loginName;
    public void setLoginName(String loginName)
    this.loginName = loginName;
    public String getFirstName()
    return firstName;
    public void setFirstName(String firstName)
    this.firstName = firstName;
    public String getLastName()
    return lastName;
    public void setLastName(String lastName)
    this.lastName = lastName;
    public String update()
    System.out.println("user update: " + this);
    return "navToUsers";
    public String toString()
    return firstName + " " + lastName;
    --- users.jsp ---------------------------------------------
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <html>
    <body>
    <f:view>
    <h:form id="selectUser">
    <b>Users</b><p>
    <h:dataTable id="users" value="#{users.users}" var="user">
    <h:column>
    <f:facet name="header">
    <h:outputText value="Login Name" />
    </f:facet>
    <h:commandLink action="#{users.edit}">
    <h:outputText value="#{user.loginName}"/>
    </h:commandLink>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="First Name" />
    </f:facet>
    <h:commandLink action="#{users.edit}">
    <h:outputText value="#{user.firstName}"/>
    </h:commandLink>
    </h:column>
    <h:column>
    <f:facet name="header">
    <h:outputText value="Last Name" />
    </f:facet>
    <h:commandLink action="#{users.edit}">
    <h:outputText value="#{user.lastName}"/>
    </h:commandLink>
    </h:column>
    </h:dataTable>
    </h:form>
    </f:view>
    </body>
    </html>
    --- user.jsp ---------------------------------------------
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <html>
    <body>
    <f:view>
    <h:form>
    <b>User</b><p>
    <h:panelGrid columns="2" cellpadding="5">
    <h:outputText value="Login Name" />
         <h:inputText id="lognName" value="#{selectedUser.loginName}"/>
    <h:outputText value="First Name" />
         <h:inputText id="firstName" value="#{selectedUser.firstName}"/>
    <h:outputText value="Last Name" />
         <h:inputText id="lastName" value="#{selectedUser.lastName}"/>
    <h:outputText value=" " />
    <h:panelGroup>
    <h:commandButton action="navToUsers" value="Cancel" immediate="true"/>
    <%-- <h:commandButton type="reset" onclick="window.location.href='/faces/users.jsp'" value="Cancel"/> --%>
    <h:outputText value=" " />
    <h:commandButton action="#{selectedUser.update}" value="OK"/>
    </h:panelGroup>
    </h:panelGrid>
    </h:form>
    </f:view>
    </body>
    </html>
    --- faces-config.xml ---------------------------------------------
    <managed-bean>
    <description>
    Bean for TEST users.
    </description>
    <managed-bean-name>users</managed-bean-name>
    <managed-bean-class>jsf.test.Users</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
    <description>
    Bean for TEST user.
    </description>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>jsf.test.User</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
    <from-view-id>/users.jsp</from-view-id>
    <navigation-case>
    <from-outcome>navToUser</from-outcome>
    <to-view-id>/faces/user.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    <navigation-rule>
    <from-view-id>/user.jsp</from-view-id>
    <navigation-case>
    <from-outcome>navToUsers</from-outcome>
    <to-view-id>/faces/users.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>

  • Problem : maybe bug or my ipod is break

    hello,
    First i'm french so i speak not very good but i think you can anderstand my probleme ^^
    So, aftenoon, i have synchronise my ipod classic 80 Go to itune for put a video, but when i have eject my ipod, the memory was totaly delete, same the begin (i have juste lost my videos and song so i can play with original game but not listen music : you anderstand? sorry for my bad english) nexte i have put all songs en videos but next i eject the ipod was delete yet.
    next time i have re-establish my ipod with itune and it's ok but i'm scared
    because i have the ipod since 2 day because I bought it used and i can send my ipod in the next two days.
    So kindly inform me if this problem (memory delete) can be appear yet.
    cordially,
    kevin

    you may need to restore it in itunes, click on the restore button when your ipod is connected

  • Swing bug?: scrolling BLIT_SCROLL_MODE painting JTextArea components hangs

    java version "1.5.0_04"
    Hello,
    When drawing JComponent Text Areas and dynamically scrolling, Java gets confused, gets the shivers and freezes when the viewport cannot get its arms around the canvas. ;)
    Possible problem at JViewport.scrollRectToVisible().
    When painting non-text area components eg. graphics circles, it is ok.
    Have provided example code. This code is based on the ScrollDemo2 example provided in the Sun Java
    Tutorial
    thanks,
    Anil Philip
    juwo LLC
    Usage: run program and repeatedly click the left mouse button near right boundary to create a new JComponent node each time and to force scrolling area to increase in size to the right.
    When the first node crosses the left boundary, then the scroll pane gets confused, gets the shivers and hangs.
    The other scroll modes are a bit better - but very slow leaving the toolbar (in the oroginal application) unpainted sometimes.
    * to show possible bug when in the default BLIT_SCROLL_MODE and with JTextArea components.
    * author: Anil Philip. juwo LLC. http://juwo.com
    * Usage: run program and repeatedly click the left mouse button near right boundary to
    * create a new JComponent node each time and to force scrolling area to increase in size to the right.
    * When the first node crosses the left boundary, then the scroll pane gets confused, gets the shivers
    and hangs.
    * The other scroll modes are a bit better - but very slow leaving the toolbar (in the oroginal
    application)
    * unpainted sometimes.
    * This code is based on the ScrollDemo2 example provided in the Sun Java Tutorial (written by John
    Vella, a tutorial reader).
    import javax.swing.*;
    import javax.swing.border.EtchedBorder;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    /* ScrollDemo2WithBug.java is a 1.5 application that requires no other files. */
    public class ScrollDemo2WithBug extends JPanel {
    private Dimension area; //indicates area taken up by graphics
    private Vector circles; //coordinates used to draw graphics
    private Vector components;
    private JPanel drawingPane;
    public ScrollDemo2WithBug() {
    super(new BorderLayout());
    area = new Dimension(0, 0);
    circles = new Vector();
    components = new Vector();
    //Set up the instructions.
    JLabel instructionsLeft = new JLabel(
    "Click left mouse button to place a circle.");
    JLabel instructionsRight = new JLabel(
    "Click right mouse button to clear drawing area.");
    JPanel instructionPanel = new JPanel(new GridLayout(0, 1));
    instructionPanel.add(instructionsLeft);
    instructionPanel.add(instructionsRight);
    //Set up the drawing area.
    drawingPane = new DrawingPane();
    drawingPane.setBackground(Color.white);
    drawingPane.setPreferredSize(new Dimension(200, 200));
    //Put the drawing area in a scroll pane.
    JScrollPane scroller = new JScrollPane(drawingPane);
    // scroller.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
    if(scroller.getViewport().getScrollMode() == JViewport.BACKINGSTORE_SCROLL_MODE)
    System.out.println("BACKINGSTORE_SCROLL_MODE");
    if(scroller.getViewport().getScrollMode() == JViewport.BLIT_SCROLL_MODE)
    System.out.println("BLIT_SCROLL_MODE");
    if(scroller.getViewport().getScrollMode() == JViewport.SIMPLE_SCROLL_MODE)
    System.out.println("SIMPLE_SCROLL_MODE");
    //Lay out this demo.
    add(instructionPanel, BorderLayout.PAGE_START);
    add(scroller, BorderLayout.CENTER);
    /** The component inside the scroll pane. */
    public class DrawingPane extends JPanel implements MouseListener {
    private class VisualNode {
    int x = 0;
    int y = 0;
    int id = 0;
    public VisualNode(int id, int x, int y) {
    this.id = id;
    this.x = x;
    this.y = y;
    title.setLineWrap(true);
    title.setAlignmentY(Component.TOP_ALIGNMENT);
    titlePanel.add(new JButton("Hi!"));
    titlePanel.add(title);
    nodePanel.add(titlePanel);
    nodePanel.setBorder(BorderFactory
    .createEtchedBorder(EtchedBorder.RAISED));
    box.add(nodePanel);
    ScrollDemo2WithBug.this.drawingPane.add(box);
    Box box = Box.createVerticalBox();
    Box titlePanel = Box.createHorizontalBox();
    JTextArea title = new JTextArea(1, 10); // 1 rows x 10 cols
    Box nodePanel = Box.createVerticalBox();
    public void paintNode(Graphics g) {
    int ix = (int) x + ScrollDemo2WithBug.this.getInsets().left;
    int iy = (int) y + ScrollDemo2WithBug.this.getInsets().top;
    title.setText(id + " (" + ix + "," + iy + ") ");
    box.setBounds(ix, iy, box.getPreferredSize().width, box
    .getPreferredSize().height);
    int n = 0;
    DrawingPane() {
    this.setLayout(null);
    addMouseListener(this);
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.fill3DRect(10, 10, 25, 25, true);
    Point point;
    for (int i = 0; i < circles.size(); i++) {
    point = (Point) circles.elementAt(i);
    VisualNode node = (VisualNode) components.get(i);
    node.paintNode(g);
    //Handle mouse events.
    public void mouseReleased(MouseEvent e) {
    final int W = 100;
    final int H = 100;
    boolean changed = false;
    if (SwingUtilities.isRightMouseButton(e)) {
    //This will clear the graphic objects.
    circles.removeAllElements();
    area.width = 0;
    area.height = 0;
    changed = true;
    } else {
    int x = e.getX() - W / 2;
    int y = e.getY() - H / 2;
    if (x < 0)
    x = 0;
    if (y < 0)
    y = 0;
    Point point = new Point(x, y);
    VisualNode node = new VisualNode(circles.size(), point.x,
    point.y);
    // add(node);
    components.add(node);
    circles.addElement(point);
    drawingPane.scrollRectToVisible(new Rectangle(x, y, W, H));
    int this_width = (x + W + 2);
    if (this_width > area.width) {
    area.width = this_width;
    changed = true;
    int this_height = (y + H + 2);
    if (this_height > area.height) {
    area.height = this_height;
    changed = true;
    if (changed) {
    //Update client's preferred size because
    //the area taken up by the graphics has
    //gotten larger or smaller (if cleared).
    drawingPane.setPreferredSize(area);
    //Let the scroll pane know to update itself
    //and its scrollbars.
    drawingPane.revalidate();
    drawingPane.repaint();
    public void mouseClicked(MouseEvent e) {
    public void mouseEntered(MouseEvent e) {
    public void mouseExited(MouseEvent e) {
    public void mousePressed(MouseEvent e) {
    * Create the GUI and show it. For thread safety, this method should be
    * invoked from the event-dispatching thread.
    private static void createAndShowGUI() {
    //Make sure we have nice window decorations.
    JFrame.setDefaultLookAndFeelDecorated(true);
    //Create and set up the window.
    JFrame frame = new JFrame("ScrollDemo2");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //Create and set up the content pane.
    JComponent newContentPane = new ScrollDemo2WithBug();
    newContentPane.setOpaque(true); //content panes must be opaque
    frame.setContentPane(newContentPane);
    //Display the window.
    frame.setSize(800, 600);
    frame.pack();
    frame.setVisible(true);
    public static void main(String[] args) {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    createAndShowGUI();
    }

    I changed the name so you can run this as-is without name clashing. It works okay now.
    import javax.swing.*;
    import javax.swing.border.EtchedBorder;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    public class SD2 extends JPanel {
        public SD2() {
            super(new BorderLayout());
            //Set up the instructions.
            JLabel instructionsLeft = new JLabel(
                    "Click left mouse button to place a circle.");
            JLabel instructionsRight = new JLabel(
                    "Click right mouse button to clear drawing area.");
            JPanel instructionPanel = new JPanel(new GridLayout(0, 1));
            instructionPanel.add(instructionsLeft);
            instructionPanel.add(instructionsRight);
            //Set up the drawing area.
            DrawingPane drawingPane = new DrawingPane(this);
            drawingPane.setBackground(Color.white);
            drawingPane.setPreferredSize(new Dimension(200, 200));
            //Put the drawing area in a scroll pane.
            JScrollPane scroller = new JScrollPane(drawingPane);
            // scroller.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
            if(scroller.getViewport().getScrollMode() == JViewport.BACKINGSTORE_SCROLL_MODE)
                System.out.println("BACKINGSTORE_SCROLL_MODE");
            if(scroller.getViewport().getScrollMode() == JViewport.BLIT_SCROLL_MODE)
                System.out.println("BLIT_SCROLL_MODE");
            if(scroller.getViewport().getScrollMode() == JViewport.SIMPLE_SCROLL_MODE)
                System.out.println("SIMPLE_SCROLL_MODE");
            //Lay out this demo.
            add(instructionPanel, BorderLayout.PAGE_START);
            add(scroller, BorderLayout.CENTER);
         * Create the GUI and show it. For thread safety, this method should be
         * invoked from the event-dispatching thread.
        private static void createAndShowGUI() {
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
            //Create and set up the window.
            JFrame frame = new JFrame("ScrollDemo2");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Create and set up the content pane.
            JComponent newContentPane = new SD2();
            newContentPane.setOpaque(true);      //content panes must be opaque
            frame.setContentPane(newContentPane);
            //Display the window.
            frame.setSize(800, 600);
            frame.pack();
            frame.setVisible(true);
        public static void main(String[] args) {
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
    /** The component inside the scroll pane. */
    class DrawingPane extends JPanel implements MouseListener {
        SD2 sd2;
        private Dimension area;     //indicates area taken up by graphics
        private Vector circles;     //coordinates used to draw graphics
        private Vector components;
        int n = 0;
        final int
            W = 100,
            H = 100;
        DrawingPane(SD2 sd2) {
            this.sd2 = sd2;
            area = new Dimension(0, 0);
            circles = new Vector();
            components = new Vector();
            this.setLayout(null);
            addMouseListener(this);
         * The 'paint' method is a Container method and it passes its
         * Graphics context, g, to each of its Component children which
         * use it to draw themselves into the parent. JComponent overrides
         * this Container 'paint' method and in it calls this method in
         * addition to others - see api. So the children of DrawingPane will
         * each paint themselves. Here you can do custom painting/rendering.
         * But this is not the place to ask components to paint themselves.
         * That would get swing very confused...
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.fill3DRect(10, 10, 25, 25, true);
            g.setColor(Color.red);
            Point point;
            for (int i = 0; i < circles.size(); i++) {
                point = (Point) circles.elementAt(i);
                g.fillOval(point.x-2, point.y-2, 4, 4);
        //Handle mouse events.
        public void mousePressed(MouseEvent e) {
            if (SwingUtilities.isRightMouseButton(e)) {
                //This will clear the graphic objects.
                circles.removeAllElements();
                components.removeAllElements();
                removeAll();                    // to clear the components
                area.width = 0;
                area.height = 0;
                setPreferredSize(area);
                revalidate();
                repaint();
            } else {
                int x = e.getX() - W / 2;
                int y = e.getY() - H / 2;
                if (x < 0)
                    x = 0;
                if (y < 0)
                    y = 0;
                Point point = new Point(x, y);
                VisualNode node = new VisualNode(this, circles.size(), point.x, point.y);
                // add(node);
                components.add(node);       // not needed
                circles.addElement(point);
                checkBoundries(x, y, node);
        private void checkBoundries(int x, int y, VisualNode node) {
            boolean changed = false;
            // since we used the setPreferredSize property to set the size
            // of each box we'll have to use it again to let the JScrollPane
            // know what size we need to show all our child components
            int this_width = (x + node.box.getPreferredSize().width + 2);
            if (this_width > area.width) {
                area.width = this_width;
                changed = true;
            int this_height = (y + node.box.getPreferredSize().height + 2);
            if (this_height > area.height) {
                area.height = this_height;
                changed = true;
            if (changed) {
                //Update client's preferred size because
                //the area taken up by the graphics has
                //gotten larger or smaller (if cleared).
                setPreferredSize(area);
                scrollRectToVisible(new Rectangle(x, y, W, H));
                //Let the scroll pane know to update itself
                //and its scrollbars.
                revalidate();
            repaint();
        public void mouseReleased(MouseEvent e) { }
        public void mouseClicked(MouseEvent e)  { }
        public void mouseEntered(MouseEvent e)  { }
        public void mouseExited(MouseEvent e)   { }
    * We are adding components to DrawingPanel so there is no need to get
    * into the paint methods of DrawingPane. Components are designed to draw
    * themseleves when their parent container passes them a Graphics context
    * and asks them to paint themselves into the parent.
    class VisualNode {
        DrawingPane drawPane;
        int x;
        int y;
        int id;
        Box box;
        public VisualNode(DrawingPane dp, int id, int x, int y) {
            drawPane = dp;
            this.id = id;
            this.x = x;
            this.y = y;
            box = Box.createVerticalBox();
            Box titlePanel = Box.createHorizontalBox();
            JTextArea title = new JTextArea(1, 10);     // 1 rows x 10 cols
            Box nodePanel = Box.createVerticalBox();
            title.setLineWrap(true);
            title.setAlignmentY(Component.TOP_ALIGNMENT);
            titlePanel.add(new JButton("Hi!"));
            titlePanel.add(title);
            nodePanel.add(titlePanel);
            nodePanel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
            box.add(nodePanel);
            // here we are adding a component to drawPane so there is really
            // no need to keep this VisualNode in a collection
            drawPane.add(box);
            int ix = (int) x + drawPane.getInsets().left;
            int iy = (int) y + drawPane.getInsets().top;
            title.setText(id + " (" + ix + "," + iy + ") ");
            // since we are using the preferredSize property to setBounds here
            // we'll need access to it (via box) for the scrollPane in DrawPane
            // so we expose box as a member variable
            box.setBounds(ix, iy, box.getPreferredSize().width,
                                  box.getPreferredSize().height);
    }

  • Help with problems in Swing

    Hi, I am trying to develop a simple applet where a user can click on the screen to add jbuttons at the location of the mouse click. I have written an overly complex set of code that tries to achieve this goal, and in the end I have come close. My applet allows the user to input a certain number, and then click that many times on screen to create more jbuttons. The problem is that whenever the user clicks on screen a jbutton is created, but it only appears once the mouse has moved over it. I find this pretty weird, but basically when the user clicks, a jbutton is created within the program, but it is only "drawn" to the screen when the mouse moves directly over it.
    www.geocities.com/nickv360
    Can anyone explain to me why this is happening?
    http://www.geocities.com/nickv360/Source/AirlineModel.java
    http://www.geocities.com/nickv360/Source/City.java
    http://www.geocities.com/nickv360/Source/DrawingCanvas.java
    These are the source files if that helps at all. Addtinonally, the reset button doesn't work. The way the applet is supposed to be set up is to have an array of cities (JButtons) stored in DrawingCanvas. The drawing Canvas then accesses that cities[] array and adds each city[i] to the map. If there are no cities in the cities[] array, then no cities will be added. So, in order to successfully reset the map, here is what I do:
    cities = new City[numCities];
    removeAll();
    index = 0;
    repaint();
    I change the cities[] array to a new array of cities. I use the removeAll() method to take away all the JButtons that are currently on the map, I reset the index counter, and I repaint. Unfortunately this doesn't work.
    Does anyone know why Swing won't paint my buttons until the mouse moves over them, and why the reset method I've written doesn't work? Thanks in advance to anyone who can help.

    Just wanted to let people know that I found the answer:
    As for the other problem, I think it has to do with you having overridden paint. Normally, when you call repaint on a container, it will automatically call repaint on all the components that it contains. I'm fairly certain that if you don't manually call super.paint(g); in your paint method, it won't do it for you.
    Calling super.paint(g) makes the all of the bugs in the code disappear.
    Thanks.

  • Javax.print problems on applet - bug on mac os implementation?

    Dear All,
    I am working on an applet and application that include a print function and I get a weird behaviour on MacOS in applet mode (both with Safari and Firefox - Mac OS X Versione 10.4.9 (Build 8P135) ). In contrast, things work fine on Windows XP (both Explorer 7 and Firefox with Java Plug-in 1.6.0_01) and even in MacOS when using the application.
    The problems are:
    - the print dialogue goes on and off a few times before letting the user interact with it
    - the page format in the dialogue is set to A5 (instead of the printer's default)
    - there is a small empty window appearing together with the dialogue and not disappearing even after the applet is closed
    Is this a known problem? If so, are there work-arounds?
    (I had no luck on Google about this)
    To reproduce the problem I created a stripped down version of the applet, in 2 files, I report it at the bottom of this message. I am using a modified version the PrintUtilities class from http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-Printing.html
    Am I doing something wrong? Or shall I consider submitting a bug report?
    Any suggestion is welcome! Please let me know if I should provide more detailed information.
    Thank you in advance,
    Enrico
    PrintMe.java
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JApplet;
    import javax.swing.JPanel;
    public class PrintMe extends JApplet implements MouseListener{
         private static final long serialVersionUID = 1L;
         private JPanel jContentPane = null;
         public PrintMe() {
              super();
         private class MyComponent extends JPanel{
              private static final long serialVersionUID = 1L;
              public void paintComponent(Graphics g) {
                   super.paintComponent(g);
                  Graphics2D g2 = (Graphics2D) g;
                  g2.setColor(Color.black);
                  g2.drawString( "Test text", 0, g2.getFontMetrics().getHeight() );
         public void init() {
              MyComponent aComponent = new MyComponent();
              jContentPane = new JPanel();
              jContentPane.setLayout(new BorderLayout());
              jContentPane.add(aComponent);
              this.setContentPane(jContentPane);
              this.addMouseListener(this);
         public void print(){
              try{
                   PrintUtilities.printComponent(this);
              }catch (Exception e) {
                   e.printStackTrace();
         public void mouseClicked(MouseEvent e) {
              print();
         public void mouseEntered(MouseEvent e) {
              // not used
         public void mouseExited(MouseEvent e) {
              // not used
         public void mousePressed(MouseEvent e) {
              // not used
         public void mouseReleased(MouseEvent e) {
              // not used
    PrintUtilities.java
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.print.PageFormat;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.swing.RepaintManager;
    import javax.swing.RootPaneContainer;
    /** A simple utility class that lets you very simply print
    *  an arbitrary component. Just pass the component to the
    *  PrintUtilities.printComponent. The component you want to
    *  print doesn't need a print method and doesn't have to
    *  implement any interface or do anything special at all.
    *  If you are going to be printing many times, it is marginally more
    *  efficient to first do the following:
    *    PrintUtilities printHelper = new PrintUtilities(theComponent);
    *  then later do printHelper.print(). But this is a very tiny
    *  difference, so in most cases just do the simpler
    *  PrintUtilities.printComponent(componentToBePrinted).
    *  7/99 Marty Hall, http://www.apl.jhu.edu/~hall/java/
    *  May be freely used or adapted.
    public class PrintUtilities implements Printable {
         private Component componentToBePrinted;
         public static void printComponent(Component c) {
              new PrintUtilities(c).print();
         public PrintUtilities(Component componentToBePrinted) {
              this.componentToBePrinted = componentToBePrinted;
         public void print() {
              try{
                   PrinterJob printJob = PrinterJob.getPrinterJob();
                   printJob.setPrintable(this);
                   PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
                   if( printJob.printDialog(attributes) ){
                        try {
                             printJob.setJobName("MyName");
                             printJob.print(attributes);
                        } catch(PrinterException pe) {
                             System.err.println("Error printing: " + pe);
                             pe.printStackTrace();
              }catch (Exception e) {
                   e.printStackTrace();
         public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
              if (pageIndex > 0) {
                   return(NO_SUCH_PAGE);
              } else {
                   RootPaneContainer rpc = (RootPaneContainer)(this.componentToBePrinted);
                   rpc.getRootPane().getGlassPane().setVisible( false );
                   Graphics2D g2d = (Graphics2D)g;
                   double sy = pageFormat.getImageableHeight() / componentToBePrinted.getHeight();
                   double sx = pageFormat.getImageableWidth() / componentToBePrinted.getWidth();
                   if( sx > sy ){
                        sx = sy;
                   }else{
                        sy = sx;
                   g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
                   g2d.scale(sx, sy);
                   disableDoubleBuffering(componentToBePrinted);
                   componentToBePrinted.paint(g2d);
                   enableDoubleBuffering(componentToBePrinted);
                   return(PAGE_EXISTS);
         /** The speed and quality of printing suffers dramatically if
          *  any of the containers have double buffering turned on.
          *  So this turns if off globally.
          *  @see enableDoubleBuffering
         public static void disableDoubleBuffering(Component c) {
              RepaintManager currentManager = RepaintManager.currentManager(c);
              currentManager.setDoubleBufferingEnabled(false);
         /** Re-enables double buffering globally. */
         public static void enableDoubleBuffering(Component c) {
              RepaintManager currentManager = RepaintManager.currentManager(c);
              currentManager.setDoubleBufferingEnabled(true);
    }

    Trying to answer to myself..
    Is it possible that the problems are due to me mixing java.awt.print and javax.swing.print ?

  • Standard Report - Append Control Image Width Problem / Limitation or Bug?

    I am trying to create a Standard Report and am having a hard time placing a XY Graph control on the report. My problem is I want to use the maximum page area to view the graph. For this reason, I am keeping the margins small and increasing the size of the control so that it occupies almost all of the page. What I find is that after a certain limit, the XY graph image output on the report does not increase in size even if you increase the control size. In fact the image will get worse with larger size once beyond the limit. No matter How I try, the Image will not occupy all the area between the Horizontal Margins.
    Either this is a bug or undocumented limitation.
    Ahh.. One other possibility exists, that I am not smart enough. But if some one can help me here, It will be greatly appreciated.
    I am Using LV 8.2 on XP machine.
    I am attaching the VI and two PDF files, In "MyReport w1000.pdf" The XY Graph is 1000 Pixels Wide. In "MyReport w2000.pdf" I made it 2000 Pixels wide, however the size of the image did not increase on the report. Also You can notice the difference in quality between the two reports.
    To use my vi just size the graph to different sizes and run it, It will output to the default Printer. If you have a PDF writer set as default printer, It will save it to file.
    If anyone can help, I thank you and wish you...
    Good Luck!
    Mache

    I do not like Vivek's workaround. "Use HTML report"  is not acceptable when the question is about Standard report. People may want to use Standard report and there is a reason it is called standard.
    Anyway one solution is to size the image to most optimum size - as large as possible but retaining the graphical quality. This will still leave you with large white spaces around your graph object.
    Second solution that I am using is to Put the graph object and any other elements that I want on my report on a Front panel of a VI. Size the objects and front panel and objects appropriately and then use Print Panel to Printer method to Print the whole VI front panel. In my app. This VI which mimics the report is called from my app and is called Print Preview.  There is even a Vi that allows you to choose the printer. http://zone.ni.com/devzone/cda/epd/p/id/1327
    I am attaching a Sample Report and Code Snippet to look at.
    Good Luck!
    Mache
    Attachments:
    Labview Document.pdf ‏21 KB
    Print Code.jpg ‏30 KB

  • Thread problem in swing application?

    Hi,
    I have a doubt in GridLayout and Threads. I�m doing one small application which is accepting images and Alphabets. Actually, What I�m doing running images and alphabets(combinedly) in frequent intervals. For this I used GridLayout and Thread concept. But I have a problem in paint method. How to call the GridLayout frequently. In GridLayout , I�m putting Images and alphabets. Acutually in paint method , there are only drawString or drawImage or other methods. Is it possible to call my layout. Is so, can anybody help me in this regard. Is there any way to do it . please suggest me.
    Thanks,
    -Balaji
    My code follows:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.Graphics;
    import java.awt.Color;
    import javax.swing.*;
    import java.applet.Applet;
    import java.util.*;
    import java.io.*;
    public class GridLayEx2 extends Applet implements Runnable {
    private Random r = new Random();
    private Thread imageThread = null;
    GridLayout glt;
    public void init() {
    glt = new GridLayout(3,3);
    setLayout(glt);
    } // end of init method
    public void start(){
    if (imageThread == null) {
    imageThread = new Thread(this, "GridLayEx2");
    imageThread.start();
    } // end of start method
    public void run(){
    Thread myThread = Thread.currentThread();
    while (imageThread == myThread) {
    repaint();
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e){ }
    }// end of run method
    public void paint(Graphics g){
    Font boldFont = new Font("Helvetica", Font.BOLD, 25);
    Font plainDerived =
    boldFont.deriveFont(Font.PLAIN, 25);
    JLabel myLabel[] = new JLabel[9];
    String myUrl = "C:\\Regoti\\Vision\\AP\\Project\\Version1\\images\\duke1.gif";
    myLabel[0] = new JLabel(new ImageIcon(myUrl));
    myLabel[1] = new JLabel("A");
    myLabel[2] = new JLabel("A");
    myLabel[3] = new JLabel("A");
    myLabel[4] = new JLabel("A");
    myLabel[5] = new JLabel("A");
    myLabel[6] = new JLabel("A");
    myLabel[7] = new JLabel("A");
    myLabel[8] = new JLabel("A");
    myLabel[1].setFont(boldFont);
    myLabel[2].setFont(boldFont);
    myLabel[3].setFont(boldFont);
    myLabel[4].setFont(boldFont);
    myLabel[5].setFont(boldFont);
    myLabel[6].setFont(boldFont);
    myLabel[7].setFont(boldFont);
    myLabel[8].setFont(boldFont);
    int values[] = new int[9];
    values = gen_pos_uni_ran_num(0,8);
    for(int i = 0; i < 9; i++)
    add(myLabel[values]);
    } // end of paint method
    public void stop(){
    imageThread = null;
    } // end of stop method
    public int[] gen_pos_uni_ran_num(int min, int max)
    int results[] = new int[Math.abs(max - min) + 1];
    for(int i = 0; i < results.length; ++i)
    results = -1;
    outer_loop:
    for(int i = 0; i < results.length; ++i)
    int random_int = (int)((Math.random() * results.length) + min);
    for(int j = 0; j < results.length; ++j)
    if(results[j] == random_int)
    random_int = (int)((Math.random() * results.length) + min);
    j = -1;
    continue;
    if(j == results.length - 1)
    results = random_int;
    continue outer_loop;
    return results;
    } // generate unique random numbers
    public static void main( String args[])
    Frame GridLayFrame = new Frame ( " Grid Layout Frame ");
    GridLayEx2 gl = new GridLayEx2();
    gl.init();
    GridLayFrame.add(gl);
    GridLayFrame.pack();
    GridLayFrame.setSize(GridLayFrame.getPreferredSize());
    GridLayFrame.show();
    GridLayFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    } // end of main method

    hi,
    i got one doubt in the previous application. i want to put labels in the circle manner while changing my label positions. Now it is rectangular type. And also i want to change my background color of JFrame. Please see my code ...
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.Graphics;
    import java.awt.Color;
    import javax.swing.*;
    import java.util.*;
    import java.io.*;
    import java.net.URL;
    import java.net.MalformedURLException;
    import java.util.GregorianCalendar;
    public class GridLayEx6 extends JApplet{ 
       private Random r = new Random(); 
       private ActionListener taskPerformer;
       private javax.swing.Timer timer;  
       private GridLayout glt;  
       private JLabel[] myLabel;     
       GregorianCalendar todayDate = new GregorianCalendar();     
       long fromTime,toTime,elapsedTime;
       public void init() {     
            glt = new GridLayout(3,3);     
          Font boldFont = new Font("Helvetica", Font.BOLD, 25);     
          Font plainDerived = boldFont.deriveFont(Font.PLAIN, 25);     
             myLabel = new JLabel[9];     
             String myUrl = "C:\\Regoti\\Vision\\AP\\Project\\Version1\\images\\MyArrow.jpg";
             String myUrlA = "C:\\Regoti\\Vision\\AP\\Project\\Version1\\images\\MyA.jpg";     
             URL url = null;     
       try{
       myLabel[0] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);     
       myLabel[1] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);
       myLabel[2] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);
       myLabel[3] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);
       myLabel[4] = new JLabel("+", SwingConstants.CENTER);     
       myLabel[5] = new JLabel(new ImageIcon(myUrlA), SwingConstants.CENTER);
       myLabel[6] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);
       myLabel[7] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);
       myLabel[8] = new JLabel(new ImageIcon(myUrl), SwingConstants.CENTER);
       myLabel[2].setVerticalAlignment(SwingConstants.NORTH);     
       myLabel[4].setFont(boldFont);     
       getContentPane().setLayout(glt);     
      } catch( Exception e)
        { System.out.println(" Exception occurs "+e);}
       int delay = 20000; //milliseconds     
       ActionListener taskPerformer = new ActionListener() {     
       public void actionPerformed(ActionEvent evt) {      
                 randomDuke();
       timer = new javax.swing.Timer(delay, taskPerformer);     
       addKeyListener(new KeyAdapter()      {        
          public void keyPressed(KeyEvent e){           
                 GridLayEx6 gl2 = (GridLayEx6)e.getSource();           
                     switch(e.getKeyCode())
                           case(KeyEvent.VK_ENTER): 
                                gl2.randomDuke();                 
                                break;
                       case(KeyEvent.VK_SPACE):              
                            if(gl2.timer.isRunning())                    
                              { gl2.timer.stop();                 
                                    toTime = System.currentTimeMillis();
                                 elapsedTime = toTime - fromTime;
                                 System.out.println("toTime : "+toTime);
                                 System.out.println("elapsedTime : "+elapsedTime);
                                  gl2.timer.start();
                                   gl2.randomDuke();
                               break;
                       case(KeyEvent.VK_KP_RIGHT):case(KeyEvent.VK_KP_UP):              
                       case(KeyEvent.VK_RIGHT):case(KeyEvent.VK_UP):              
                         int delay = gl2.timer.getDelay();
                         if(delay > 0)                    
                            gl2.timer.setDelay(delay - 100);                 
                            break;
                       case(KeyEvent.VK_KP_LEFT):case(KeyEvent.VK_KP_DOWN):              
                       case(KeyEvent.VK_LEFT):case(KeyEvent.VK_DOWN):
                            int delay = gl2.timer.getDelay();                  
                            if(delay < 10000)                    
                                 gl2.timer.setDelay(delay + 100);                  
                                 break;
                       //timer.start();  
             } // end of init method  
             public void start()   {     
                  timer.start();     
                    while(!isFocusOwner())        
                            requestFocus(); 
             } // end of start method     
             public void stop(){    
                  timer.stop();
            } // end of stop method     
             /** To make sure we have focus in application *  
             * mode if JFrame loses focus control          *  
             * - non standard usage of paintComponent      */    
             public void paintComponent(Graphics g)   {
                  while(!isFocusOwner())        
                       requestFocus();  
            public void randomDuke()   {     
                  fromTime = System.currentTimeMillis();
                  System.out.println("fromtime : "+fromTime);     
                  getContentPane().removeAll();     
                  int[] values = new int[9];     
                  int temp;
                  values = gen_pos_uni_ran_num(0,8);     
                  for ( int i=0; i<=8;i++)
                          if ( values[i] == 4)
                                 temp = 4;
                                 values[i] = values[4];
                                 values[4] = temp;
                  for(int q = 0; q < 9; q++)   
                        getContentPane().add(myLabel[values[q]]);    
                       myLabel[0].revalidate();
                       myLabel[1].revalidate();
                       myLabel[2].revalidate();
                       myLabel[3].revalidate();
                       myLabel[5].revalidate();
                       myLabel[6].revalidate();
                       myLabel[7].revalidate();
                       myLabel[8].revalidate();
                    } // end of randomDuke method  
              public int[] gen_pos_uni_ran_num(int min, int max)   {     
                  int results[] = new int[Math.abs(max - min) + 1];     
                  for(int q = 0; q < results.length; ++q) 
                       results[q] = -1;     
                  outer_loop:     
                  for(int q = 0; q < results.length; ++q)  
                       int random_int = (int)((Math.random() * results.length) + min);        
                    for(int j = 0; j < results.length; ++j)       
                        if(results[j] == random_int)            {              
                            random_int = (int)((Math.random() * results.length) + min);              
                            j = -1;
                      continue;           
                     if(j == results.length - 1)
                          results[q] = random_int;              
                          continue outer_loop;
                  return results;  
                  } // generate unique random numbers  
                  public static void main( String args[])
                        JFrame GridLayFrame = new JFrame ( " Grid Layout Frame ");     
                       GridLayFrame.setSize(500,500);     
                       GridLayEx6 gl = new GridLayEx6();     
                       gl.init();     
                       GridLayFrame.getContentPane().add(gl);     
                       //GridLayFrame.setBackgroundColor(Color.white);
                       GridLayFrame.setVisible(true);
                       gl.start();     
                       GridLayFrame.addWindowListener(new WindowAdapter()      
                         public void windowClosing(WindowEvent e)         
                        System.exit(0);         }      });  
                  } // end of main method
                  }

  • PaintComponent method problems...

    Hi, I am developing an game application ( just for fun ) and I have a huge problem with paintComponent method. I Have a class ImagePanel that extends JPanel class. The ImagePanel class overrides the paintComponent method and paintChildren method ( since i have added components inside the JPanel also these must be painted ). The ImagePanel is instantied in my main class IntroView which extends JFrame where it's added. Now when the IntroPanel is created i have noticed that the paintComponent and paintChildren method is called all over again . I Have a soundclip playing in background in it's own thread and this continously paintComponent method call causes the sound clip to break off in few seconds. I Have tried to use JLabel instead of JPanel, but then the image is not shown( alltougth the methods are called only once ). I Have also tried next code to get rid of continous paintComponent call
    ...from ImagePanel class
    ImagePanel extends JPanel.....
    public final void paintComponent( Graphics g )
    if( firstTime )
    super.paintComponent( g );
    g.drawImage( myImage, 0, 0, this );
    firstTime = false;
    public final void paintChildrens( Graphics g )
    if( paintChildren )
    super.paintChildren( g );
    add( startLabel );
    add( optionsLabel );
    paintChildren = false;
    public boolean isOpaque()
    return true;
    Now the paintComponent and paintChildren is called only once. There is still a "little problem" since the paintComponent doesen't paint the image, it paints only the background( I think g.drawImage(...) didint have time to paint the image? ). Also the labels added in paintChildren method are not shown. Sounds paly now just fine.This situation makes me grazy. Please consult me with this problem.....i can surely send also the whole source if needed. There is no effect if I change isOpaque to true or false.

    Hi,
    Thanks for advices, I solved the problem...it was simplier than i thought. When the g.drawImage(.... is called ) i just added Thread.sleep( time ) after that line. This gives the sound therad time to play the sound without interrput and time to main thread to handle the image. All works now pretty much as i thought, except when JFrame is overlapped the image is not drawn again...this can be corrected ( maybe?)by adding windoslistener and implement the methods in that inteface and make some repainting in different situations. But cause you gave me the magic work Thread priority I hox! the problem, so here goes 10 duke dollars.

Maybe you are looking for

  • My iMac ( Summer 2010 ) internal Hard Drive failing.. It's a Seagate 500GB HDD.

    My new iMac  ( summer 2010 - July 2010 ) internal Hard Drive is failing.. 1)  sometimes the imac can't see the hard drive to boot from..       it would stay in the grey screen .. 2)  sometimes the imac boots up after a cold start.      but some appli

  • Storing the Timestamp field in the Table

    Hi I have a Z program and we need to store the timestamp field in the Z table . I have created the table with the dataelement TIMESTAMP . Is there any system field that can be used to store the timestamp field from your program say for example we hav

  • Showing only Approved Metapedia Terms

    This question is two fold: 1) Is there a way to only show approved metapedia terms? 2) How have others managed their metapedia terms in a "multi-tier" environment (dev / qa / prod)? Do you promote your terms / changes through different environments o

  • Error massage when itunes match tries to transfer information between my PC and APPLE server

    Hi, I got an situation that whenever I try to run the itunes match, it will disconnect with an error message as the attached pic.Could you please help me out with this problem?Thx!

  • Problems to run the patch for 9.2.02

    HI Gurus, I have some problem applying the 9.2.0.2 patch on oracle 9.2.01 base installation. Since I'm really a DBA, not sure how to execute the following pre_install statement: Drop the xmlconcat function by running the following commands: drop publ