Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 

Swing Chapter 16. (Advanced topics) Desktops and Internal Frames. Easy for reading, Click here!

Custom Search
Swing Chapter 16. (Advanced topics) Desktops and Internal Frames. Easy for reading, Click here!

[ Return to Swing (Book) ]

Page: 4/5 



Previous Page Previous Page (3/5) - Next Page (5/5) Next Page
Subpages: 1. JDesktopPane and JInternalFrame 
2.
Internalizable/Externalizable frames 
3.
Cascading and outline dragging mode 
4. An X windows style desktop environment 
5. A networked multi-user desktop using sockets 

16.4  An X-like desktop environment

Some X windows systems (specifically fvwm, Panorama (SCO), and TED (TriTeal)) provide what is referred to as a pager. This is a small window that sits in the desktop (usually at the top of the screen) and shows the positions of all windows contained in the desktop. By clicking or dragging the mouse inside the pager the user's view is moved to the associated location within the desktop. This is very helpful to X windows users because these systems often support very large desktops. Often they are larger than four times the actual size of the screen. Figure 16.4 shows a pager running on a Linux system with a desktop nine times the size of the screen.

Figure 16.4 A Linux pager

<<file figure16-4.gif>>

In this example we develop our own partial implementation of a pager for use with JDesktopPane and its JInternalFrame children. We show it in use with a fairly large JDesktopPane (1600x1200). This desktop is scrollable and the pager will always stay in the user's current view, even when scrolling.

Note: In this example we use a custom package called resize. The classes contained in this package were introduced in chapter 15 as our XXResizeEdge components. Refer back to chapter 15 if you have any questions regarding this code. We do not explain how it works in this chapter. However, you should know that the classes contained in this package can be wrapped around any JComponent in a BorderLayout to make that component resizable. The thickness and mininum dimension properties associated with each class have been hard-coded as constants. If you plan to work with these classes we suggest adding a pair of set()/get() accessors to modify and retrieve these values.

The main purpose of presenting this example here is to show how DesktopManager can be customized to our needs. In the next section we will expand on this example to build a networked, multi-user desktop environment.

Figure 16.5 JavaXWin with WindowWatcher

<<file figure16-5.gif>>

Figure 16.6 WindowWatcher with XXResizeEdges

<<file figure16-6.gif>>

The Code: JavaXWin.java

see \Chapter16\2

import java.beans.PropertyVetoException;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

import java.awt.*;

public class JavaXWin extends JFrame

{

  protected int m_count;

  protected int m_tencount;

  protected int m_wmX, m_wmY;

  protected JButton m_newFrame;

  protected JDesktopPane m_desktop;

  protected WindowManager m_wm;

  protected JViewport viewport;

  public JavaXWin() {

    setTitle("JavaXWin");

    m_count = m_tencount = 0;

    m_desktop = new JDesktopPane();

    JScrollPane scroller = new JScrollPane();

    m_wm = new WindowManager(m_desktop);

    m_desktop.setDesktopManager(m_wm);

    m_desktop.add(m_wm.getWindowWatcher(),

      JLayeredPane.PALETTE_LAYER);

    m_wm.getWindowWatcher().setBounds(555,5,200,150);

    viewport = new JViewport() {

      public void setViewPosition(Point p) {

        super.setViewPosition(p);

        m_wm.getWindowWatcher().setLocation(

          m_wm.getWindowWatcher().getX() +

            (getViewPosition().x-m_wmX),

          m_wm.getWindowWatcher().getY() +

            (getViewPosition().y-m_wmY));

        m_wmX = getViewPosition().x;

        m_wmY = getViewPosition().y;

      }

    };

    viewport.setView(m_desktop);

    scroller.setViewport(viewport);

    ComponentAdapter ca = new ComponentAdapter() {

      JViewport view = viewport;

      public void componentResized(ComponentEvent e) {

        m_wm.getWindowWatcher().setLocation(

          view.getViewPosition().x + view.getWidth()-

            m_wm.getWindowWatcher().getWidth()+5,

          view.getViewPosition().y + 5);

      }

    };

    viewport.addComponentListener(ca);

    m_newFrame = new JButton("New Frame");

    m_newFrame.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {

        newFrame();

      }

    });

    JPanel topPanel = new JPanel(true);

    topPanel.setLayout(new FlowLayout());

    getContentPane().setLayout(new BorderLayout());

    getContentPane().add("North", topPanel);

    getContentPane().add("Center", scroller);

    topPanel.add(m_newFrame);

    Dimension dim = getToolkit().getScreenSize();

    setSize(800,600);

    setLocation(dim.width/2-getWidth()/2,

      dim.height/2-getHeight()/2);

    m_desktop.setPreferredSize(new Dimension(1600,1200));

    setVisible(true);

    WindowListener l = new WindowAdapter() {

      public void windowClosing(WindowEvent e) {

        System.exit(0);

      }

    };       

    addWindowListener(l);

  }

  public void newFrame() {

    JInternalFrame jif = new JInternalFrame("Frame " + m_count,

      true, true, true, true);

    jif.setBounds(20*(m_count%10) + m_tencount*80,

      20*(m_count%10), 200, 200);

    JTextArea text = new JTextArea();

    JScrollPane scroller = new JScrollPane();

    scroller.getViewport().add(text);

    try {

      FileReader fileStream = new FileReader("JavaLinux.txt");

      text.read(fileStream, "JavaLinux.txt");

    }

    catch (Exception e) {

      text.setText("* Could not read JavaLinux.txt *");

    }

    jif.getContentPane().add(scroller);

    m_desktop.add(jif);

    try {            

      jif.setSelected(true);        

    }

    catch (PropertyVetoException pve) {

      System.out.println("Could not select " + jif.getTitle());

    }

    m_count++;

    if (m_count%10 == 0) {

      if (m_tencount < 3)

        m_tencount++;

      else

        m_tencount = 0;

    }

  }

  public static void main(String[] args) {

    new JavaXWin();

  }

}

class WindowManager extends DefaultDesktopManager

{

  protected WindowWatcher ww;

  public WindowManager(JDesktopPane desktop) {

    ww = new WindowWatcher(desktop);

  }

  public WindowWatcher getWindowWatcher() { return ww; }

  public void activateFrame(JInternalFrame f) {

    super.activateFrame(f);

    ww.repaint();

  }

  public void beginDraggingFrame(JComponent f) {

    super.beginDraggingFrame(f);

    ww.repaint();

  }

  public void beginResizingFrame(JComponent f, int direction) {

    super.beginResizingFrame(f,direction);

    ww.repaint();

  }

  public void closeFrame(JInternalFrame f) {

    super.closeFrame(f);

    ww.repaint();

  }

  public void deactivateFrame(JInternalFrame f) {

    super.deactivateFrame(f);

    ww.repaint();

  }

  public void deiconifyFrame(JInternalFrame f) {

    super.deiconifyFrame(f);

    ww.repaint();

  }

  public void dragFrame(JComponent f, int newX, int newY) {

    f.setLocation(newX, newY);

    ww.repaint();

  }

  public void endDraggingFrame(JComponent f) {

    super.endDraggingFrame(f);

    ww.repaint();

  }

  public void endResizingFrame(JComponent f) {

    super.endResizingFrame(f);

    ww.repaint();

  }

  public void iconifyFrame(JInternalFrame f) {

    super.iconifyFrame(f);

    ww.repaint();

  }

  public void maximizeFrame(JInternalFrame f) {

    super.maximizeFrame(f);

    ww.repaint();

  }

  public void minimizeFrame(JInternalFrame f) {

    super.minimizeFrame(f);

    ww.repaint();

  }

  public void openFrame(JInternalFrame f) {

    super.openFrame(f);

    ww.repaint();

  }

  public void resizeFrame(JComponent f,

   int newX, int newY, int newWidth, int newHeight) {

    f.setBounds(newX, newY, newWidth, newHeight);

    ww.repaint();

  }

  public void setBoundsForFrame(JComponent f,

   int newX, int newY, int newWidth, int newHeight) {

    f.setBounds(newX, newY, newWidth, newHeight);

    ww.repaint();

  }

}

The Code: WindowWatcher.java

see \Chapter16\2

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import resize.*;

public class WindowWatcher extends JPanel

{

  protected static final Color C_UNSELECTED =

    new Color(123, 123, 123);

  protected static final Color C_SELECTED =

    new Color(243, 232, 165);

  protected static final Color C_BACKGROUND =

    new Color(5,165,165);

  protected static final Color C_WWATCHER =

    new Color(203,226,0);

  protected float m_widthratio, m_heightratio;

  protected int m_width, m_height, m_XDifference, m_YDifference;

  protected JDesktopPane m_desktop;

  protected NorthResizeEdge m_northResizer;

  protected SouthResizeEdge m_southResizer;

  protected EastResizeEdge m_eastResizer;

  protected WestResizeEdge m_westResizer;

  public WindowWatcher(JDesktopPane desktop) {

    m_desktop = desktop;

    setOpaque(true);

    m_northResizer = new NorthResizeEdge(this);

    m_southResizer = new SouthResizeEdge(this);

    m_eastResizer = new EastResizeEdge(this);

    m_westResizer = new WestResizeEdge(this);

    setLayout(new BorderLayout());

    add(m_northResizer, BorderLayout.NORTH);

    add(m_southResizer, BorderLayout.SOUTH);

    add(m_eastResizer, BorderLayout.EAST);

    add(m_westResizer, BorderLayout.WEST);

    MouseInputAdapter ma = new MouseInputAdapter() {

      public void mousePressed(MouseEvent e) {

        m_XDifference = e.getX();

        m_YDifference = e.getY();

      }

      public void mouseDragged(MouseEvent e) {

        int vx = 0;

        int vy = 0;

        if (m_desktop.getParent() instanceof JViewport) {

          vx = ((JViewport)

            m_desktop.getParent()).getViewPosition().x;

          vy = ((JViewport)

            m_desktop.getParent()).getViewPosition().y;

        }

        int w = m_desktop.getParent().getWidth();

        int h = m_desktop.getParent().getHeight();

        int x = getX();

        int y = getY();

        int ex = e.getX();

        int ey = e.getY();

        if ((ey + y > vy && ey + y < h+vy) &&

            (ex + x > vx && ex + x < w+vx))

        {

          setLocation(ex-m_XDifference + x, ey-m_YDifference + y);

        }

        else if (!(ey + y > vy && ey + y < h+vy) &&

                  (ex + x > vx && ex + x < w+vx))

        {

          if (!(ey + y > vy) && ey + y < h+vy)

            setLocation(ex-m_XDifference + x, vy-m_YDifference);

          else if (ey + y > vy && !(ey + y < h+vy))

            setLocation(ex-m_XDifference + x, (h+vy)-m_YDifference);

        }

        else if ((ey + y >vy && ey + y < h+vy) &&

                !(ex + x > vx && ex + x < w+vx))

        {

          if (!(ex + x > vx) && ex + x < w+vx)

            setLocation(vx-m_XDifference, ey-m_YDifference + y);

          else if (ex + x > vx && !(ex + x < w))

            setLocation((w+vx)-m_XDifference, ey-m_YDifference + y);

        }

        else if (!(ey + y > vy) && ey + y < h+vy &&

                 !(ex + x > vx) && ex + x < w+vx)

          setLocation(vx-m_XDifference, vy-m_YDifference);

        else if (!(ey + y > vy) && ey + y < h+vy &&

                 ex + x > vx && !(ex + x < w+vx))

          setLocation((w+vx)-m_XDifference, vy-m_YDifference);

        else if (ey + y > vy && !(ey + y < h+vy) &&

                 !(ex + x > vx) && ex + x < w+vx)

          setLocation(vx-m_XDifference, (h+vy)-m_YDifference);

        else if (ey + y > vy && !(ey + y < h+vy) &&

                 ex + x > vx && !(ex + x < w+vx))

          setLocation((w+vx)-m_XDifference, (h+vy)-m_YDifference);

      }

      public void mouseEntered(MouseEvent e) {

        setCursor(Cursor.getPredefinedCursor(

          Cursor.MOVE_CURSOR));

      }

      public void mouseExited(MouseEvent e) {

        setCursor(Cursor.getPredefinedCursor(

          Cursor.DEFAULT_CURSOR));

      }

    };

    addMouseListener(ma);

    addMouseMotionListener(ma);

  }

  public void paintComponent(Graphics g) {

    super.paintComponent(g);

    m_height = getHeight();

    m_width = getWidth();

    g.setColor(C_BACKGROUND);

    g.fillRect(0,0,m_width,m_height);

    Component[] components = m_desktop.getComponents();

    m_widthratio = ((float)

      m_desktop.getWidth())/((float) m_width);

    m_heightratio = ((float)

      m_desktop.getHeight())/((float) m_height);

    for (int i=components.length-1; i>-1; i--) {

      if (components[i].isVisible()) {

        g.setColor(C_UNSELECTED);

        if (components[i] instanceof JInternalFrame) {

          if (((JInternalFrame) components[i]).isSelected())

            g.setColor(C_SELECTED);

        }

        else if(components[i] instanceof WindowWatcher)

          g.setColor(C_WWATCHER);

        g.fillRect(

          (int)(((float)components[i].getX())/m_widthratio),

          (int)(((float)components[i].getY())/m_heightratio),

          (int)(((float)components[i].getWidth())/m_widthratio),

          (int)(((float)components[i].getHeight())/m_heightratio));

        g.setColor(Color.black);

        g.drawRect(

          (int)(((float)components[i].getX())/m_widthratio),

          (int)(((float)components[i].getY())/m_heightratio),

          (int)(((float)components[i].getWidth())/m_widthratio),

          (int)(((float)components[i].getHeight())/m_heightratio));

      }        

    }

    g.drawLine(m_width/2,0,m_width/2,m_height);

    g.drawLine(0,m_height/2,m_width,m_height/2);

  }

}

Understanding the Code

Class JavaXWin

JavaXWin extends JFrame and provides the main container for this example. Several instance variables are needed:

int m_count, int m_tencount: used for cascading

JButton m_newFrame: used to create new frames.

JDesktopPane m_desktop: our desktop pane.

int m_wmX: keeps track of the most recent x coordinate of the desktop scrollpane's view position.

int m_wmY: keeps track of the most recent y coordinate of the desktop scrollpane's view position.

WindowManager m_wm: our custom DesktopManager implementation that updates WindowWatcher whenever any of its methods are called.

JViewport viewport:  The viewport of the scrollpane that will contain our desktop.

In the JavaXWin constructor we create a new JDesktopPane and place it inside a JScrollPane. Then we create a new WindowManager (see below) and pass it a reference to our desktop. We then tell our desktop that this WindowManager is a DesktopManager implementation and it should be used to manage our internal frames. This is done with JDesktopPane's setDesktopManager() method. We then place our WindowManager's WindowWatcher in our desktop's PALETTE_LAYER. This will guarantee that it is always displayed over all internal frames:

    m_wm = new WindowManager(m_desktop);

    m_desktop.setDesktopManager(m_wm);

    m_desktop.add(m_wm.getWindowWatcher(),

      JLayeredPane.PALETTE_LAYER);

A custom JViewport is constructed with an overriden setViewPosition() method. This method is responsible for keeping our WindowWatcher in the same place as we scroll the desktop. Each time the view is changed we reposition the WindowWatcher to give the impression that it lies completely above our desktop and is unaffected by scrolling. Basically, this code just computes the difference between the current and most recent viewport position, and adds this difference to the coordinates of the WindowWatcher. We then use this JViewport as the viewport for the JScrollPane our desktop is contained in using JScrollPane's setView() method.

Next we construct a ComponentAdapter and attach it to our viewport. We override its componentResized() method to move WindowWatcher to the topwhenever the viewport is resized. This is done so that WindowWatcher will never disappear from our view when the application is resized.

The newFrame() method is almost identical to that of CascadeDemo. The only difference is that we place a JTextArea in each internal frame and load a text file into it (the original press release from Sun announcing a Linux port of JDK1.2!)

Class WindowManager

The WindowManager class is a simple extension of DefaultDesktopManager which overrides all JInternalFrame related methods. Only one instance variable is necessary:

WindowWatcher ww: our custom pager component.

Each of the methods overriden from DefaultDesktopManager call their superclass counterparts by using super, and then call repaint on ww. So each time the user performs an action on an internal frame, WindowManager basically just tells our WidowWatcher to repaint itself.

The WindowManager constructor takes a reference to the desktop it manages, and in turn passes this  reference to the WindowWatcher constructor. WindowWatcher uses this reference to find out all the information it needs to know about our desktop's contents to paint itself correctly (see below).

The getWindowWatcher() method just returns a reference to the WindowWatcher object, ww, and is used when the desktop is scrolled as discussed above.

Class WindowWatcher

This class is our version of an X windows pager. It uses the XXResizeEdge components in our custom resize package to allow full resizability. Four class variables are necessary:

Color C_UNSELECTED: used to represent all components but selected JInternalFrames and WindowWatcher itself.

Color C_SELECTED: used to represent selected JInternalFrames.

Color C_BACKGROUND: used for the WindowWatcher background.

Color C_WWATCHER: used to represent the WindowWatcher itself.

Instance variables:

float m_widthratio: Keeps the ratio of desktop width to WindowWatcher width.

float m_heightratio: Keeps the ratio of desktop height to WindowWatcher height.

int m_width: The current WindowWatcher width.

int m_height: The current WindowWatcher height.

int m_XDifference: Used for dragging the WindowWatcher horizontally.

int m_YDifference: Used for dragging the WindowWatcher vertically.

NorthResizeEdge m_northResizer: north resize component

SouthResizeEdge m_southResizer: south resize component

EastResizeEdge m_eastResizer: east resize component

WestResizeEdge m_westResizer: west resize component

JDesktopPane m_desktop: Reference to the desktop the WindowWatcher is watching over.

The constructor is passed a JDesktopPane reference which is assigned to m_desktop. We use a BorderLayout for this component and add instances of our resize package's XXResizeEdge classes to each outer region, allowing WindowWatcher to be fully resizable.

Note: See the resize package source code for details about these components. They were introduced and discussed in chapter 15. We encourage you to add more accessors to these classes to allow such things as setting thickness and color.

We then construct custom MouseInputAdapter. This adapter overrides the mousePressed(), mouseDragged(), mouseEntered(), and mouseExited() events. The mousePressed() method stores the location of the mouse press in our m_XDifference and m_YDifference class variables. These are used in the mouseDragged() method to allow WindowWatcher to be continuously dragged from any point within its bounds.

The mouseDragged() method allows the user to drag WindowManager anywhere within the visible region of the desktop. In order to enforce this and still allow smooth movement we need handle many different cases depending on mouse position and, possibly, the current JViewport position that the desktop is contained within. Note that we do not assume that WindowWatcher and its associated desktop are contained within a JViewport. However, in such a case we have to handle WindowWatcher's movement differently.

Reference: The mouseDragged code is a straight-forward adaptation of the code we used to control dragging our InnerFrames in chapter 15. See section 15.5.

The mouseEntered() method just changes the cursor to MOVE_CURSOR and mouseExited changes the cursor back to DEFAULT_CURSOR.

Finally we add this adapter with both addMouseListener() and addMouseMotionListener(). (Note that MouseInputAdapter implements both of the MouseListener and MouseMotionListener interfaces.)

The paintComponent() method starts by filling the background, getting the current dimensions, and retrieving an array of components contained in the desktop. The ratios of desktop size to WindowWatcher size are computed and then we enter a loop which is executed for each component in the array. This loop starts by setting the color to C_UNSELECTED. We then check if the component under consideration is a JInternalFrame. If it is we check if it is selected. If it is selected we set the current color to C_SELECTED. If it the component is not a JInternalFrame we check if it is the WindowWatcher itself. If so we set the current color to C_WWATCHER.

    for (int i=components.length-1; i>-1; i--) {

      if (components[i].isVisible()) {

        g.setColor(C_UNSELECTED);

        if (components[i] instanceof JInternalFrame) {

          if (((JInternalFrame) components[i]).isSelected())

            g.setColor(C_SELECTED);

        }

        else if(components[i] instanceof WindowWatcher)

          g.setColor(C_WWATCHER);

        g.fillRect((int) (((float)

        .

        .

        .

      }        

    }

Once the color is selected we paint a filled, scaled rectangle representing that component. We scale this rectangle based on the ratios we computed earlier, making sure to use floats to avoid otherwise large rounding errors. We then paint a black outline around this rectangle and move on to the next component in our array until it has been exhausted. Note that we cycle through this array from the highest index down to 0 so that the rectangles are painted in the same order that the components appear in the JDesktopPane (the appearance of layering is consistent).

Running the code:

Figure 16.5 shows JavaXWin in action and figure 16.6 is a snapshot of the WindowWatcher itself. Try moving frames around and resizing them. Note that WindowWatcher smoothly captures and displays each component as it changes position and size. Try moving WindowWatcher and note that you cannot move it outside the visible region of the desktop. Now try scrolling to a different position within the desktop and note that WindowWatcher follows us and remains in the same position within our view. Also note that WindowWatcher can be resized because we've taken advantage of the classes in our custom resize package. In the next example we will build on top of JavaXWin and WindowManager to construct a multi-user, networked desktop environment.

WindowWatcher does not fully implement the functionality of most pagers. Usually clicking on an area of the pager repositions the view of our desktop. This may be an interesting and useful feature to implement in WindowWatcher.



[ Return to Swing (Book) ]


Top 10 read Java Articles
 Get free "1000 Java Tips eBook"

 Java Calendar and Date: good to know facts and code examples

 Array vs ArrayList vs LinkedList vs Vector: an excellent overview and examples

 How can I convert any Java Object into byte array? And byte array to file object

 The Java Lesson 1: What is Java?

 How do I compare two dates and times, date between dates, time between times and

 Maven vs Ant or Ant vs Maven?

 How to open, read, write, close file(s) in Java? Examples on move, rename and de

 Java Array

 Java: JLabel font and color


[ More in News Section ]
Java Lessons

The Java Lesson 1:
What is Java?
The Java Lesson 2:
Anatomy of a simple Java program
The Java Lesson 3:
Identifiers and primitive data types
The Java Lesson 4:
Variables, constants, and literals
The Java Lesson 5:
Arithmetic operations, conversions, and casts
The Java Lesson 6:
Boolean expressions and operations
The Java Lesson 7:
Bitwise operations
The Java Lesson 8:
Flow control with if and else
The Java Lesson 9:
switch statements
The Java Lesson 10:
for, while, and do-while statements
The Java Lesson 11:
Using break and continue
The Java Lesson 12:
Class methods and how they are called
The Java Lesson 13:
Using the Math class
The Java Lesson 14:
Creating and calling custom class methods
The Java Lesson 15:
Overloading class methods
The Java Lesson 16:
An introduction to objects and object references
The Java Lesson 17:
The String class
The Java Lesson 18:
The StringBuffer class
The Java Lesson 19:
Initializing and processing arrays of primitives
The Java Lesson 20:
Initializing and processing arrays of objects
The Java Lesson 23:
Inheritance and overriding inherited methods
The Java Lesson 24:
abstract classes and polymorphism
The Java Lesson 25:
Interfaces, instanceof, and object conversion and casting
The Java Lesson 26:
Introduction to graphical programming and the java.awt packa
The Java Lesson 27:
The Component class
The Java Lesson 28:
Containers and simple layout managers
The Java Lesson 29:
The Color and Font classes
The Java Lesson 30:
Drawing geometric shapes
The Java Lesson 31:
Choice, List, and Checkbox controls
The Java Lesson 32:
Using the Scrollbar graphical control
The Java Lesson 33:
Menus and submenus
The Java Lesson 34:
An introduction to applets and the Applet class
The Java Lesson 35:
Essential HTML to launch an applet and pass it parameters
The Java Lesson 36:
Mouse event processing
Java Lesson 37:
Menus and submenus
Java Lesson 38:
The WindowListener interface and the WindowAdapter class
Java Lesson 39:
An introduction to GridBagLayout
Java Lesson 40:
An introduction to the Java Collections API
Java Lesson 41:
Exception handling with try, catch, and finally blocks
Java Lesson 42:
Claiming and throwing exceptions
Java Lesson 43:
Multithreading, the Thread class, and the Runnable interface
Java Lesson 44:
An introduction to I/O and the File and FileDialog classes
Java Lesson 45:
Low-level and high-level stream classes
Java Lesson 46:
Using the RandomAccessFile class
Java Lessons by
Joh Huhtala: Update

Latest articles
 Java Profiler JProbe to Resolve Performance Problems Faster

 SSL with GlassFish v2, page 5

 SSL with GlassFish v2, page 4

 SSL with GlassFish v2, page 3

 SSL with GlassFish v2, page 2

 The Java Lesson 2: Anatomy of a simple Java program, page 2

 New site about Java for robots and robotics: both software and hardware.

 Exceptions -III: What's an exception and why do I care?

 Exceptions -II: What's an exception and why do I care?

 Exceptions: What's an exception and why do I care?

 Double your Java code quality in 10 minutes, here is receipt

 Murach's Java Servlets and JSP

 How to get ascii code from a char in Java?

 Can we just try without catch? Yes!

 Make Tomcat page load faster

 Make your Tomcat More secure - limit network address for certain IP addresses

 New Java book online starts now here...

 Implementing RESTful Web Services in Java

 Firefox trimming from 1 GB to 40 Mb with many tabs opened

 SSL with GlassFish v2

 My request to replublish Tech Tips

 Search JavaFAQ.nu site here

 New Advanced Installer for Java 6.0 brings XML updates and imports 3rd party MSI

 EJB programming restrictions

 Maven vs Ant or Ant vs Maven?

 Why Java does not use default value which it should?

 How to unsign signed bytes in Java - your guide is here

 The Java Lesson 3: Identifiers and primitive data types. Page 2

 The Java Lesson 7: Bitwise operations with good examples, click here! Page 4

 The Java Lesson 7: Bitwise operations with good examples, click here! Page 3


[ More in News Section ]


Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy