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...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java programming articles and tips. Please take your copy here.

Take your copy of free "Java Technology Screensaver"!.

Easy Learn Java: Programming Articles, Examples and Tips - Page 326


Previous 1060 Stories (530 Pages, 2 Per Page) Next

Sorting Arrays

Go to all tips in Java Notes by Fred Swartz

Why you shouldn't write your own sort

A favorite computer science topic it sorting, putting a collection of data in some order. Typically this is done for arrays. Many sorts are typically shown, both the O(n2) sorts (eg, selection, insertion, and bubble sorts) and O(n log n) sorts (quick sort, heap sort, etc). These are interesting problems, give students a lot of practice with arrays, bring up important tradeoffs, and are generally quite educational. However, the Java library already has sort methods that are more efficient, more general, and more correct than anything you are likely to write yourself. And they are already written. Professional programmers use one of the java.util.Arrays.sort() methods; they do not write their own, except perhaps in unusual cases.

Other data structures. There are also sort methods in the java.util.Collections class which can be used to sort other kinds of data structures, and there are data structures such as TreeMap that keep elements sorted based on a key.

Sorting Arrays

The java.util.Arrays class contains a number of static methods for sorting arrays, both arrays of primitive types and Object types. The sort method can be applied to entire arrays, or only a particular range.
MethodDescription
Arrays sort methods
Arrays.sort(pa);Sorts the elements of the array of a primitive type into ascending order using their natural ordering.
Arrays.sort(pa, from, to); Sorts the elements pa[from]...pa[to-1] of a primitive type. into ascending order.
Arrays.sort(oa);Sorts the elements of the array of an object type into ascending order, using the order defined by Comparable interface, which defines the compareTo method. Note that many Java classes such as String (but not StringBuffer), Double, BigInteger, etc implement Comparable.
Arrays.sort(oa, from, to); Sorts the elements of the array, in the range from...to of an object type into ascending order.
Arrays.sort(oa, comp);Sorts the elements of the array of an object type into ascending order, using the Comparator comp.
Arrays.sort(oa, from, to, comp); Sorts the elements of the array, in the range from...to of an object type into ascending order using the Comparator comp.

Example - Sorting a full array of Doubles

This example sorts an entire array of objects. Because Double implements the Comparable interface (ie, defines the compare() method), there is no need to define a comparator. This sorts the entire array, but another version sorts in a specified subscript range.
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
// arrays/-objectsort/Dblsrt.java
// Fred Swartz 2003-09-15

import java.util.*;

public class Dblsrt {
    public static void main(String[] args) {
        Double[] da = {new Double(3.1), new Double(99), new Double(-66)};
        print(da);         // Print unsorted array.
        Arrays.sort(da);   // Sort array
        print(da);         // Print sorted array.
    }
    
    private static void print(Object[] oa) {
        for (int i=0; i

Comparators

The java.util.Comparator interface can be used to create objects for use in the Arrays.sort methods, among others. A Comparator must define a compare function which takes two Objects and returns a -1, 0, or 1

The example below gets the subfiles (children) of a directory, and sorts them alphabetically with the directories first.
  1 
  2 
  3 
  4 
  5 
  6 
  7 
  8 
  9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
// arrays/-filelist/Filelistsort.java - List contents of directory.
// Takes directory name as command line parameter.
// Fred Swartz - 2003-09-15

import java.util.Arrays;
import java.util.Comparator;
import java.io.*;

public class Filelistsort {
    public static void main(String[] args) {
        File dir = new File(args[0]);
        
        File[] children = dir.listFiles();

        Arrays.sort(children, new Comparator() {
            public int compare(Object a, Object b) {
                File filea = (File)a;
                File fileb = (File)b;
                //--- Sort directories before files, 
                //    otherwise alphabetical ignoring case.
                if (filea.isDirectory() && !fileb.isDirectory()) {
                    return -1;
                } else if (!filea.isDirectory() && fileb.isDirectory()) {
                    return 1;
                } else {
                    return filea.getName().compareToIgnoreCase(fileb.getName());
                }
            }
        });
        
        for (int i=0; i

Sorting ArrayLists

   Collections.sort(alist);
   Collections.sort(alist, comparator);


90 comments | Printer Friendly Page  Send to a Friend | Score: 4
Posted by jalex on Tuesday, March 22, 2005 (00:00:00) (20483 reads)

Java Lesson 37: Menus and submenus

Go to all tips in Java Lessons by Jon Huhtala
All Java Lessons contents page | Java Lesson 1 | Java Lesson 2 | Java Lesson 3 | Java Lesson 4 | Java Lesson 5 | Java Lesson 6 | Java Lesson 7 | Java Lesson 8 | Java Lesson 9 | Java Lesson 10 | Java Lesson 11 | Java Lesson 12 | Java Lesson 13 | Java Lesson 14 | Java Lesson 15 | Java Lesson 16 | Java Lesson 17 | Java Lesson 18 | Java Lesson 19 | Java Lesson 20 | Java Lesson 21 | Java Lesson 22 | Java Lesson 23 | Java Lesson 24 | Java Lesson 25 | Java Lesson 26 | Java Lesson 27 | Java Lesson 28 | Java Lesson 29 | Java Lesson 30 | Java Lesson 31 | Java Lesson 32 | Java Lesson 33 | Java Lesson 34 | Java Lesson 35 | Java Lesson 36 | Java Lesson 37 | Java Lesson 38 | Java Lesson 39 | Java Lesson 40 | Java Lesson 41 | Java Lesson 42 | Java Lesson 43 | Java Lesson 44 | Java Lesson 45 | Java Lesson 46

Java Lesson 37 by Jon Huhtala: Menus and submenus

Overview

A menu bar having multiple menus (each with multiple menu items, pop-up submenus, checkbox menu items, and separators) can be applied to any container that extends the Frame class. Note that other Window subclasses (such as Dialog) and Panel subclasses (such as Applet) cannot contain a menu bar.

To work with menus and submenus, you need to know the following classes:

MenuComponent
MenuBar
Menu
MenuItem
CheckboxMenuItem

The MenuComponent class

  • Is part of the java.awt package

  • Is an extension of the Object class

Object

MenuComponent

  • Is the abstract superclass of all menu-related components. In this respect, the class MenuComponent is analogous to the abstract superclass Component for AWT components.

  • Has a few useful methods, but most menu and submenu programming involves classes that extend MenuComponent

The MenuBar class

  • Is part of the java.awt package

  • Is an extension of the MenuComponent class

Object

MenuComponent

MenuBar

  • Encapsulates the platform's concept of a menu bar bound to a frame. In order to associate the menu bar with a Frame object, call the frame's setMenuBar() method. For example, if appFrame is a Frame object, a menu bar may be created and added to appFrame by coding

MenuBar mainBar = new MenuBar();
appFrame.setMenuBar(mainBar);

When initially constructed, mainbar has no menus. Its add() method may be called to add them. Other methods exist, but are of little general use.

The Menu class

  • Is part of the java.awt package

  • Is an extension of the MenuItem class (to be covered shortly)

Object

MenuComponent

MenuItem

Menu

  • Is used to construct Menu objects, which are a pull-down menu components deployed from a menu bar. Each Menu object can contain a number of menu items which can be a submenu (an instance of Menu), a simple item (an instance of MenuItem), or a check box item (an instance of CheckboxMenuItem).

  • Has several constructors but the most commonly used receives a string parameter that specifies the label of the menu (the text that will appear within the menu bar). For example, if mainBar is a MenuBar object, a menu with the label "File" can be instantiated and added to mainBar by coding

Menu fileMenu = new Menu("File");
mainBar.add(fileMenu);

When initially constructed, fileMenu has no submenus, menu items, or checkbox menu items. Its add() method may be called to add them. The order in which menu items appear will be the order in which they are added.

  • Has several methods but the two most frequently used are:

Method

Usage

add()

Adds the specified MenuItem to the menu

addSeparator()

Adds a separator line to the menu at the current position

Consult the help facility of your Java development environment or the Java API for more details.

The MenuItem class

  • Is part of the java.awt package

  • Is an extension of the MenuComponent class

Object

MenuComponent

MenuItem

  • Is the root class for all items to be added to a menu. All items in a menu must belong to the class MenuItem, or one of its subclasses. The default MenuItem object embodies a simple labeled menu item.

  • Fires an ActionEvent when a simple menu item is selected. If the menu item has a registered ActionListener with an actionPerformed() method, it will automatically be called to process the event. Note that the subclass Menu does not fire any event until one of its simple menu items is selected.

  • Has several constructors but the most commonly used receives a string parameter that specifies the label of the menu item (the text that will appear within the menu). For example, if fileMenu is a Menu object, the following statements will construct a MenuItem object with the label "Open", register its ActionListener, and add it to fileMenu:

MenuItem open = new MenuItem("Open");
open.addActionListener(this);
fileMenu.add(open);

  • Has many useful methods. The most commonly used are:

Method

Usage

addActionListener()

Adds the specified ActionListener to receive ActionEvent objects from this menu item

getActionCommand()

Returns the command name of the action event fired by this menu item

getLabel()

Gets the label of this menu item

isEnabled()

Determines whether the menu item is enabled

removeActionListener()

Removes the specified action listener so it no longer receives ActionEvent objects from this menu item

setActionCommand()

Sets the command name for the ActionEvent objects fired by this menu item

setEnabled()

Enables or disables the menu item

setLabel()

Sets the label of this menu item

Consult the help facility of your Java development environment or the Java API for more details.

The lesson continues on the next page....


The CheckboxMenuItem class

  • Is part of the java.awt package

  • Is an extension of the MenuItem class

Object

MenuComponent

MenuItem

CheckboxMenuItem

  • Represents a checkbox that can be included in a menu. Clicking on the checkbox in the menu changes its state from "on" to "off" or from "off" to "on."

  • Fires an ItemEvent when a checkbox menu item is selected. If the item has a registered ItemListener with an itemStateChanged() method, it will automatically be called to process the event.

  • Has several constructors but the most commonly used receives a string parameter that specifies the label of the checkbox menu item (the text that will appear within the menu). For example, if optionMenu is a Menu object, the following statements will construct a CheckboxMenuItem object with the label "Auto Save", register its ItemListener, and add it to optionMenu:

CheckboxMenuItem autoSave = new CheckboxMenuItem("Auto Save");
autoSave.addItemListener(this);
fileMenu.add(autoSave);

By default, the initial state of a CheckboxMenuItem is "off". An overloaded constructor may be used to initialize the object to be "on".

  • Has several useful methods including:

Method

Usage

addItemListener()

Adds the specified ItemListener to receive ItemEvent objects from this checkbox menu item

getState()

Determines whether the state of this checkbox menu item is "on" or "off"

removeItemListener()

Removes the specified item listener so it no longer receives ItemEvent objects from this checkbox menu item

setState()

Sets the check box menu item to the specified state

Consult the help facility of your Java development environment or the Java API for more details.

Example:

import java.awt.*;
import java.awt.event.*;

public class App extends Frame implements WindowListener,
ActionListener, ItemListener {

// References for menu components

MenuBar mainBar;
Menu fileMenu;
MenuItem exit;
Menu viewMenu;
Menu sizeSubmenu;
MenuItem large;
MenuItem medium;
MenuItem small;
CheckboxMenuItem bold;
CheckboxMenuItem italics;

// Message to be displayed and its initial font

Label message = new Label("Hello World!");
Font myFont = new Font("SanSerif", Font.PLAIN, 24);

public static void main(String[] args) {
App myWindow = new App("A stylish menu");
myWindow.setSize(300,200);
myWindow.setVisible(true);
}

public App(String title) {
super(title);
setLayout(new BorderLayout());
addWindowListener(this);

// Create and set the frame's menu bar (unpopulated)

mainBar = new MenuBar();
setMenuBar(mainBar);

// Create the "File" menu and add it to the frame's menu bar

fileMenu = new Menu("File");
fileMenu.addSeparator();
exit = new MenuItem("Exit");
exit.addActionListener(this);
fileMenu.add(exit);
mainBar.add(fileMenu);

// Build the "Text Size" submenu in order to reference it shortly

sizeSubmenu = new Menu("Text Size");
large = new MenuItem("Large");
large.addActionListener(this);
sizeSubmenu.add(large);
medium = new MenuItem("Medium");
medium.addActionListener(this);
sizeSubmenu.add(medium);
small = new MenuItem("Small");
small.addActionListener(this);
sizeSubmenu.add(small);

// Create the "View" menu and add it to the frame's menu bar

viewMenu = new Menu("View");
viewMenu.add(sizeSubmenu);
viewMenu.addSeparator();
bold = new CheckboxMenuItem("Bold");
bold.addItemListener(this);
viewMenu.add(bold);
italics = new CheckboxMenuItem("Italics");
italics.addItemListener(this);
viewMenu.add(italics);
mainBar.add(viewMenu);

// Set the message in the frame

message.setFont(myFont);
message.setBackground(Color.black);
message.setForeground(Color.white);
message.setAlignment(Label.CENTER);
add(message);
}

public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(exit)) {
dispose();
System.exit(0);
}
else {
if (e.getSource().equals(large)) {
myFont = new Font(myFont.getFontName(), myFont.getStyle(), 36);
}
if (e.getSource().equals(medium)) {
myFont = new Font(myFont.getFontName(), myFont.getStyle(), 24);
}
if (e.getSource().equals(small)) {
myFont = new Font(myFont.getFontName(), myFont.getStyle(), 12);
}
message.setFont(myFont);
}
}

public void itemStateChanged(ItemEvent e) {
if (e.getSource().equals(bold)) {
if (bold.getState() == true) {
myFont = new Font(myFont.getFontName(),
myFont.getStyle() + Font.BOLD, myFont.getSize());
}
else {
myFont = new Font(myFont.getFontName(),
myFont.getStyle() - Font.BOLD, myFont.getSize());
}
}
if (e.getSource().equals(italics)) {
if (italics.getState() == true) {
myFont = new Font(myFont.getFontName(),
myFont.getStyle() + Font.ITALIC, myFont.getSize());
}
else {
myFont = new Font(myFont.getFontName(),
myFont.getStyle() - Font.ITALIC, myFont.getSize());
}
}
message.setFont(myFont);
}

public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}

Notes:

  1. The class implements the ActionListener interface in order to handle the selection of menu items and the ItemListener interface in order to handle the selection of checkbox menu items

  2. Within the application's constructor, the order of instantiation is critical. The main menu bar (mainBar) must exist before a menu (such as fileMenu) may be added to it. Similarly, the "Text Size" submenu (sizeSubmenu) is built prior to adding it to the "View" menu (viewMenu). Also notice that each MenuItem object has a registered ActionListener and each CheckboxMenuItem object has a registered ItemListener.

  3. The actionPerformed() method begins by testing for the "Exit" menu selection. If it was chosen, the application is immediately terminated. Otherwise, a determination is made as to which text size the user selected, a new font is created to meet their request, and the new font is applied to the message being displayed.

  4. The itemStateChanged() method determines which CheckboxMenuItem was chosen (bold or italics), creates a new font to meet their request, and applies it to the message being displayed.

Review questions

  1. Which of the following may a menu contain? (choose two)

  1. a List object

  1. a separator

  2. a Menu object

  3. a Checkbox object

  4. a Panel object

  1. Which of the following may contain a menu bar?

  1. Applet

  1. Canvas

  2. Panel

  3. Dialog

  4. none of the above

  1. Code a single statement to create a checkbox menu item named gridLines with a label of "Grid Lines" and initially set to the "on" state.

  1. If someItem is a MenuItem object, which one of the following can legally replace the XXXXX in the following statement?

someItem.addXXXXXListener(this);

  1. Action

  2. Item

  3. MenuAction

  4. MenuItem

  5. both A and B


17057 bytes more | 15 comments | Printer Friendly Page  Send to a Friend | Score: 2
Posted by jalex on Monday, March 21, 2005 (00:00:00) (9817 reads)

Previous 1060 Stories (530 Pages, 2 Per Page) Next

530| 529| 528| 527| 526| 525| 524| 523| 522| 521| 520| 519| 518| 517| 516| 515| 514| 513| 512| 511| 510| 509| 508| 507| 506| 505| 504| 503| 502| 501| 500| 499| 498| 497| 496| 495| 494| 493| 492| 491| 490| 489| 488| 487| 486| 485| 484| 483| 482| 481| 480| 479| 478| 477| 476| 475| 474| 473| 472| 471| 470| 469| 468| 467| 466| 465| 464| 463| 462| 461| 460| 459| 458| 457| 456| 455| 454| 453| 452| 451| 450| 449| 448| 447| 446| 445| 444| 443| 442| 441| 440| 439| 438| 437| 436| 435| 434| 433| 432| 431| 430| 429| 428| 427| 426| 425| 424| 423| 422| 421| 420| 419| 418| 417| 416| 415| 414| 413| 412| 411| 410| 409| 408| 407| 406| 405| 404| 403| 402| 401| 400| 399| 398| 397| 396| 395| 394| 393| 392| 391| 390| 389| 388| 387| 386| 385| 384| 383| 382| 381| 380| 379| 378| 377| 376| 375| 374| 373| 372| 371| 370| 369| 368| 367| 366| 365| 364| 363| 362| 361| 360| 359| 358| 357| 356| 355| 354| 353| 352| 351| 350| 349| 348| 347| 346| 345| 344| 343| 342| 341| 340| 339| 338| 337| 336| 335| 334| 333| 332| 331| 330| 329| 328| 327|
326
| 325| 324| 323| 322| 321| 320| 319| 318| 317| 316| 315| 314| 313| 312| 311| 310| 309| 308| 307| 306| 305| 304| 303| 302| 301| 300| 299| 298| 297| 296| 295| 294| 293| 292| 291| 290| 289| 288| 287| 286| 285| 284| 283| 282| 281| 280| 279| 278| 277| 276| 275| 274| 273| 272| 271| 270| 269| 268| 267| 266| 265| 264| 263| 262| 261| 260| 259| 258| 257| 256| 255| 254| 253| 252| 251| 250| 249| 248| 247| 246| 245| 244| 243| 242| 241| 240| 239| 238| 237| 236| 235| 234| 233| 232| 231| 230| 229| 228| 227| 226| 225| 224| 223| 222| 221| 220| 219| 218| 217| 216| 215| 214| 213| 212| 211| 210| 209| 208| 207| 206| 205| 204| 203| 202| 201| 200| 199| 198| 197| 196| 195| 194| 193| 192| 191| 190| 189| 188| 187| 186| 185| 184| 183| 182| 181| 180| 179| 178| 177| 176| 175| 174| 173| 172| 171| 170| 169| 168| 167| 166| 165| 164| 163| 162| 161| 160| 159| 158| 157| 156| 155| 154| 153| 152| 151| 150| 149| 148| 147| 146| 145| 144| 143| 142| 141| 140| 139| 138| 137| 136| 135| 134| 133| 132| 131| 130| 129| 128| 127| 126| 125| 124| 123| 122| 121| 120| 119| 118| 117| 116| 115| 114| 113| 112| 111| 110| 109| 108| 107| 106| 105| 104| 103| 102| 101| 100| 99| 98| 97| 96| 95| 94| 93| 92| 91| 90| 89| 88| 87| 86| 85| 84| 83| 82| 81| 80| 79| 78| 77| 76| 75| 74| 73| 72| 71| 70| 69| 68| 67| 66| 65| 64| 63| 62| 61| 60| 59| 58| 57| 56| 55| 54| 53| 52| 51| 50| 49| 48| 47| 46| 45| 44| 43| 42| 41| 40| 39| 38| 37| 36| 35| 34| 33| 32| 31| 30| 29| 28| 27| 26| 25| 24| 23| 22| 21| 20| 19| 18| 17| 16| 15| 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|


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