SetBounds & setSize bug?

Hi All,
I have a strange problem with my applet, it sometimes does not fully display (Only display half or 1/3 of its height).
I tried to add setBounds and setSize calls, I even called to resize using Javascript but the applet still does not display full height. It's strange that if I manually resize the browser window containing the applet, then it displays correctly.
I use JRE_1.5.0_15.
Please advice?
Thanks

Hi,
please get JDeveloper 10.1.3.3 and let me know if this still exist. To my knowledge this issue has been fixed
Frank

Similar Messages

  • JToolTip & setBounds

    Hi,
    I'm new to tooltips. I whant to change size and location of my tooltip.
    But setBounds and setSize functions do nothing to change size and location!!!
    What is the problem??? May it be access' problems???
    All ideas and suggesstions are welcome!:)
    Thanks a lot!:)
    Best,
    Aram.

    My task is following:
    I need to create my own tooltip which will be resizable.
    I mean that it must be like JDialog or JFrame.
    And for this I have written my ToolTipManager and JComponent which will create my ToolTip. Here are examples of my code.class JJButton extends JButton {
        public JJButton(String text) {
            super(text);
        public JToolTip createToolTip() {
            JToolTip tip = new ResizableToolTip();
          tip.setComponent(this);
          return tip;
    }andclass ResizableToolTip extends JToolTip {
        JPanel panel = new JPanel();
        // here are other components
        public ResizableToolTip() {       
            ResizeManager resizeMgr = new ResizeManager();
            panel.addMouseListener(resizeMgr);
            panel.addMouseMotionListener(resizeMgr);
            setBorder(BorderFactory.createLineBorder(new Color(137, 137, 137), 1));      
            add(panel, BorderLayout.CENTER);
            panel.setBounds(10,10,10,10);
            // or this.setBound(10,10,10,10);
           revalidate();
        private class ResizeManager
                extends MouseAdapter
                implements MouseMotionListener {
            public void mouseDragged(MouseEvent e) {
            public void mouseEntered(MouseEvent e) {
            public void mouseReleased(MouseEvent e) {
            public void mousePressed(MouseEvent e) {
            public void mouseMoved(MouseEvent e) {
    }The problem is that setBounds, setSize functions cant change location and size of my ToolTip.
    Thanks a lot!:)
    Best,
    Aram.

  • JInternalFrame size issue

    I'm trying to make an IDE, and have started trying to create a nopepad type editor. My problem occurs when clicking new to create a new internal frame, the frame is created to be the same size as a maximised internal frame would be. I've tryed adding setBounds, setSize, setPreferredSize, setMaximumSize, setMinimumSize functions to the frame, but to no avail. This is the full listing of my code:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.text.*;
       Java IDE (Integrated Development Environment)
       IDE.java
       Sets up constants and main viewing frame.
       Advanced 2nd Year HND Project
       @author Mark A. Standen
       @Version 0.2 18/04/2002
    //=========================================================
    //   Main (public class)
    //=========================================================
    public class IDE extends JFrame
          Application Wide Constants
       /**   The Name of the Application   */
       private static final String APPLICATION_NAME = "Java IDE";
       /**   The Application Version   */
       private static final String APPLICATION_VERSION = "0.2";
       /**   The Inset from the edges of the screen of the main viewing frame   */
       private static final int INSET = 50;
       /**   The main frame   */
       private static IDE frame;
          MAIN
       public static void main (String[] Arguments)
          //Adds Cross-Platform functionality by adapting GUI
          try
             UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
             //Adapts to current system look and feel - e.g. windows
          catch (Exception e) {System.err.println("Can't set look and feel: " + e);}
          frame = new IDE();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setVisible(true);
          This Constructor creates an instance of Main, the main view frame.
          @param sizeX Width of the main view Frame in pixels
          @param sizeY Height of the main view Frame in pixels
       public IDE()
          super (APPLICATION_NAME + " (Version " + APPLICATION_VERSION + ")");
          Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
          this.setBounds( INSET, INSET, screenSize.width - (INSET * 2), screenSize.height - (INSET * 3) );
          JDesktopPane mainPane = new JDesktopPane();
          mainPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
          this.setContentPane(mainPane);
          this.getContentPane().setLayout( new BorderLayout() );
          this.getContentPane().add("North", new ToolBar() );
    //===================================================================
    //   ToolBar (private class)
    //===================================================================
       private class ToolBar extends JToolBar implements ActionListener
          /*   Create toolbar buttons   */
          private JButton newBox;
          private JButton load;
          private JButton save;
             Creates an un-named toolbar,
             with New, Load, and Save options.
          public ToolBar () {
                Use to make toolbar look nice later on
                ImageIcon imageNew = new ImageIcon("imgNew.gif");
                JButton toolbarNew = new JButton(imageNew);  
                ImageIcon imageLoad = new ImageIcon("imgLoad.gif");
                JButton toolbarLoad = new JButton(imageLoad);  
                ImageIcon imageSave = new ImageIcon("imgSave.gif");
                JButton toolbarSave = new JButton(imageSave);
                temp toolbar buttons for now
             newBox = new JButton("New");
             load = new JButton("Load");
             save = new JButton("Save");
             this.setFloatable(false);
             this.setOrientation(JToolBar.HORIZONTAL);
             this.add(newBox);
             this.add(load);
             this.add(save);
             newBox.addActionListener(this);
             load.addActionListener(this);
             save.addActionListener(this);
             Checks for button presses, and calls the relevant functions
          public void actionPerformed (ActionEvent event)
             Object source = event.getSource();
             /*   If new has been clicked   */
             if (source == newBox)
                TextDisplayFrame textBox = new TextDisplayFrame();
                Rectangle rect = this.getParent().getBounds();
                textBox.setBounds( rect.x - INSET, rect.y - INSET, rect.width - (INSET * 2), rect.height - (INSET * 2) );
                this.getParent().add(textBox);
                textBox.setVisible(true);
             /*   If load has been clicked   */
             else if (source == load)
                TextDisplayFrame textBox = new TextDisplayFrame();
                frame.getContentPane().add(textBox);
                System.out.println(textBox + "");
                textBox.loadDoc();
             /*   If save has been clicked   */
             else if (source == save)
    //====================================================================
    //   Menu (private class)
    //====================================================================
       private class Menu extends JMenu
          public Menu()
             JMenuBar menuBar = new JMenuBar();
             JMenu menu = new JMenu("Document");
             menu.setMnemonic(KeyEvent.VK_D);
             JMenuItem menuItem = new JMenuItem("New");
             menuItem.setMnemonic(KeyEvent.VK_N);
             menuItem.addActionListener(new ActionListener()
                   public void actionPerformed(ActionEvent e)
                      TextDisplayFrame textBox = new TextDisplayFrame();
                      //this.getContentPane().add(textBox);
             menu.add(menuItem);
             menuBar.add(menu);
             menuBar.setVisible(true);
    //====================================================================
    //   TextDisplayFrame (private class)
    //====================================================================
       private class TextDisplayFrame extends JInternalFrame
          /**   The Default Title of an internal pane   */
          private static final String DEFAULT_TITLE = "untitled";
          /**   Path to the current File   */
          private File filePath = new File ("C:" + File.separatorChar + "test.txt");
          /*   Swing Components   */
          private JTextArea mainTextArea;
          private JScrollPane scrollPane;
             Creates a TextDisplayFrame with the given arguments
             @param title Title of the TextDisplayFrame
          public TextDisplayFrame(String title)
             super(title, true, true, true, true); //creates resizable, closable, maximisable, and iconafiable internal frame
             this.setContentPane( textBox() );
             this.setPreferredSize( new Dimension (150, 100) );
             this.setMaximumSize( new Dimension (300, 300) );
             this.setVisible(true);
             Creates a resizable frame with the default title
          public TextDisplayFrame()
             this(DEFAULT_TITLE);
             Creates a blank, resizable central text area, for the entering of text
             @return Returns a JPanel object
          private JPanel textBox()
             mainTextArea = new JTextArea( new PlainDocument() );
             mainTextArea.setLineWrap(false);
             mainTextArea.setFont( new Font("monospaced", Font.PLAIN, 14) );
             scrollPane = new JScrollPane( mainTextArea );
             JPanel pane = new JPanel();
             BorderLayout bord = new BorderLayout();
             pane.setLayout(bord);
             pane.add("Center", scrollPane);
             return pane;
             @return Returns a JTextComponent to be used as document object
          public JTextComponent getDoc()
             return mainTextArea;
          public void loadDoc()
             /* Create blank Document */
             Document textDoc = new PlainDocument();
             /* Attempt to load the document in the filePath into the blank Document object*/
             try
                Reader fileInput = new FileReader(filePath);
                char[] charBuffer = new char[1000];
                int numChars;
                while (( numChars = fileInput.read( charBuffer, 0, charBuffer.length )) != -1 )
                   textDoc.insertString(textDoc.getLength(), new String( charBuffer, 0, numChars ), null);
             catch (IOException error) {System.out.println(error); }
             catch (BadLocationException error) {System.out.println(error); }
             /* Set the loaded document to be the text of the JTextArea */
             this.getDoc().setDocument( textDoc );
    }I would appreciate all/any help that can be offered.

    i have tried out your source and have made some modifications and now it works fine.
    move the desktoppane to be a private variable of the class, so that you can add the InternalFrame to it directly. also the setBounds() needs to be given lil' corrections to c that the InternalFrame appear on the visible area.
    i'm posting entire source just to make sure you don't confuse abt the changes. This is a working version. Hope it serves.
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.text.*;
    Java IDE (Integrated Development Environment)
    IDE.java
    Sets up constants and main viewing frame.
    Advanced 2nd Year HND Project
    @author Mark A. Standen
    @Version 0.2 18/04/2002
    //=========================================================
    // Main (public class)
    //=========================================================
    public class IDE extends JFrame
    Application Wide Constants
    /** The Name of the Application */
    private static final String APPLICATION_NAME = "Java IDE";
    /** The Application Version */
    private static final String APPLICATION_VERSION = "0.2";
    /** The Inset from the edges of the screen of the main viewing frame */
    private static final int INSET = 50;
    /** The main frame */
    private static IDE frame;
    /*********** CHANGED HERE ****************/
    private JDesktopPane mainPane;
    /*********** END CHANGE ****************/
    MAIN
    public static void main (String[] Arguments)
    //Adds Cross-Platform functionality by adapting GUI
    try
    UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
    //Adapts to current system look and feel - e.g. windows
    catch (Exception e) {System.err.println("Can't set look and feel: " + e);}
    frame = new IDE();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    This Constructor creates an instance of Main, the main view frame.
    @param sizeX Width of the main view Frame in pixels
    @param sizeY Height of the main view Frame in pixels
    public IDE()
    super (APPLICATION_NAME + " (Version " + APPLICATION_VERSION + ")");
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setBounds( INSET, INSET, screenSize.width - (INSET * 2), screenSize.height - (INSET * 3) );
              /*********** CHANGED HERE ****************/
    mainPane = new JDesktopPane();
    mainPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
    //this.setContentPane(mainPane);
    this.getContentPane().setLayout( new BorderLayout() );
    this.getContentPane().add(new ToolBar(), java.awt.BorderLayout.NORTH);
         this.getContentPane().add(mainPane, java.awt.BorderLayout.CENTER);
         /*********** END CHANGE ****************/
    //===================================================================
    // ToolBar (private class)
    //===================================================================
    private class ToolBar extends JToolBar implements ActionListener
    /* Create toolbar buttons */
    private JButton newBox;
    private JButton load;
    private JButton save;
    Creates an un-named toolbar,
    with New, Load, and Save options.
    public ToolBar () {
    Use to make toolbar look nice later on
    ImageIcon imageNew = new ImageIcon("imgNew.gif");
    JButton toolbarNew = new JButton(imageNew);
    ImageIcon imageLoad = new ImageIcon("imgLoad.gif");
    JButton toolbarLoad = new JButton(imageLoad);
    ImageIcon imageSave = new ImageIcon("imgSave.gif");
    JButton toolbarSave = new JButton(imageSave);
    temp toolbar buttons for now
    newBox = new JButton("New");
    load = new JButton("Load");
    save = new JButton("Save");
    this.setFloatable(false);
    this.setOrientation(JToolBar.HORIZONTAL);
    this.add(newBox);
    this.add(load);
    this.add(save);
    newBox.addActionListener(this);
    load.addActionListener(this);
    save.addActionListener(this);
    Checks for button presses, and calls the relevant functions
    public void actionPerformed (ActionEvent event)
    Object source = event.getSource();
    /* If new has been clicked */
    if (source == newBox)
    TextDisplayFrame textBox = new TextDisplayFrame();
    Rectangle rect = mainPane.getBounds();
    /*********** CHANGED HERE ****************/
    //textBox.setBounds( rect.x - INSET, rect.y - INSET, rect.width - (INSET * 2), rect.height - (INSET * 2) );
    //this.getParent().add(textBox);
    mainPane.add(textBox, javax.swing.JLayeredPane.DEFAULT_LAYER);
    textBox.setBounds(rect.x, rect.y, 500, 500);
    /*********** END CHANGE ****************/
    textBox.setVisible(true);
    /* If load has been clicked */
    else if (source == load)
    TextDisplayFrame textBox = new TextDisplayFrame();
    frame.getContentPane().add(textBox);
    System.out.println(textBox + "");
    textBox.loadDoc();
    /* If save has been clicked */
    else if (source == save)
    //====================================================================
    // Menu (private class)
    //====================================================================
    private class Menu extends JMenu
    public Menu()
    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("Document");
    menu.setMnemonic(KeyEvent.VK_D);
    JMenuItem menuItem = new JMenuItem("New");
    menuItem.setMnemonic(KeyEvent.VK_N);
    menuItem.addActionListener(new ActionListener()
    public void actionPerformed(ActionEvent e)
    TextDisplayFrame textBox = new TextDisplayFrame();
    //this.getContentPane().add(textBox);
    menu.add(menuItem);
    menuBar.add(menu);
    menuBar.setVisible(true);
    //====================================================================
    // TextDisplayFrame (private class)
    //====================================================================
    private class TextDisplayFrame extends JInternalFrame
    /** The Default Title of an internal pane */
    private static final String DEFAULT_TITLE = "untitled";
    /** Path to the current File */
    private File filePath = new File ("C:" + File.separatorChar + "test.txt");
    /* Swing Components */
    private JTextArea mainTextArea;
    private JScrollPane scrollPane;
    Creates a TextDisplayFrame with the given arguments
    @param title Title of the TextDisplayFrame
    public TextDisplayFrame(String title)
    super(title, true, true, true, true); //creates resizable, closable, maximisable, and iconafiable internal frame
    this.setContentPane( textBox() );
    this.setPreferredSize( new Dimension (150, 100) );
    /*********** CHANGED HERE ****************/
    //this.setMaximumSize( new Dimension (300, 300) );
    this.setNormalBounds(new Rectangle(300,300));
    /*********** END CHANGE ****************/
    this.setVisible(true);
    Creates a resizable frame with the default title
    public TextDisplayFrame()
    this(DEFAULT_TITLE);
    Creates a blank, resizable central text area, for the entering of text
    @return Returns a JPanel object
    private JPanel textBox()
    mainTextArea = new JTextArea( new PlainDocument() );
    mainTextArea.setLineWrap(false);
    mainTextArea.setFont( new Font("monospaced", Font.PLAIN, 14) );
    scrollPane = new JScrollPane( mainTextArea );
    JPanel pane = new JPanel();
    BorderLayout bord = new BorderLayout();
    pane.setLayout(bord);
    pane.add("Center", scrollPane);
    return pane;
    @return Returns a JTextComponent to be used as document object
    public JTextComponent getDoc()
    return mainTextArea;
    public void loadDoc()
    /* Create blank Document */
    Document textDoc = new PlainDocument();
    /* Attempt to load the document in the filePath into the blank Document object*/
    try
    Reader fileInput = new FileReader(filePath);
    char[] charBuffer = new char[1000];
    int numChars;
    while (( numChars = fileInput.read( charBuffer, 0, charBuffer.length )) != -1 )
    textDoc.insertString(textDoc.getLength(), new String( charBuffer, 0, numChars ), null);
    catch (IOException error) {System.out.println(error); }
    catch (BadLocationException error) {System.out.println(error); }
    /* Set the loaded document to be the text of the JTextArea */
    this.getDoc().setDocument( textDoc );

  • How to resize window (JFrame) on event

    I've got a swing application that uses tabs (JTabbedPane). It's default size is 200,200, and I need to resize the window to different sizes depending on what tab is selected. I can set the default size, but I can't seem to get access to the window to resize it (setBounds/setSize) at runtime.
    If anybody can tell me how I can go about this, I would greatly appreciate it.
    Matt
    Here's the code:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    public class TimeTrack_Example extends JFrame {
         Container cp = getContentPane();
      public static void main(String args[]) {
              TimeTrack_Example TT = new TimeTrack_Example();
              TT.setSize(200,200);
      public TimeTrack_Example() {
              JTabbedPane JTPane = new JTabbedPane();
              JTPane.addChangeListener(cl);
                   //Jobs Tab
              JPanel jpJobs = new JPanel();
              JTPane.addTab("Jobs", jpJobs);
                   //Timer Tab
              JPanel jpTimer = new JPanel();
              JTPane.addTab("Timers", jpTimer);
                   //Report Tab
              JPanel jpReport = new JPanel();
              JTPane.addTab("Report", jpReport);
        cp.add(JTPane);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {System.exit(0);}
        pack();
        show();
              //Tab ChangeListener
         ChangeListener cl = new ChangeListener() { 
              public void stateChanged(ChangeEvent e) {
                   int tabID = ((JTabbedPane)e.getSource()).getSelectedIndex();
                   if (tabID == 2) {
                        //???               //here's where I need to change the size
    }

    This is one way:
    create a method, lets call it resizeWindow(). Call this method from inside your ChangeListener.
    public void resizeWindow() {
    this.setSize(300, 400); //whatever values you want
    public void stateChange(ChangeEvent e) {
    if (tabID == 2) {
    resizeWindow();
    }

  • Help, experiencing minor bugs in program

    this is supposed to use rectangles and you should be able to load and save and they have colors and do a few more things with them, the loading is where it doesn't work.
    *-------------------------------------------------------------- 80 columns ---|
    * This is the main class for the application. It is built along the same
    * lines as the Editor class of project 1. It has a constructor, two instance
    * methods, and a static main()  that kicks the whole thing off.
    * The two instance methods are a menu creation method, and a menuItems
    * initialisation method.  The constructor instantiates the window
    * and sets up its internals by creating and installing the drawing canvas,
    * toolbar, and menus. All of the code works correctly as is and should
    * require no changes.
    * @version      1.1 15/04/01
    * @author       Julie Zelenski
    * @author       Restructured by Ian A. Mason
    * @see       javax.swing.JFrame
    * @see       javax.swing.JMenuBar
    * @see       javax.swing.JMenuItem
    * @see       javax.swing.JMenu
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class JavaDraw extends JFrame {
        final Toolbar toolbar = new Toolbar();
        final DrawingCanvas canvas = new DrawingCanvas(toolbar, 350, 350);
        final int menuMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
        final JMenuBar mb = new JMenuBar();
        final String[]
             fileMenuItems = {"Clear all", "Load file", "Save to file", "Quit"};
        final int[] fileKeyCodes = {KeyEvent.VK_N, KeyEvent.VK_O, KeyEvent.VK_S, KeyEvent.VK_Q};
        final ActionListener[] fileActionListeners = {
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.clearAll();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.loadFile();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.saveToFile();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  System.exit(0);}}
        final String[] editMenuItems = {"Cut", "Copy", "Paste", "Delete"};
        final int[] editKeyCodes = {KeyEvent.VK_X, KeyEvent.VK_C, KeyEvent.VK_V, KeyEvent.VK_BACK_SPACE};
        final int[] editMenuMasks = {menuMask, menuMask, menuMask, 0};
        final ActionListener[] editActionListeners = {
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.cut();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.copy();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.paste();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) { canvas.delete();}}
        final String[] layeringMenuItems = {"Bring to front", "Send to back"};
        final int[]    layeringKeyCodes = {KeyEvent.VK_F, KeyEvent.VK_B};
        final ActionListener[] layeringActionListeners = {
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.bringToFront();}},
         new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  canvas.sendToBack();}}
        private JavaDraw(){
         super("JavaDraw!");
         toolbar.setCanvas(canvas);
         getContentPane().add(toolbar, BorderLayout.SOUTH);
         getContentPane().add(canvas, BorderLayout.CENTER);
         createMenus();
         setJMenuBar(mb);
         setLocation(100, 20);
         pack();
         setVisible(true);
        static public void main(String[] args){
         JavaDraw javaDraw = new JavaDraw();
        private void initMenus(JMenu m,
                      String  miLabel,
                      int keyCode,
                      int menuMask,
                      ActionListener al){
         JMenuItem mi = new JMenuItem(miLabel);
         m.add(mi);
         mi.addActionListener(al);
         mi.setAccelerator(KeyStroke.getKeyStroke(keyCode, menuMask));
        private void createMenus(){
         JMenu m;
         m = new JMenu("File");
         for(int i = 0; i < fileMenuItems.length; i++)
             initMenus(m,
                    fileMenuItems,
              fileKeyCodes[i],
              menuMask,
              fileActionListeners[i]);
         mb.add(m);
         m = new JMenu("Edit");
         for(int i = 0; i < editMenuItems.length; i++)
         initMenus(m,
              editMenuItems[i],
              editKeyCodes[i],
              editMenuMasks[i],
              editActionListeners[i]);
         mb.add(m);
         m = new JMenu("Layering");
         for(int i = 0; i < layeringMenuItems.length; i++)
         initMenus(m,
              layeringMenuItems[i],
              layeringKeyCodes[i],
              menuMask,
              layeringActionListeners[i]);
         mb.add(m);
    *-------------------------------------------------------------- 80 columns ---|
    * The DrawingCanvas class a small extension of JComponent
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    * @see javax.swing.JComponent
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.util.*;
    public class DrawingCanvas extends JComponent{
    static final int DRAG_NONE = 0;
    static final int DRAG_CREATE = 1;
    static final int DRAG_RESIZE = 2;
    static final int DRAG_MOVE = 3;
    // list of all shapes on canvas
    protected Vector allShapes;          
    // currently selected shape (can be null at times)
    protected Rect selectedShape;
    // reference to toolbar to message for tool&color settings
    protected Toolbar toolbar;
    protected Rect clipboard=null;          
    /* These are the unimplemented menu commands. The menus are already
    * set up to send the correct messages to the canvas, but the
    * method bodies themselves are currently completely empty. It will
    * be your job to fill them in!
    public void cut() {
         copy();
         delete();
    public void copy() {
         int x=(int)selectedShape.getBounds().getX();
         int y=(int)selectedShape.getBounds().getY();
         Point p=new Point(x,y);
         clipboard=new Rect(p,this);
         clipboard.setBounds(selectedShape.getBounds());
    public void paste() {
         if(clipboard==null)
              return;
         allShapes.add(clipboard);
         setSelectedShape(clipboard);
         copy();
         this.repaint();
    public void delete() {
         if(selectedShape==null)
              return;
         else{
         int num=allShapes.indexOf(selectedShape);
         allShapes.remove(num);
         selectedShape=null;
         this.repaint();
    public void clearAll() {
         allShapes.removeAllElements();
         this.repaint();
    public void loadFile() {
         Load load=new Load(this);
         load.setSize(250,200);
         load.validate();
         load.setVisible(true);
    public void done(Vector vect){
         allShapes.removeAllElements();
         for(int i=0;i<vect.size();i++){
              allShapes.add(vect.elementAt(i));
         this.repaint();
    public void saveToFile() {
         Save save=new Save(allShapes);
         save.setSize(250,200);
         save.validate();
         save.setVisible(true);
    public void bringToFront() {
         if(selectedShape==null)
              return;
         int size=allShapes.size();
         int index=allShapes.indexOf(selectedShape);
         for(int i=index+1;i<=size-1;i++){
              allShapes.set(i-1,allShapes.elementAt(i));
         allShapes.set(size-1,selectedShape);
         this.repaint();
    public void sendToBack() {
         if(selectedShape==null)
              return;
         int index=allShapes.indexOf(selectedShape);
         for(int i=index-1;i>=0;i--){
              allShapes.remove(allShapes.elementAt(i+1));
              allShapes.add(i+1,allShapes.elementAt(i));
         allShapes.remove(allShapes.elementAt(0));
         allShapes.add(0,selectedShape);
         this.repaint();
    * Constructor for creating a new empty DrawingCanvas. We set up
    * our size and background colors, instantiate an empty vector of shapes,
    * and install a listener for mouse events using our inner class
    * CanvasMouseHandler
    public DrawingCanvas(Toolbar tb, int width, int height){
         setPreferredSize(new Dimension(width, height));
         setBackground(Color.white);
         toolbar = tb;
         allShapes = new Vector();
         selectedShape = null;
         CanvasMouseHandler handler = new CanvasMouseHandler();
         addMouseListener(handler);
         addMouseMotionListener(handler);
    * All components are responsible for drawing themselves in
    * response to repaint() requests. The standard method a component
    * overrides is paint(Graphics g), but for Swing components, the default
    * paint() handler calls paintBorder(), paintComponent() and paintChildren()
    * For a Swing component, you override paintComponent and do your
    * drawing in that method. For the drawing canvas, we want to
    * clear the background, then iterate through our shapes asking each
    * to draw. The Graphics object is clipped to the region to update
    * and we use to that avoid needlessly redrawing shapes outside the
    * update region.
    public void paintComponent(Graphics g){
         Rectangle regionToRedraw = g.getClipBounds();
         g.setColor(getBackground());
         g.fillRect(regionToRedraw.x, regionToRedraw.y,
              regionToRedraw.width, regionToRedraw.height);
         Iterator iter = allShapes.iterator();
         while (iter.hasNext())
         ((Rect)iter.next()).draw(g, regionToRedraw);
    * Changes the currently selected shape. There is at most
    * one shape selected at a time on the canvas. It is possible
    * for the selected shape to be null. Messages the shape to
    * change its selected state which will in turn refresh the
    * shape with the knobs active.
    protected void setSelectedShape(Rect shapeToSelect) {
         // if change in selection
         if (selectedShape != shapeToSelect) {
         // deselect previous selection
         if (selectedShape != null)
              selectedShape.setSelected(false);
         // set selection to new shape
         selectedShape = shapeToSelect;
         if (selectedShape != null) {
              shapeToSelect.setSelected(true);
    * A hit-test routine which finds the topmost shape underneath a
    * given point.We search Vector of shapes in back-to-front order
    * since shapes created later are added to end and drawn last, thus
    * appearing to be "on top" of the earlier ones. When a click comes
    * in, we want to select the top-most shape.
    protected Rect shapeContainingPoint(Point pt){
         for (int i = allShapes.size()-1; i >= 0; i--) {
         Rect r = (Rect)allShapes.elementAt(i);
         if (r.inside(pt)) return r;
         return null;
    * The inner class CanvasMouseHandler is the object that handles the
    * mouse actions (press, drag, release) over the canvas. Since there is
    * a bit of state to drag during the various operations (which shape,
    * where we started from, etc.) it is convenient to encapsulate all that
    * state with this little convenience object and register it as the
    * handler for mouse events on the canvas.
    protected class CanvasMouseHandler
         extends MouseAdapter implements MouseMotionListener {
         Point dragAnchor;          
         // variables using to track state during drag operations
         int dragStatus;
         /** When the mouse is pressed we need to figure out what
         * action to take. If the tool mode is arrow, the click might
         * be a select, move or reisze. If the tool mode is one of the
         * shapes, the click initiates creation of a new shape.
         public void mousePressed(MouseEvent event){
         Rect clicked = null;
         Point curPt = event.getPoint();
         // first, determine if click was on resize knob of selected shape
         if (toolbar.getCurrentTool() == Toolbar.SELECT) {
              if (selectedShape != null &&
              (dragAnchor = selectedShape.getAnchorForResize(curPt))
              != null) {
              // drag will resize this shape
              dragStatus = DRAG_RESIZE;     
              } else if ((clicked = shapeContainingPoint(curPt)) != null) {
              // if not, check if any shape was clicked
              setSelectedShape(clicked);
              // drag will move this shape      
              dragStatus = DRAG_MOVE;
              dragAnchor = curPt;
              } else {     
              // else this was a click in empty area,
              // deselect selected shape,
              setSelectedShape(null);
              // drag does nothing in this case
              dragStatus = DRAG_NONE;
         } else {
              Rect newShape = new Rect(curPt, DrawingCanvas.this);
              // create rect here
              allShapes.add(newShape);
              setSelectedShape(newShape);
              dragStatus = DRAG_CREATE;          
              // drag will create (resize) this shape
              dragAnchor = curPt;
         /** As the mouse is dragged, our listener will receive periodic
         * updates as mouseDragged events. When we get an update position,
         * we update the move/resize event that is in progress.
         public void mouseDragged(MouseEvent event){
         Point curPt = event.getPoint();
         switch (dragStatus) {
         case DRAG_MOVE:
              selectedShape.translate(curPt.x - dragAnchor.x,
                             curPt.y - dragAnchor.y);
              // update for next dragged event
              dragAnchor = curPt;
              break;
         case DRAG_CREATE: case DRAG_RESIZE:
              selectedShape.resize(dragAnchor, curPt);
              break;
         public void mouseMoved(MouseEvent e) {}
    /** A little helper routine that will be useful for the load & save
    * operations. It brings up the standard JFileChooser dialog and
    * allows the user to specify a file to open or save. The return
    * value is the full path to the chosen file or null if no file was
    * selected.
    protected String filenameChosenByUser(boolean forOpen){
         JFileChooser fc = new JFileChooser(System.getProperty("user.dir") +
                             java.io.File.separator + "Documents");
         int result = (forOpen? (fc.showOpenDialog(this)) :
              fc.showSaveDialog(this));
         java.io.File chosenFile = fc.getSelectedFile();
         if (result == JFileChooser.APPROVE_OPTION && chosenFile != null)
         return chosenFile.getPath();
         return null;
         // return null if no file chosen or dialog cancelled
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Vector;
    import java.io.*;
    class Load extends JFrame implements ActionListener, Serializable{
         Container contentPane;
         JTextField jtf;
         JButton jb;
         Object obj=null;
         Load load;
         Thread thread;
         DrawingCanvas draw;
         public Load(DrawingCanvas dc){
              draw=dc;
              contentPane=getContentPane();
              contentPane.setLayout(new FlowLayout());
              jtf=new JTextField(20);
              jb=new JButton("Load");
              jb.addActionListener(this);
              contentPane.add(jtf);
              contentPane.add(jb);
         public void actionPerformed(ActionEvent e){
              String text=jtf.getText();
              SimpleObjectReader reader=SimpleObjectReader.openFileForReading(text+".shp");
              if(reader==null){
                   System.out.println("Couldn't open file!");
                   return;
              obj=reader.readObject();
              reader.close();
              draw.done((Vector)obj);
              this.setVisible(false);
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.Vector;
    import java.io.*;
    class Save extends JFrame implements ActionListener, Serializable{
         Container contentPane;
         JTextField jtf;
         Vector shapes;
         JButton jb;
         public Save(Vector shapeVector){
              shapes=shapeVector;
              contentPane=getContentPane();
              contentPane.setLayout(new FlowLayout());
              jtf=new JTextField(20);
              jb=new JButton("Save");
              jb.addActionListener(this);
              contentPane.add(jtf);
              contentPane.add(jb);
         public void actionPerformed(ActionEvent e){
              String text=jtf.getText();
              SimpleObjectWriter writer=SimpleObjectWriter.openFileForWriting(text+".shp");
              if(writer==null){
                   System.out.println("Couldn't open file!");
                   return;
              writer.writeObject(shapes);
              writer.close();
              this.setVisible(false);
    *-------------------------------------------------------------- 80 columns ---|
    * The RectShape class defines a simple rectangular shape object.
    * It tracks its bounding box, selected state, and the canvas it is being
    * drawn in. It has some basic methods to select, move, and resize the
    * rectangle. It has methods that draw the shape in the selected or unselected
    * states and updates the canvas whenever the state or bounds of the rectangle
    * change. The code that is there works properly, but you will need to extend
    * and change the code to support additional features.
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    import java.awt.*;
    import java.io.*;
    public class Rect implements Serializable{     
    protected Rectangle bounds;
    protected boolean isSelected;
    public Color color;
    public DrawingCanvas canvas;
    protected static final int KNOB_SIZE = 6;
    protected static final int NONE = -1;
    protected static final int NW = 0;
    protected static final int SW = 1;
    protected static final int SE = 2;
    protected static final int NE = 3;
    /** The constructor that creates a new zero width and height rectangle
    * at the given position in the canvas.
    public Rect(Point start, DrawingCanvas dcanvas){
         canvas = dcanvas;
         bounds = new Rectangle(start);
         color=canvas.toolbar.getCurrentColor();
    /** The "primitive" for all resizing/moving/creating operations that
    * affect the rect bounding box. The current implementation just resets
    * the bounds variable and triggers a re-draw of the union of the old &
    * new rectangles. This will redraw the shape in new size and place and
    * also "erase" if bounds are now smaller than before. It is a good
    * design to have all changes to a critical variable bottleneck through
    * one method so that you can be sure that all the updating that goes
    * with it only needs to be implemented in this one place. If any of your
    * subclasses have additional work to do when the bounds change, this is
    * the method to override. Make sure that any methods that change the
    * bounds call this method instead of directly manipulating the variable.
    protected void setBounds(Rectangle newBounds){
         Rectangle oldBounds = bounds;
         bounds = newBounds;
         updateCanvas(oldBounds.union(bounds));
    /** The resize operation is called when first creating a rect, as well as
    * when later resizing by dragging one of its knobs. The two parameters
    * are the points that define the new bounding box. The anchor point
    * is the location of the mouse-down event during a creation operation
    * or the opposite corner of the knob being dragged during a resize
    * operation. The end is the current location of the mouse. If you
    * create the smallest rectangle which encloses these two points, you
    * will have the new bounding box. Use the setBounds() primitive which
    * is the bottleneck we are using for all geometry changes, it handles
    * updating and redrawing.
    public void resize(Point anchor, Point end){
         Rectangle newRect = new Rectangle(anchor);
         // creates smallest rectange which
         // includes both anchor & end
         newRect.add(end);
         // reset bounds & redraw affected areas
         setBounds(newRect);      
    public Rectangle getBounds(){
         return bounds;
    /** The translate operation is called when moving a shape by dragging in
    * the canvas. The two parameters are the delta-x and delta-y to move
    * by. Note that either or both can be negative. Create a new rectangle
    * from our bounds and translate and then go through the setBounds()
    * primitive to change it.
    public void translate(int dx, int dy){
         Rectangle newRect = new Rectangle(bounds);
         newRect.translate(dx, dy);
         setBounds(newRect);
    /** Used to change the selected state of the shape which will require
    * updating the affected area of the canvas to add/remove knobs.
    public void setSelected(boolean newState){
         isSelected = newState;
         // need to erase/add knobs
         // including extent of extended bounds
         updateCanvas(bounds, true);
    /** The updateCanvas() methods are used when the state has changed
    * in such a way that it needs to be refreshed in the canvas to properly
    * reflect the new settings. The shape should take responsibility for
    * messaging the canvas to properly update itself. The appropriate AWT/JFC
    * way to re-draw a component is to send it the repaint() method with the
    * rectangle that needs refreshing. This will cause an update() event to
    * be sent to the component which in turn will call paint(), where the
    * real drawing implementation goes. See the paint() method in
    * DrawingCanvas to see how it is implemented.
    protected void updateCanvas(Rectangle areaOfChange, boolean enlargeForKnobs){
         Rectangle toRedraw = new Rectangle(areaOfChange);
         if (enlargeForKnobs)
         toRedraw.grow(KNOB_SIZE/2, KNOB_SIZE/2);
         canvas.repaint(toRedraw);
    protected void updateCanvas(Rectangle areaOfChange){
         updateCanvas(areaOfChange, isSelected);
    /** When the DrawingCanvas needs a shape to draw itself, it sends a draw
    * message, passing the graphics context and the current region being
    * redrawn. If the shape intersects with that region, it must draw itself
    * doing whatever it takes to properly represent itself in the canvas
    * (colors, location, size, knobs, etc.) by messaging the Graphics object.
    public void draw(Graphics g, Rectangle regionToDraw){
         if (!bounds.intersects(regionToDraw))
         return;
         g.setColor(color);
         g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
         if (isSelected) { // if selected, draw the resizing knobs
         // along the 4 corners
         Rectangle[] knobs = getKnobRects();
         for (int i = 0; i < knobs.length; i++)
              g.fillRect(knobs[i].x, knobs[i].y,
                   knobs[i].width, knobs[i].height);
    /** When the DrawingCanvas needs to determine which shape is under
    * the mouse, it asks the shape to determine if a point is "inside".
    * This method should returns true if the given point is inside the
    * region for this shape. For a rectangle, any point within the
    * bounding box is inside the shape.
    public boolean inside(Point pt){
         return bounds.contains(pt);
    /** When needed, we create the array of knob rectangles on demand. This
    * does mean we create and discard the array and rectangles repeatedly.
    * These are small objects, so perhaps it is not a big deal, but
    * a valid alternative would be to store the array of knobs as an
    * instance variable of the Shape and and update the knobs as the bounds
    * change. This means a little more memory overhead for each Shape
    * (since it is always storing the knobs, even when not being used) and
    * having that redundant data opens up the possibility of bugs from
    * getting out of synch (bounds move but knobs didn't, etc.) but you may
    * find that a more appealing way to go. Either way is fine with us.
    * Note this method provides a nice unified place for one override from
    * a shape subclass to substitute fewer or different knobs.
    protected Rectangle[] getKnobRects(){
         Rectangle[] knobs = new Rectangle[4];
         knobs[NW] = new Rectangle(bounds.x - KNOB_SIZE/2,
                        bounds.y - KNOB_SIZE/2, KNOB_SIZE, KNOB_SIZE);
         knobs[SW] = new Rectangle(bounds.x - KNOB_SIZE/2,
                        bounds.y + bounds.height - KNOB_SIZE/2,
                        KNOB_SIZE, KNOB_SIZE);
         knobs[SE] = new Rectangle(bounds.x + bounds.width - KNOB_SIZE/2,
                        bounds.y + bounds.height - KNOB_SIZE/2,
                        KNOB_SIZE, KNOB_SIZE);
         knobs[NE] = new Rectangle(bounds.x + bounds.width - KNOB_SIZE/2,
                        bounds.y - KNOB_SIZE/2,
                        KNOB_SIZE, KNOB_SIZE);
         return knobs;
    /** Helper method to determine if a point is within one of the resize
    * corner knobs. If not selected, we have no resize knobs, so it can't
    * have been a click on one. Otherwise, we calculate the knob rects and
    * then check whether the point falls in one of them. The return value
    * is one of NW, NE, SW, SE constants depending on which knob is found,
    * or NONE if the click doesn't fall within any knob.
    protected int getKnobContainingPoint(Point pt){
         // if we aren't selected, the knobs
         // aren't showing and thus there are no knobs to check
         if (!isSelected) return NONE;
         Rectangle[] knobs = getKnobRects();
         for (int i = 0; i < knobs.length; i++)
         if (knobs[i].contains(pt))
              return i;
         return NONE;
    /** Method used by DrawingCanvas to determine if a mouse click is starting
    * a resize event. In order for it to be a resize, the click must have
    * been within one of the knob rects (checked by the helper method
    * getKnobContainingPoint) and if so, we return the "anchor" ie the knob
    * opposite this corner that will remain fixed as the user drags the
    * resizing knob of the other corner around. During the drag actions of a
    * resize, that fixed anchor point and the current mouse point will be
    * passed to the resize method, which will reset the bounds in response
    * to the movement. If the mouseLocation wasn't a click in a knob and
    * thus not the beginning of a resize event, null is returned.
    public Point getAnchorForResize(Point mouseLocation){
         int whichKnob = getKnobContainingPoint(mouseLocation);
         // no resize knob is at this location
         if (whichKnob == NONE)
         return null;
         switch (whichKnob) {
         case NW: return new Point(bounds.x + bounds.width,
                        bounds.y + bounds.height);
         case NE: return new Point(bounds.x, bounds.y + bounds.height);
         case SW: return new Point(bounds.x + bounds.width, bounds.y);
         case SE: return new Point(bounds.x, bounds.y);
         return null;
    import java.io.*;
    * SimpleObjectReader is a small class to wrap around the usual ObjectStream
    * to shield you from the exception handling which we haven't yet gotten
    * to in class.
    * <P>It has just three methods of note: one to open a new file for reading,
    * one to read an object from an open file, and one to close the file when done.
    * <P>Any object that you attempt to read must properly implement the Serializable
    * interface. Here is a simple example that shows using the SimpleFileReader to
    * to rehydrate objects from a file and print them:
    * <PRE>
    * SimpleObjectReader reader = SimpleObjectReader.openFileForReading("shapes");
    * if (reader == null) {
    * System.out.println("Couldn't open file!");
    * return;
    * Object obj;
    * while ((obj = reader.readObject()) != null)
    * System.out.println(obj);
    * reader.close();
    * </PRE>
    * <P>You are free to edit or extend this class, but we don't expect that
    * you should need to make any changes.
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    public class SimpleObjectReader {
    private ObjectInputStream ois;
    * Opens a new file for reading. The filename can either be a relative
    * path, which will be relative to the working directory of the program
    * when started, or an absolute path. If the file exists and can be
    * opened, a new SimpleObjectReader is returned. If the file cannot be
    * opened (for any reason: wrong name, wrong path, lack of permissions, etc.)
    * null is returned.
    public static SimpleObjectReader openFileForReading(String filename){
         try {
         return new SimpleObjectReader(new ObjectInputStream(new FileInputStream(filename)));
         } catch(IOException e) {     
         return null;
    * Reads a single object from the file and returns it. If there are
    * no more objects in the file (i.e, we have reached the end of file),
    * null is returned null is returned. null is also
    * returned on any I/O error.
    public Object readObject (){
         try {
         return ois.readObject();
         } catch (IOException e) {
         e.printStackTrace();
         return null;
         } catch (ClassNotFoundException e) {
         e.printStackTrace();
         return null;
    * Closes the file when done reading. You should close a reader when
    * you are finished to release the OS resources for use by others.
    public void close (){
         try {
         ois.close();
         catch (IOException e) {}
    * Constructor is private so that only means to create a new reader
    * is through the static method which does error checking.
    private SimpleObjectReader(ObjectInputStream ois){
         this.ois = ois;
    import java.io.*;
    * SimpleObjectWriter is a small class to wrap around the usual
    * ObjectOutputStream to shield you from the exception handling
    * which we haven't yet gotten to in class.
    * <P>It has just three methods of note: one to open a new file for writing,
    * one to write an object to the file, and one to close the
    * the file when done.
    * <P>Here is a simple example that shows using the SimpleObjectWriter
    * to create a new file and write some objects into it:
    * <PRE>
    * SimpleObjectWriter writer =
    * SimpleObjectWriter.openFileForWriting("objects");
    * if (writer == null) {
    * System.out.println("Couldn't open file!");
    * return;
    * writer.writeObject("Here is a string");
    * writer.writeObject("And another one.");
    * writer.writeObject(new Date());
    * writer.close();
    * </PRE>
    * <P>You are free to edit or extend this class, but we don't expect that
    * you should need to make any changes.
    * @version 1.1 15/04/01
    * @author Julie Zelenski
    * @author (touched up by Ian A. Mason)
    public class SimpleObjectWriter {
    private ObjectOutputStream oos;
    * Opens a new file for writing. The filename can either be a relative
    * path, which will be relative to the working directory of the program
    * when started, or an absolute path. If the file can be created, a
    * new SimpleObjectWriter is returned. If the file already exists, this
    * will overwrite its content

    I'm not reading that either, but to help you for next time:
    - use more than 1 sentence to describe your problem
    - only post the RELEVANT code, or a small test program with the same problem if possible.
    At least you formatted it, I'll give you that.
    Cheers,
    Radish21
    PS. I think in this case, posting another (better worded) thread might be a good idea, because no one is going to read this one. In general though, don't :)

  • Dynamic resizing in JDialog using setSize not working properly

    Hi,
    I have a dialog in which i have two radio buttons.
    As i click on other radio button the size of the dialog should change.
    I did so using setSize.
    As i change the size from smaller dialog to a bigger one then newly created portion is not painted properly. Although the size is increased but the painting of the new portion is not done fine.
    Any ideas?
    Is this is a Java bug?
    Here is the code snippet:
    public MyDialog() {
         Container contentPane = this.getContentPane();
         JPanel radioPanel = new JPanel();
    ButtonGroup radioGroup = new ButtonGroup();
    mInstancesButton = new JRadioButton("Instances");
    mActivitiesButton = new JRadioButton("Activities");
    mInstancesButton.setBounds(100,0,100,25);
    mActivitiesButton.setBounds(200,0,100,25);
    mInstancesButton.addItemListener(this);
    mActivitiesButton.addItemListener(this);
    radioGroup.add(mInstancesButton);
    radioGroup.add(mActivitiesButton);
    radioPanel.setLayout(null);
    radioPanel.add(mInstancesButton);
    radioPanel.add(mActivitiesButton);
    radioGroup.setSelected(mInstancesButton.getModel(), true);
         contentPane.add(radioPanel);
         this.setSize(600,300);
    public void itemStateChanged(ItemEvent ie) {
    Container contentPane = this.getContentPane();
    if(ie.getSource().equals(mInstancesButton) && ie.getStateChange() == ie.SELECTED) {
    this.setSize(600,300);
    else if(ie.getSource().equals(mActivitiesButton) && ie.getStateChange() == ie.SELECTED) {
    this.setSize(600, 500);

    Hi,
    It's only an approach but try a call of validate() or repaint() after re-setting the size of your dialog.
    Cheers, Mathias

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

  • Need help fixing a bug with this program...

    I've been working for hours trying to fix the bug I have with this program...
    http://ss.majinnet.com/AccountManager.java - This is the source code of my program
    http://ss.majinnet.com/Dalzhim.jpg - This is an image used inside the program
    http://ss.majinnet.com/sphereaccu.scp - This is a text file you need to use the program
    First of all, to know what bug I am talking about.. You will need to download those 3 files.. Then you can compile AccountManager.java and run it.. When the program has opened, go into: File -> Open Account File
    and browse until you can open up the text file sphereaccu.scp ... Then there should be a list of names appearing on the left, and when you select any, there will be variables appearing in the TextFields on the right. When that's done, all you have to do to see where the bugs are is to use the options: Edit -> Create New Account as well as Edit -> Remove Account ... When you use the Create New Account option for the first time, it works fine.. But when you use it a second time, errors are appearing on the console (can't find what generates those errors...). And the biggest problem is that when you use the Remove Account option, it doesn't remove the selected account, and over that it generates errors in the console as well...
    If anyone can help me fix those errors, I'd be very grateful !

    won't pretend to understand everything or why you do somethings, but FWIW,
    //package Dalzhim.AccountManager;
    import java.io.*;
    import java.awt.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    public class AccountManager
          JFrame window;
          Container mainPane;
          JSplitPane splitPane;
          JPanel leftPane,rightPane;
          JList accountList;
          JTextField accountName,plevel,priv,password,totaltime,lasttime,lastchar,firstconnect;
          JTextField firstIP,lastconnect,lastIP,lang;
          JLabel label1,label2,label3,label4,label5,label6,label7,label8,label9,label10,label11,label12;
          JMenuBar menuBar;
          JMenu file,edit,end;
          JMenuItem open,save,quit,create,remove,search,ab;
          JFileChooser jfc,jfcs;
          JButton searchButton,createButton;
          JTextField searchString,newName,newPassword,newPLevel;
          JDialog searchWindow,createWindow;
          File accountFile = null;
          File savingFile = null;
          FileInputStream fis;
          StringTokenizer st;
          String content;
          String lastSearch = "";
          String[] strings,lines;
          String[] parameters,arguments;
          Vector accountNames;
          Hashtable plevels,privs,passwords,totaltimes,lasttimes,lastchars,firstconnects;
          Hashtable firstIPs,lastconnects,lastIPs,langs;
          String newline = "";
          int[] activated;
          int lastSelection = -1;
          AL al;
          LL ll;
          public static void main(String args[])
          AccountManager am = new AccountManager();
          public AccountManager()
          al = new AL();
          ll = new LL();
          window = new JFrame("Account Manager");
          mainPane = window.getContentPane();
          leftPane = new JPanel();
          rightPane = new JPanel();
          leftPane.setLayout(new GridLayout(1,1,5,5));
          rightPane.setLayout(null);
          splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftPane,rightPane);
          mainPane.setLayout(new GridLayout(1,1,5,5));
          mainPane.add(splitPane);
          menuBar = new JMenuBar();
          file = new JMenu("File");
          edit = new JMenu("Edit");
          end = new JMenu("?");
          menuBar.add(file);
          menuBar.add(edit);
          menuBar.add(end);
          open = new JMenuItem("Open Account File");
          open.addActionListener(al);
          file.add(open);
          save = new JMenuItem("Save Account File");
          save.addActionListener(al);
          file.add(save);
          quit = new JMenuItem("Quit");
          quit.addActionListener(al);
          file.add(quit);
          create = new JMenuItem("Create New Account");
          create.addActionListener(al);
          edit.add(create);
          remove = new JMenuItem("Remove Selected Account");
          remove.addActionListener(al);
          edit.add(remove);
          search = new JMenuItem("Search");
          search.addActionListener(al);
          edit.add(search);
          ab = new JMenuItem("About");
          ab.addActionListener(al);
          end.add(ab);
          window.setJMenuBar(menuBar);
          accountList = new JList();
          accountList.addListSelectionListener(ll);
          leftPane.add(new JScrollPane(accountList));
          accountName = new JTextField(50);
          plevel = new JTextField(50);
          priv = new JTextField(50);
          password = new JTextField(50);
          totaltime = new JTextField(50);
          lasttime = new JTextField(50);
          lastchar = new JTextField(50);
          firstconnect = new JTextField(50);
          firstIP = new JTextField(50);
          lastconnect = new JTextField(50);
          lastIP = new JTextField(50);
          lang = new JTextField(50);
          label1 = new JLabel("Account Name:");
          label2 = new JLabel("Player Level:");
          label3 = new JLabel("Priv Level:");
          label4 = new JLabel("Password:");
          label5 = new JLabel("Total Connected Time:");
          label6 = new JLabel("Last Connected Time:");
          label7 = new JLabel("Last Character Used:");
          label8 = new JLabel("First Connect Data:");
          label9 = new JLabel("First Connected IP:");
          label10 = new JLabel("Last Connected Date:");
          label11 = new JLabel("Last Connected IP:");
          label12 = new JLabel("Language:");
          rightPane.add(accountName);
          rightPane.add(plevel);
          rightPane.add(priv);
          rightPane.add(password);
          rightPane.add(totaltime);
          rightPane.add(lasttime);
          rightPane.add(lastchar);
          rightPane.add(firstconnect);
          rightPane.add(firstIP);
          rightPane.add(lastconnect);
          rightPane.add(lastIP);
          rightPane.add(lang);
          rightPane.add(label1);
          rightPane.add(label2);
          rightPane.add(label3);
          rightPane.add(label4);
          rightPane.add(label5);
          rightPane.add(label6);
          rightPane.add(label7);
          rightPane.add(label8);
          rightPane.add(label9);
          rightPane.add(label10);
          rightPane.add(label11);
          rightPane.add(label12);
          label1.setBounds(10,10,150,25);
          accountName.setBounds(175,10,200,25);
          label2.setBounds(10,40,150,25);
          plevel.setBounds(175,40,200,25);
          label3.setBounds(10,70,150,25);
          priv.setBounds(175,70,200,25);
          label4.setBounds(10,100,150,25);
          password.setBounds(175,100,200,25);
          label5.setBounds(10,130,150,25);
          totaltime.setBounds(175,130,200,25);
          label6.setBounds(10,160,150,25);
          lasttime.setBounds(175,160,200,25);
          label7.setBounds(10,190,150,25);
          lastchar.setBounds(175,190,200,25);
          label8.setBounds(10,220,150,25);
          firstconnect.setBounds(175,220,200,25);
          label9.setBounds(10,250,150,25);
          firstIP.setBounds(175,250,200,25);
          label10.setBounds(10,280,150,25);
          lastconnect.setBounds(175,280,200,25);
          label11.setBounds(10,310,150,25);
          lastIP.setBounds(175,310,200,25);
          label12.setBounds(10,340,150,25);
          lang.setBounds(175,340,200,25);
          Dimension rightdim = new Dimension(380,425);
          rightPane.setMinimumSize(rightdim);
          window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          window.pack();
          window.setSize(550,425);
          window.setResizable(false);
          window.setVisible(true);
          public void openAccountFile()
          byte[] b = null;
          try
             fis = new FileInputStream(accountFile);
             b = new byte[fis.available()];
             fis.read(b,0,fis.available());
          catch(FileNotFoundException e)
          catch(IOException e)
          content = new String(b);
          newline = String.valueOf(content.charAt(content.indexOf("\n")));
          parseAccountFile();
          public void parseAccountFile()
          StringTokenizer st = new StringTokenizer(content, "[");
          strings = new String[st.countTokens()];
          createArrays();
          for (int i=0;i<strings.length;i++)
             strings[i] = st.nextToken();
          for(int i=0;i<strings.length;i++)
             parseAccountParameters(i);
          sort();
          public void parseAccountParameters(int which)
          StringTokenizer st = new StringTokenizer(strings[which],"\n");
          lines = new String[st.countTokens()];
          for(int i=0;i<lines.length;i++)
             lines[i] = st.nextToken();
          parameters = new String[lines.length];
          arguments = new String[lines.length];
          accountNames.add(getAccountName(lines[0]));
          for(int i=1;i<lines.length;i++)
             parseAccountParameter(i,which);
          public void parseAccountParameter(int which,int strings)
          StringTokenizer st = new StringTokenizer(lines[which],"=");
          parameters[which] = st.nextToken();
          if(st.hasMoreTokens())
             arguments[which] = st.nextToken();
          stockValues(strings);
          public void stockValues(int a)
          for(int i=0;i<parameters.length;i++)
             if(arguments!=null)
         if(parameters[i].equals("PLEVEL"))
              plevels.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("PRIV"))
              privs.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("PASSWORD"))
              passwords.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("TOTALCONNECTTIME"))
              totaltimes.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("LASTCONNECTTIME"))
              lasttimes.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("LASTCHARUID"))
              lastchars.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("FIRSTCONNECTDATE"))
              firstconnects.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("FIRSTIP"))
              firstIPs.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("LASTCONNECTDATE"))
              lastconnects.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("LASTIP"))
              lastIPs.put(accountNames.get(a),arguments[i]);
         else if(parameters[i].equals("LANG"))
              langs.put(accountNames.get(a),arguments[i]);
    public String getAccountName(String line)
         String name = "";
         for(int i=0;i<line.indexOf("]");i++)
         name = name + (String.valueOf(line.charAt(i)));
         return name;
    public void createArrays()
         accountNames = new Vector();
         plevels = new Hashtable();
         privs = new Hashtable();
         passwords = new Hashtable();
         totaltimes = new Hashtable();
         lasttimes = new Hashtable();
         lastchars = new Hashtable();
         firstconnects = new Hashtable();
         firstIPs = new Hashtable();
         lastconnects = new Hashtable();
         lastIPs = new Hashtable();
         langs = new Hashtable();
    public void showValues()
         if(lastSelection!=-1)
         //keepValues();
         int i = -1 == accountList.getSelectedIndex() ?
         lastSelection :
         accountList.getSelectedIndex();
         accountName.setText((String)accountNames.get( i ));
         plevel.setText((String)plevels.get(accountNames.get( i )));
         priv.setText((String)privs.get(accountNames.get( i )));
         password.setText((String)passwords.get(accountNames.get( i )));
         totaltime.setText((String)totaltimes.get(accountNames.get( i )));
         lasttime.setText((String)lasttimes.get(accountNames.get( i )));
         lastchar.setText((String)lastchars.get(accountNames.get( i )));
         firstconnect.setText((String)firstconnects.get(accountNames.get( i )));
         firstIP.setText((String)firstIPs.get(accountNames.get( i )));
         lastconnect.setText((String)lastconnects.get(accountNames.get( i )));
         lastIP.setText((String)lastIPs.get(accountNames.get( i )));
         lang.setText((String)langs.get(accountNames.get( i )));
         lastSelection = i ;
    public void keepValues()
         accountNames.setElementAt(accountName.getText(),lastSelection);
         plevels.put(accountNames.get(lastSelection),plevel.getText());
         privs.put(accountNames.get(lastSelection),priv.getText());
         passwords.put(accountNames.get(lastSelection),password.getText());
         totaltimes.put(accountNames.get(lastSelection),totaltime.getText());
         lasttimes.put(accountNames.get(lastSelection),lasttime.getText());
         lastchars.put(accountNames.get(lastSelection),lastchar.getText());
         firstconnects.put(accountNames.get(lastSelection),firstconnect.getText());
         firstIPs.put(accountNames.get(lastSelection),firstIP.getText());
         lastconnects.put(accountNames.get(lastSelection),lastconnect.getText());
         lastIPs.put(accountNames.get(lastSelection),lastIP.getText());
         langs.put(accountNames.get(lastSelection),lang.getText());
    public void saveAccountFile()
         keepValues();
         String saving = "";
         for(int i=0;i<strings.length;i++)
         saving = saving + ("["+(String)accountNames.get(i)+"]"+newline);
         if(plevels.get((String)accountNames.get(i))!=null && !(plevels.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("PLEVEL="+plevels.get((String)accountNames.get(i))+newline);
         if(privs.get((String)accountNames.get(i))!=null && !(privs.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("PRIV="+privs.get((String)accountNames.get(i))+newline);
         if(passwords.get((String)accountNames.get(i))!=null && !(passwords.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("PASSWORD="+passwords.get((String)accountNames.get(i))+newline);
         if(totaltimes.get((String)accountNames.get(i))!=null && !(totaltimes.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("TOTALCONNECTTIME="+totaltimes.get((String)accountNames.get(i))+newline);
         if(lasttimes.get((String)accountNames.get(i))!=null && !(lasttimes.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("LASTCONNECTTIME="+lasttimes.get((String)accountNames.get(i))+newline);
         if(lastchars.get((String)accountNames.get(i))!=null && !(lastchars.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("LASTCHARUID="+lastchars.get((String)accountNames.get(i))+newline);
         if(firstconnects.get((String)accountNames.get(i))!=null && !(firstconnects.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("FIRSTCONNECTDATE="+firstconnects.get((String)accountNames.get(i))+newline);
         if(firstIPs.get((String)accountNames.get(i))!=null && !(firstIPs.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("FIRSTIP="+firstIPs.get((String)accountNames.get(i))+newline);
         if(lastconnects.get((String)accountNames.get(i))!=null && !(lastconnects.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("LASTCONNECTDATE="+lastconnects.get((String)accountNames.get(i))+newline);
         if(lastIPs.get((String)accountNames.get(i))!=null && !(lastIPs.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("LASTIP="+lastIPs.get((String)accountNames.get(i))+newline);
         if(langs.get((String)accountNames.get(i))!=null && !(langs.get((String)accountNames.get(i)).equals("")))
         saving = saving + ("LANG="+langs.get((String)accountNames.get(i))+newline);
         saving = saving + newline;
         try
         FileOutputStream fos = new FileOutputStream(savingFile);
         fos.write(saving.getBytes());
         catch(FileNotFoundException e)
         catch(IOException e)
    public void about()
         final JDialog info = new JDialog(window,"About",true);
         Container aboutPane = info.getContentPane();
         aboutPane.setLayout(null);
         Image image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Dalzhim.jpg"));
         ImageIcon sig = new ImageIcon(image);
         JLabel sign = new JLabel(sig);
         JLabel text1 = new JLabel("AccountManager v0.2Beta");
         JEditorPane text2 = new JEditorPane();
         JEditorPane text3 = new JEditorPane();
         JEditorPane text4 = new JEditorPane();
         JButton close = new JButton("Okay");
         JEditorPane jep = new JEditorPane();
         sign.setBounds(10,0,374,292);
         text1.setBounds(125,300,250,20);
         text2.setBounds(10,350,400,20);
         text3.setBounds(10,400,400,20);
         text4.setBounds(10,450,400,20);
         close.setBounds(150,500,100,20);
         close.addActionListener(new ActionListener()
              public void actionPerformed(ActionEvent e)
              info.setVisible(false);
         text2.setText("Created by �alzhim");
         text3.setText("Dalzhim, also known as, Amlaruil");
         text4.setText("[email protected] - [email protected]");
         text2.setEditable(false);
         text3.setEditable(false);
         text4.setEditable(false);
         text2.setBackground(new Color(207,207,207));
         text3.setBackground(new Color(207,207,207));
         text4.setBackground(new Color(207,207,207));
         aboutPane.add(sign);
         aboutPane.add(text1);
         aboutPane.add(text2);
         aboutPane.add(text3);
         aboutPane.add(text4);
         aboutPane.add(close);
         jep.setBackground(new Color(207,207,207));
         jep.setEditable(false);
         jep.setText("TEST");
         info.pack();
         info.setSize(400,550);
         info.setResizable(false);
         info.setVisible(true);
    public void search()
         searchWindow = new JDialog(window,"Search");
         Container searchPane = searchWindow.getContentPane();
         searchPane.setLayout(null);
         searchString = new JTextField(lastSearch);
         searchButton = new JButton("Search");
         searchString.addActionListener(al);
         searchButton.addActionListener(al);
         searchPane.add(searchString);
         searchPane.add(searchButton);
         searchString.setBounds(10,10,175,25);
         searchButton.setBounds(200,10,100,25);
         searchString.selectAll();
         searchWindow.pack();
         searchWindow.setSize(320,65);
         searchWindow.setResizable(false);
         searchWindow.setVisible(true);
    public void search(String what)
         accountList.setSelectedValue(what,true);
    public void createAccount()
         createWindow = new JDialog(window,"Create New Account");
         Container createPane = createWindow.getContentPane();
         createPane.setLayout(null);
         newName = new JTextField();
         newPassword = new JTextField();
         newPLevel = new JTextField();
         createButton = new JButton("Create Account");
         JLabel createlabel1 = new JLabel("Account Name:");
         JLabel createlabel2 = new JLabel("Account Password:");
         JLabel createlabel3 = new JLabel("Account PLevel:");
         createPane.add(newName);
         createPane.add(newPassword);
         createPane.add(newPLevel);
         createPane.add(createButton);
         createPane.add(createlabel1);
         createPane.add(createlabel2);
         createPane.add(createlabel3);
         newName.addActionListener(al);
         newPassword.addActionListener(al);
         newPLevel.addActionListener(al);
         createButton.addActionListener(al);
         newName.setBounds(160,10,200,25);
         newPassword.setBounds(160,45,200,25);
         newPLevel.setBounds(160,80,200,25);
         createButton.setBounds(160,115,200,25);
         createlabel1.setBounds(10,10,150,25);
         createlabel2.setBounds(10,45,150,25);
         createlabel3.setBounds(10,80,150,25);
         createWindow.pack();
         createWindow.setSize(375,175);
         createWindow.setResizable(false);
         createWindow.setVisible(true);
    public void createProcess()
         String tempname = newName.getText();
         String temppass = newPassword.getText();
         String templeve = newPLevel.getText();
         createWindow.dispose();
         if(!(accountNames.contains(tempname)))
         accountNames.add(tempname);
         sort();
         passwords.put(tempname,temppass);
         plevels.put(tempname,templeve);
         search(newName.getText());
    public void sort()
         Object[] sorting = new Object[accountNames.size()];
         accountNames.toArray(sorting);
         String[] sorting2 = new String[sorting.length];
         for(int i=0;i<sorting.length;i++)
         sorting2[i] = (String)sorting[i];
         Arrays.sort(sorting2,String.CASE_INSENSITIVE_ORDER);
         accountNames.clear();
         for(int i=0;i<sorting2.length;i++)
         accountNames.add(sorting2[i]);
         accountList.setListData(accountNames);
    public void removeAccount()
         if(accountList.getSelectedIndex()==-1)
         JOptionPane.showMessageDialog(window,"You must select an account from the list to use the Remove option");
         else
         int i = accountList.getSelectedIndex();
         System.out.println( "ra: " + i + " an: " + accountNames.elementAt( i ) );
         System.out.println(accountNames.elementAt( i ));
         plevels.remove(accountNames.elementAt( i ));
         privs.remove(accountNames.elementAt( i ));
         passwords.remove(accountNames.elementAt( i ));
         totaltimes.remove(accountNames.elementAt( i ));
         lasttimes.remove(accountNames.elementAt( i ));
         lastchars.remove(accountNames.elementAt( i ));
         firstconnects.remove(accountNames.elementAt( i ));
         firstIPs.remove(accountNames.elementAt( i ));
         lastconnects.remove(accountNames.elementAt( i ));
         lastIPs.remove(accountNames.elementAt( i ));
         langs.remove(accountNames.elementAt( i ));
         accountNames.removeElementAt( i );
         accountList.setListData( accountNames );
         //sort();
         showValues();
    class AL implements ActionListener
         public void actionPerformed(ActionEvent e)
         if(e.getSource()==open)
              jfc = new JFileChooser(accountFile);
              jfc.setDialogTitle("Select your account file");
              jfc.setMultiSelectionEnabled(false);
              jfc.addActionListener(al);
              jfc.showOpenDialog(window);
         else if(e.getSource()==jfc)
              accountFile = jfc.getSelectedFile();
              openAccountFile();
         else if(e.getSource()==save)
              jfcs = new JFileChooser(savingFile);
              jfcs.setDialogTitle("Where do you wish to save?");
              jfcs.setMultiSelectionEnabled(false);
              jfcs.addActionListener(al);
              jfcs.showSaveDialog(window);
         else if(e.getSource()==ab)
              about();
         else if(e.getSource()==jfcs)
              savingFile = jfcs.getSelectedFile();
              saveAccountFile();
         else if(e.getSource()==quit)
              System.exit(-1);
         else if(e.getSource()==search)
              search();
         else if(e.getSource()==searchString)
              searchButton.doClick();
         else if(e.getSource()==searchButton)
              accountList.setSelectedValue(searchString.getText(),true);
              lastSearch = searchString.getText();
              searchWindow.dispose();
         else if(e.getSource()==create)
              createAccount();
         else if(e.getSource()==newName)
              newPassword.requestFocus();
              newPassword.selectAll();
         else if(e.getSource()==newPassword)
              newPLevel.requestFocus();
              newPLevel.selectAll();
         else if(e.getSource()==newPLevel)
              createButton.doClick();
         else if(e.getSource()==createButton)
              if(newName.getText().equals("") || newPassword.getText().equals("") || newPLevel.getText().equals(""))
              createWindow.dispose();
              JOptionPane.showMessageDialog(window,"You have to enter an account name, a password and a plevel");
              else
              createProcess();
         else if(e.getSource()==remove)
              removeAccount();
    class LL implements ListSelectionListener
         public void valueChanged(ListSelectionEvent e)
         showValues();

  • JDeveloper 11g Preview - Bugs Swing

    Hi, My Name is Pedro Díaz Robles
    I have some bugs at the time of working with Swing, at the time of designing my forms,
    code disappears, for example the size of a window or size of button.
    recently they have some patchset for bugs of swing ?
    It is a simple example
    The steps are the following to produce bug:
    1. Create a empty Project
    2. New Client Thier - Swing AWT - Java Application (With Add Default Frame Option Selected) and post, create the default frame.
    3. I change size of frame
    4. View the source code:
    this.setSize();
    5. The same with a button
    jButton1.setBounds();
    6. Operating System: Linux Fedora 7
    Linux 2.6.22.1-41.fc7 #1 SMP Fri Jul 27 18:10:34
    EDT 2007 i686 i686 i386 GNU/Linux
    7. os.name     Linux
    os.version     2.6.22.1-41.fc7
    java.vm.name     Java HotSpot(TM) Client VM
    java.vm.specification.vendor     Sun Microsystems Inc.
    java.vm.specification.name     Java Virtual Machine Specification
    java.vm.specification.version     1.0
    java.vm.vendor     Sun Microsystems Inc.
    java.vm.version     1.5.0_12-b04
    java.runtime.name     Java(TM) 2 Runtime Environment, Standard Edition
    ADF Business Components     11.1.1.45.24
    Java(TM) Platform     1.5.0_12
    Oracle IDE     11.1.1.0.17.45.24
    PMD     JDeveloper Extension 1.9
    Versioning Support     11.1.1.0.17.45.24
    NOTE:
    Moments exist that are no problems, but already me it has happened several times that problem
    Thanks!!
    Greetings!!

    Hi,
    thanks for posting your findings.
    I admit that In the first preview of JDeveloper 11 we didn't put lots of effort in testing Swing, so it doesn't come by surprise that it has holes. This however will change for the next preview that we expect for end of September. If you can reproduce your problems in that release, please repost.
    Frank

  • Flash 2.0 Datagrid component bug ?

    Recently I found a bug in Datagrid component. The swf file
    which contain datagrid act differely in IE 6, and IE 7.
    This is what I've done:
    1) Compile swf, export it together with html file.
    2) Run the html file
    3)Press on one of the cell,drag it and then release it
    outside of the browser/flash canvas.
    4)Move the mouse pointer back to flash canvas
    5)The grid will scroll automatically( move the move up and
    down to test)
    6)After a few times mouse pointer movement, suddenly IE
    crash, CPU usage 100%
    I have tested the swf file on firefox 2.007 and stand alone
    flash player, however, none of the flash player have this bug.
    Therefore I suspect that the ActiveX flash plugin for IE cause this
    bug.
    This is the source code, which I use to create the datagrid
    for testing.
    ps: open one fla file, drag datagrid component from component
    panel to the stage or it will not run.
    import mx.controls.DataGrid;
    var header = "Stock Code/\nName,Type,Status,Order
    Date\nTime,Duration,OrderQty/\nPrice,Matched Qty/\nPrice,Trd
    Curr/\nMatched Value,Account No/\nOrder No";
    var wid =
    "90,43.2699356842522,91.5969497381748,87.4747020181826,60.4473499934867,67.9851014914014, 90.2231829093762,111.8984058876167,134.104372277509";
    var alig = "left ,left, left , left , left , right , right ,
    right , left ";
    var halig = "center ,center,center , center , center , center
    , center , center , center ";
    var fxdata:Array = new Array();
    fxdata[0]= new Array("67676
    GPACKET","Buy","Expired","05/09/2007 06:04:20 PM","Day","200
    4.34","0 0.00","MYR 0.00","423423423432");
    fxdata[1]= new Array("054066
    FASTRAK","Buy","Expired","05/09/2007 01:45:18 PM","Day","47,900
    0.27","0 0.00","MYR 0.00","fdsfsdfsdf");
    fxdata[2]= new Array("737013
    HUBLINE","Sell","Expired","05/09/2007 11:53:19 AM","Day","400
    0.69","0 0.00","MYR 0.00","93743");
    fxdata[3]= new Array("31474
    L&G","Buy","Expired","03/09/2007 11:35:35 AM","Day","500
    0.70","0 0.00","MYR 0.00","389dskjfsd");
    fxdata[4]= new Array("38182
    GENTING","Buy","Expired","28/08/2007 11:38:59 AM","Day","500
    7.35","0 0.00","MYR 0.00","90sklsdakl");
    fxdata[5]= new Array("05005
    PALETTE","Buy","Expired","28/08/2007 11:08:23 AM","Day","500
    0.115","0 0.00","MYR 0.00","jsdaflk;as");
    fxdata[6]= new Array("093082
    GPACKET","Buy","Expired","27/08/2007 03:49:43 PM","Day","300
    3.82","0 0.00","MYR 0.00","jsdafj;sda");
    fxdata[7]= new Array("644769
    KELADI","Buy","Expired","27/08/2007 11:05:36 AM","Day","10,000
    0.30","0 0.00","MYR 0.00","jsadjf;lkdas");
    fxdata[8]= new Array("676653
    KASSETS","Buy","Expired","24/08/2007 06:15:33 PM","Day","500
    2.93","0 0.00","MYR 0.00","jlsdf;adas");
    fxdata[9]= new Array("473323
    JAKS","Buy","Expired","23/08/2007 04:45:03 PM","Day","100 0.915","0
    0.00","MYR 0.00","jjkljsdlfasd");
    fxdata[10]= new Array("03069
    IPOWER","Buy","Expired","22/08/2007 10:18:01 AM","Day","9,800
    0.365","0 0.00","MYR 0.00","jlajsd;lfjads");
    fxdata[11]= new Array("05025
    LNGRES","Buy","Expired","21/08/2007 03:08:06 PM","Day","9,900
    0.28","0 0.00","MYR 0.00","jlkjsdafl");
    fxdata[12]= new Array("01308 N2N","Buy","Expired","21/08/2007
    10:34:51 AM","Day","200 1.71","0 0.00","MYR 0.00","mjkjadsflasd");
    fxdata[13]= new Array("70069
    IPOWER","Buy","Cancelled","21/08/2007 10:02:08 AM","Day","0
    0.37","0 0.00","MYR 0.00","jkjasd;fsda");
    fxdata[14]= new Array("03069
    IPOWER","Buy","Cancelled","20/08/2007 07:20:54 PM","Day","0
    0.38","0 0.00","MYR 0.00","jkjsdlkfjsdaf");
    fxdata[15]= new Array("12651
    MRCB","Buy","Replaced","20/08/2007 05:31:59 PM","Day","900 2.35","0
    0.00","MYR 0.00","upuewoirwe");
    var mdtgrid:DataGrid;
    _root.createEmptyMovieClip("displayobj1",
    _root.getNextHighestDepth(),{_x:0,_y:0});
    initial();
    function initial(){
    _root.mdtgrid =
    _root.createClassObject(mx.controls.DataGrid, "xxx",
    _root.getNextHighestDepth());
    _root.mdtgrid.doLater(_root,"setData");
    function setData(){ //insert data to datagrid
    var temp:Array = new Array();
    for (var i in _root.fxdata){
    temp
    = new Object();
    for (var j in _root.fxdata){
    temp
    [j] = _root.fxdata[j];
    _root.mdtgrid.dataProvider =temp;
    _root.mdtgrid.doLater(_root,"setdgStyle");
    function setdgStyle(){
    var rowhight = 40;
    var noofrow = 8;
    var headerheight = 35;
    var gridheight = (rowhight * noofrow) + headerheight ;
    _root.mdtgrid.setSize(800, gridheight);
    _root.mdtgrid.rowHeight =rowhight;
    _root.setHeader(_root.header.split(","));
    _root.setWidth(_root.wid.split(","));
    _root.setAlign(_root.alig.split(","));
    _root.mdtgrid.invalidate();
    function setHeader(datasource:Array){ //set header label
    var leng:Number = _root.mdtgrid.columnCount;
    var sleng:Number = datasource.length;
    var temp:Object;
    for (i =0 ;i<leng;i++){
    if (i>=sleng){
    break;
    _root.mdtgrid.getColumnAt(i).headerText = datasource
    function setWidth(datasource:Array){ //set columns width
    var leng:Number = _root.mdtgrid.columnCount;
    var sleng:Number = datasource.length;
    var temp:Object;
    for (i =0 ;i<leng;i++){
    if (i>=sleng){
    break;
    _root.mdtgrid.getColumnAt(i).width = Number(datasource);
    function setAlign(datasource:Array){ //set Alignment
    var leng:Number = _root.mdtgrid.columnCount;
    var sleng:Number = datasource.length;
    var temp:Object;
    for (i =0 ;i<leng;i++){
    if (i>=sleng){
    break;
    temp = _root.mdtgrid.getColumnAt(i);
    temp.setStyle("textAlign",trim(datasource

    Anyone know how to fix it ?

  • Java Bug? Centering a JLable with just an icon in a JScrollPane

    Hi,
    I'm attempting to write a image viewing program. I would like the image centered on the window displaying them, but because some images are larger than the window, I would like the image to be in the upper left hand coner of the window with scroll bars to allow you to view the rest of the image.
    I have attempted to implement this by placing a JScrollPane on a JFrame, and then placing a JLabel in the JScrollPane's Viewport. I set the Label's text to blank, and then set the image, wraped in an InageIcon, as the JLabel's Icon.
    To center the JLabel, I have tried to set the JScrollPane's Viewport's LayoutManager to two different layout managers, but I've found buggy operation with each. The Layout I've tried are the following:
    1. a GridLayout(1,1,0,0); - this works fine when the image is smaller that the available area of the JScrollPane. However, if the window is resized so that the image more than totally fills the JScrollPane, the image gets cut off. What happens is that the image is centered in the available scrollpane view, meaning the uper and left edges of the image get cut off. Scroll bars appear to let you view the lower and righer edges of the image, however, when you scroll, the newly uncovered areas of the image never get drawn, so you can't get to see the lower or right edges of the image either.
    2. a GridbagLayout with one row, and one column each with a weight of 100, centered and told to fill both horizontally and vertically. Again, this correctly centers the JLabel when th eimage is smaler than the available space in the JScrollPane. Once the window is resized so that the image is bigger than the space to view the image in, strange problems occur. This time it seems that the JScrollPane's scrollbars show that there should be enough room to show the image if the image was in the upper left corner, however, the image isn't in the upper left corner, it is offset down and to the right if the upper left corner by an amount that appears equal to the amount of extra space needed to display the image. For example, if the image is 200x300 and the view area is 150x200, ite image is offest by 50 horizontally and 100 vertically. This results in the bottom and right edges of the image getting cut off because the scrollbars only scroll far enough to show the image if the image was placed at 0,0 and not at the offset location that it is placed at.
    You may not understand what I'm trying to say from my description, but below is code that can reproduce the problem.
    Questions. Am I doing anything wrong that is causing this problem? Is that another, better way to center the JLabel that doesn't have these problems? Is this a JAVA Bug in either the layoutmanagers, JScrollPane or JLabel when it only contains an icon and no text?
    Code:
    this is the class that creates and lays out the JFrame. It currently generates a 256x256 pixel image. By changing the imagesize variable to 512, you can get a larger image to work with which will make the bug more obvious.
    When first run the application will show what happens when using the GridLayout and described in 1. There are two commented out lines just below the GridLayout code that use a GridbagLayout as descriped in method 2. Comment out the GridLayout code when you uncomment the GridBageLayout code.
    package centertest;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.image.*;
    public class Frame1 extends JFrame {
        JPanel contentPane;
        BorderLayout borderLayout1 = new BorderLayout();
        JScrollPane jScrollPane1 = new JScrollPane();
        JLabel jLabel1 = new JLabel();
        static final int imagesize=256;
        //Construct the frame
        public Frame1() {
            enableEvents(AWTEvent.WINDOW_EVENT_MASK);
            try {
                jbInit();
            catch(Exception e) {
                e.printStackTrace();
        //Component initialization
        private void jbInit() throws Exception  {
            contentPane = (JPanel) this.getContentPane();
            contentPane.setLayout(borderLayout1);
            this.setSize(new Dimension(400, 300));
            this.setTitle("Frame Title");
            //setup label
            jLabel1.setIconTextGap(0);
            jLabel1.setHorizontalAlignment(JLabel.CENTER);
            jLabel1.setVerticalAlignment(JLabel.CENTER);
            jLabel1.setVerticalTextPosition(JLabel.BOTTOM);
            //create image and add it to the label as an icon
            int[] pixels = new int[imagesize*imagesize];
            for(int i=0;i<pixels.length;i++){
                pixels=i|(0xff<<24);
    MemoryImageSource mis = new MemoryImageSource(imagesize, imagesize,
    pixels, 0, imagesize);
    Image img = createImage(mis);
    jLabel1.setIcon(new ImageIcon(img));
    jLabel1.setText("");
    contentPane.add(jScrollPane1, BorderLayout.CENTER);
    //center image using a GridLayout
    jScrollPane1.getViewport().setLayout(new GridLayout(1,1,0,0));
    jScrollPane1.getViewport().add(jLabel1);
    //Center the image using a GridBagLayout
    /*jScrollPane1.getViewport().setLayout(new GridBagLayout());
    jScrollPane1.getViewport().add(jLabel1,
    new GridBagConstraints(0, 0, 1, 1, 100.0, 100.0,
    GridBagConstraints.CENTER, GridBagConstraints.BOTH,
    new Insets(0, 0, 0, 0), 0, 0));
    //Overridden so we can exit when window is closed
    protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
    System.exit(0);
    and here is an application with which to launch the frame
    package centertest;
    import javax.swing.UIManager;
    import java.awt.*;
    public class Application1 {
        boolean packFrame = false;
        //Construct the application
        public Application1() {
            Frame1 frame = new Frame1();
            //Validate frames that have preset sizes
            //Pack frames that have useful preferred size info, e.g. from their layout
            if (packFrame) {
                frame.pack();
            else {
                frame.validate();
            //Center the window
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = frame.getSize();
            if (frameSize.height > screenSize.height) {
                frameSize.height = screenSize.height;
            if (frameSize.width > screenSize.width) {
                frameSize.width = screenSize.width;
            frame.setLocation( (screenSize.width - frameSize.width) / 2,
                              (screenSize.height - frameSize.height) / 2);
            frame.setVisible(true);
        //Main method
        public static void main(String[] args) {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            catch (Exception e) {
                e.printStackTrace();
            new Application1();
    }I'm running Java 1.4.1 build 21 on Windows 98. I used JBuilder8 Personal to write this code.

    Hmmm,
    You are correct. Not setting a layout for the scrollpane's viewport (using the default of javax.swing.ViewportLayout) results in the positioning of the image tat I want (center the image if image is smaller than the scrollpane, if the image is larger, place it in the upper-left corener and enable the scrollbars to scroll to see the rest of the image).
    Anyone have any idea why the GridLayout and GridBagLayout act as they do? I gues it isn't that important tomy program, but I'm still not sure that they are operating correctly. (Specifically, GridLayout sha scrollbars, but when you scroll, no new parts of the image are revealed.)

  • Is this a Bug?: FocusListener called twice

    Hey all,
    Im having this problem since realease 1.4.2_04.
    Folks, try this code:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class FocusTest {
        public static void main(String[] args) {
            JFrame frame  = new JFrame("Focus test");
            final JTextField field1 = new JTextField("Test1");
            final JTextField field2 = new JTextField("Test2");
            field1.addFocusListener(new FocusAdapter(){
                public void focusGained(FocusEvent e){}
                public void focusLost(FocusEvent e){
                    if( !e.isTemporary() ){
                        System.out.println("ID: " + e.getID());
                        JOptionPane.showMessageDialog(null, "Focus lost in 1");
                        field1.requestFocus();
            frame.getContentPane().add(field1, BorderLayout.WEST);
            frame.getContentPane().add(field2, BorderLayout.CENTER);
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setBounds(0,0,200,300);
            frame.show();
    } The problem is: when TF1 looses its focus, and is validated, then i force the focus to keep on TF1 by calling TF1.requestFocus(), somehow the event focusLsot is called twice for my TF.
    If i do not requestFocus() it work but I must force the focus on TF1.
    Im going nuts. Does anyonw apear to have this problems?? In old realeses, the same code work perfect. until 1.4.2 beta.
    Tks
    Bruno

    Hello all!
    I found out that somehow JDialog with requestfocus after, fires twice the lostFocus event. I dont know why. I opened a bug report so they can figure it out why is happaning.
    Tks folks!
    Bruno

  • Problem with JMenus that Persist - Is this a Java bug?

    I am having a problem with JMenus that persist. By this I mean
    that my drop down menus persist on the screen even after they have
    been selected.
    I've checked the Java bug database, and the following seems
    to come closest to my problem:
    Bug ID: 4235188
    JPopupMenus and JMenus persist when their JFrame becomes visible
    State: Closed, not a bug
    http://developer.java.sun.com/developer/bugParade/bugs/4235188.html
    This page says that the matter is closed and is not a bug. The
    resolution of this matter printed at the bottom of the page
    is completely abstruse to me and I would appreciate any
    comments to understand what they are talking about.
    The code at the end of my message illustrates my problem.
    1. Why should paintComponent() make any difference to
    Menu behavior?
    2. Is this a bug?
    3. What's the workaround if I have to paint() or repaint()?
    Thanks
    Tony Lin
    // Example of Menu Persistence Problem
    // Try running this with line 41, paintComponent(), and without line 41
    // Menus behave normally if line 41 is commented out
    // If line 41 exists, menus will persist after they have been selected
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class P2 extends JPanel {
    JMenuItem[] mi;
    public P2() {
    JFrame thisFrame = new JFrame();
    thisFrame.getContentPane().add(this);
    JMenu menu = new JMenu("My Menu");
    JMenuBar mb = new JMenuBar();
    mi = new JMenuItem[4];
    for (int i=0; i<mi.length; i++) {
    mi[i] = new JMenuItem("Menu Item " + String.valueOf(i));
    menu.add(mi);
    mb.add(menu);
    thisFrame.setJMenuBar(mb);
    thisFrame.setSize(400,200);
    thisFrame.setLocation(150,200);
    thisFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
    System.exit(0);
    thisFrame.setVisible(true);
    public void paintComponent(Graphics g) {} //Affects menu behavior!
    public static void main(String[] args) {
    new P2();

    Well, my understanding of the way painting works is that a component doesn't UNPAINT itself. Instead a message is sent to the component under the coordinates of the menu to REPAINT itself.
    In your demo program the JFrame is the component under the JMenu. The paintComponent() method of JFrame is empty, so nothing gets repainted.
    I added super.paintComponent(g); to the method and everything works fine.

  • Is this a JOGL bug with GLJPanel, a driver problem, or what?

    I've been trying to eliminate a problem I've been experiencing with my WorldWind Java (WWJ) application and I think I've finally taken a step torward finding the root cause, but I'm not sure whose problem it is yet or who to report it to, so I thought I'd start here and work my way up; if it can't get solved here, maybe it's a driver issue.
    The issue goes something like this:
    (Note: this only occurs when the -Dsun.java2d.opengl=true flag is set.)
    I have a GLJPanel on my primary display that works beautifully. I drag that panel onto my secondary display (slowly) and it disappears. Poof. If I position the panel halfway between screens, I can get about half of the panel to render on the secondary display, but any further than that and it disappears. I tried this on a Frame and with a GLCanvas as well and got different results: in a Frame, if I dragged the Panel over and then dragged it back into the primary display, it would disappear on the secondary display, but reappear on the primary display once it was dragged back. With the GLCanvas, I didn't have any issues.
    It's fairly simple to recreate this on my computer by using a WorldWind example that extends ApplicationTemplate and just adjusting ApplicationTemplate to use WWGLJPanels.
    However, I went so far as to reproduce the problem with a plain old GLJPanel:
    import com.sun.opengl.util.Animator;
    import java.awt.GridLayout;
    import javax.media.opengl.GL;
    import javax.media.opengl.GLAutoDrawable;
    import javax.media.opengl.GLJPanel;
    import javax.media.opengl.GLCapabilities;
    import javax.media.opengl.GLEventListener;
    import javax.swing.JFrame;
    public class TrianglePanel extends JFrame implements GLEventListener {
        public TrianglePanel() {
            super("Triangle");
            setLayout(new GridLayout());
            setSize(300, 300);
            setLocation(10, 10);
            setVisible(true);
            initTriangle();
        public static void main(String[] args) {
            TrianglePanel tPanel = new TrianglePanel();
            tPanel.setVisible(true);
            tPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        private void initTriangle(){
            GLCapabilities caps = new GLCapabilities();
            caps.setDoubleBuffered(true);
            caps.setHardwareAccelerated(true);
            GLJPanel panel = new GLJPanel(caps);
            panel.addGLEventListener(this);
            add(panel);
            Animator anim = new Animator(panel);
            anim.start();
        public void init(GLAutoDrawable drawable) {
            GL gl = drawable.getGL();
            gl.glClearColor(0, 0, 0, 0);
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glLoadIdentity();
            gl.glOrtho(0, 1, 0, 1, -1, 1);
        public void display(GLAutoDrawable drawable) {
            GL gl = drawable.getGL();
            gl.glClear(GL.GL_COLOR_BUFFER_BIT);
            gl.glBegin(GL.GL_TRIANGLES);
            gl.glColor3f(1, 0, 0);
            gl.glVertex3f(0.0f, 0.0f, 0);
            gl.glColor3f(0, 1, 0);
            gl.glVertex3f(1.0f, 0.0f, 0);
            gl.glColor3f(0, 0, 1);
            gl.glVertex3f(0.0f, 1.0f, 0);
            gl.glEnd();
            gl.glFlush();
        public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {}
        public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {}
    }If it helps, the video card I'm using is a Quadro NVS 140M.

    steffi wrote:
    This is a bug that I'm seeing in Apple's new MobileMe service and I believe they are making use of the System Messaging Server product. (Sun Java(tm) System Messaging Server 6.3-6.03)I can't comment on what Apple may or may not be using ;)
    Specifically I have an email that's MIME HTML and what I observe is that lines >999 chars are being truncated so in my case the nested table doesn't render correctly because a whole chunk of the HTML itself on this line has been truncated.The email client generating the message is broken and Messaging Server is 'fixing' the email by truncating the line to the maximum line-length as per the standards.
    Refer to "2.1.1. Line Length Limits" in http://www.faqs.org/rfcs/rfc2822.html
    Regards,
    Shane.

  • Possible Problem/Bug In GridBag Layout ????

    I've done hundreds of Gridbag layouts in the past 2 years and just noticed this weird little behavior today.....
    Basically what I'm trying to do is arrange panels like this.....
    +--------+--------+--------+
    |        |        |        |
    |   A    |    B   |   C    |
    |        |        |        |
    +--------+----+---+--------+
    |             |            |
    |     D       |      E     |
    |             |            |
    +-------------+------------+The obvious thing to do is to
    o make the gridwidths of
    B, D, E = 2
    A, C = 1
    D and E should each share one unit of
    B's 2 width.
    Tried it in my code with my real UI and it didn't work, so then I tested it
    out using a Gridbag tool where you can set parameters on the fly quickly and
    surely enough it did not work there either.
    The GridBagLayout is refusing to split B into 2 portions for the 2nd row
    to use in an unalligned fashion. I either get
    +--------+--------+--------+
    |        |        |        |
    |   A    |    B   |   C    |
    |        |        |        |
    +--------+----+---+--------+
    |        |                 |
    |     D  |           E     |
    |        |                 |
    +--------+-----------------+  or
    +--------+--------+--------+
    |        |        |        |
    |   A    |    B   |   C    |
    |        |        |        |
    +--------+----+---+--------+
    |                 |        |
    |     D           |  E     |
    |                 |        |
    +--------+--------+--------+ depending on the order in which I add my panels to the layout.
    even though my gridx, gridy and widths and heights are properly set for
    obtaining the result I want.
    Can someone confirm that this is a bug in the GridBagLayout or share the trick for
    getting around this?

    Thanks for the reply - I can set the weights however
    I wish and I never see box D extending even one pixel
    into the A-B boundary.This does what you say...
    import java.awt.*;
    import javax.swing.*;
    public class TestFrame extends JFrame {
      public TestFrame() {
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.weighty = 0.5; 
        panel.add(new JButton("A"), gbc);
        gbc.gridx = 1;   
        gbc.gridwidth = 2; 
        panel.add(new JButton("B"), gbc);
        gbc.gridx = 3;   
        gbc.gridwidth = 1;
        panel.add(new JButton("C"), gbc);
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.gridwidth = 2;
        gbc.weightx = 0.5;
        panel.add(new JButton("D"), gbc);
        gbc.gridx = 2;
        panel.add(new JButton("E"), gbc);
        getContentPane().add(panel);
        setSize(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
      public static void main(String[] args) {
        TestFrame frame = new TestFrame();
        frame.setVisible(true);
    }But i'm sure it's not a satisfactory layout because button A does not want to resize horizontally at all. But of course, a mix of grid layouts does the trick:
    import java.awt.*;
    import javax.swing.*;
    public class TestFrame extends JFrame {
      public TestFrame() {
        JPanel panel = new JPanel(new GridLayout(2, 1));
        JPanel top = new JPanel(new GridLayout(1, 3));
        top.add(new JButton("A"));
        top.add(new JButton("B"));
        top.add(new JButton("C"));
        panel.add(top);
        JPanel buttom = new JPanel(new GridLayout(1, 2));
        buttom.add(new JButton("D"));
        buttom.add(new JButton("E"));
        panel.add(buttom);
        getContentPane().add(panel);
        setSize(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
      public static void main(String[] args) {
        TestFrame frame = new TestFrame();
        frame.setVisible(true);
    }

Maybe you are looking for