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 341


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

Java: JComboBox (uneditable)

Go to all tips in Swing, AWT

Making Choices

There are several ways to select one of many fixed choices: radio buttons, a menu, a list, or a (uneditable) combo box. A combo box (JComboBox) is a popup menu and is often the best component to use because it uses less space than radio buttons or a list, and it shows as part of a "form" so the user realizes it's there, unlike a menu.

You can also use an editable combo box, and in this case the user can either choose from the pop-up menu or type in a value.

Constructor

An easy way to build a combo box is to initialize an array (or Vector, but not yet the new Collections types) of strings and pass it to the constructor. Objects other than strings can be used, but this is the most common. The list also be built by successive calls to the add method.
String[] dias = {"lunes", "martes", "miercoles"};
JComboBox dayChoice = new JComboBox(dias)

Common methods

In these prototypes, assume the following.
   int index;
   String item;
   String obj;  // obj can be any object type, but is commonly String
   JComboBox cb = new JComboBox(. . .);
Result Call Description
cb.addActionListener(...); Add listener -- same as for button.
Modifying a JComboBox
cb.setSelectedIndex(index); Set default, visible, choice.
cb.setSelectedItem(obj); Set default, visible, choice.
cb.add(item); Add additional item to the list
cb.insert(item, index); Add additional item after index.
cb.remove(item); Remove item from the list
cb.remove(index); Remove item as position index
Testing a JComboBox
index = cb.getSelectedIndex(); Return index of selected item.
obj = cb.getSelectedItem(); Return selected item.

Events

A JComboBox generates both ActionEvents (like buttons, text fields, etc), or ItemEvents. Because it is easier to work with ActionEvents, we'll ignore the ItemEvents. When the user chooses an item from a combo box, an ActionEvent is generated, and the listener's actionPerformed method is called. Use either getSelectedIndex to get the integer index of the item that was selected, or getSelectedItem to get the value (eg, a String) that was selected.

Example

This example creates a JComboBox, and adds a listener to it. The getSelectedItem method returns an Object type, so it's necessary to downcast it back to a String.
String[] fnt = {"Serif", "SansSerif", "Monospaced"};
JComboBox fontChoice = new JComboBox(fnt);

fontChoice.addActionListener(
    new ActionListener() {
        public void actionPerformed(ActionEvent e) {    
            JComboBox combo = (JComboBox)e.getSource();
            currentFont = (String)combo.getSelectedItem();
        }
    }
);


1 comment | Printer Friendly Page  Send to a Friend | Score: 5
Posted by jalex on Friday, April 15, 2005 (00:00:00) (9809 reads)

Java Lesson 44: An introduction to I/O and the File and FileDialog classes

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 44 by Jon Huhtala


An introduction to I/O and the File and FileDialog classes


Overview

Nearly all programs require the ability to transfer data in and out of memory. For example, data may be stored on disk or sent over a network.

Java provides many classes that make "I/O" (input and output) relatively easy and platform independent. In this lesson, you will learn how to act upon the file structure of a platform from inside a Java application. Note that Java applets are NOT permitted to access a platform's file structure for security reasons.

The File class

  • Is part of the java.io package. You will need an import statement to access the class with its abbreviated name.

  • Is an extension of the Object class

Object

File
  • Encapsulates platform-independent information about a file or a directory.

While all platforms use pathname strings to name files and directories, they do not agree on the format of these strings. For example, the Windows pathname string is not the same as the Unix pathname string.

Regardless of platform, however, all pathnames have two components:

  1. An optional system-dependent prefix string (such as the disk-drive specifier followed by "/" for the Unix root directory or "" for the Windows root directory)

  2. A sequence of zero or more string names where each name, except for the last, denotes a directory. The the last name may denote either a directory or a file. A system-dependent separator ("/" for Unix or "" for Windows) is used between each name.

For example, the following represents a valid Windows pathname:

C:My DocumentsNew CoursesLesson55.htm

Regardless of the platform, the File class presents a system-independent view of pathnames.

  • Has a number of static fields. These two are the most useful:

Field

Usage

separator

The String representation of the filename separator used on the current platform.

separatorChar

The char representation of the filename separator used on the current platform.

For example, the following program can determine if it is running under Windows:

import java.io.*;
public class App {
public static void main(String[] args) {
if (File.separator.equals(""))
System.out.println("Windows");
else
System.out.println("Not Windows");
}
}

Note that the double backslash is required to because a single backslash denotes an escape sequence.

  • Has several constructors. The most frequently used constructs a File object from a pathname string as shown by the following statement:

File f = new File("C:My DocumentsMiscResume.doc");

NOTE: Constructing a File object does NOT create a disk file. It only constructs a platform-independent object for referencing the file.
  • Has a number of methods, some of which WILL create, rename, and delete a disk file or a directory. They should obviously be used with caution. The most frequently used methods are:

Method

Usage

createNewFile()

Atomically creates a new, empty file named by this pathname if and only if a file with this name does not yet exist

delete()

Deletes the file or directory denoted by this pathname

exists()

Tests whether the file denoted by this pathname exists

getName()

Returns the name of the file or directory denoted by this pathname

getParent()

Returns the pathname of this pathname's parent, or null if this pathname does not name a parent directory

getPath()

Returns the pathname string of this pathname

isDirectory()

Tests whether this pathname is a directory

isFile()

Tests whether this pathname is a file

lastModified()

Returns the time that the file denoted by this pathname was last modified

length()

Returns the length of the file denoted by this pathname

list()

Returns an array of strings naming the files and directories in the directory denoted by this pathname

mkdir()

Creates the directory named by this pathname

renameTo()

Renames the file denoted by this pathname

Consult the Java API documentation for more details.

The FileDialog class

  • Is part of the java.awt package. You will need an import statement to access the class with its abbreviated name.

  • Has many ancestor classes as indicated by the following diagram:

Object

Component

Container

Window

Dialog

FileDialog

  • Can be instantiated to display a modal dialog window from which the user can select a file. Because it is a modal dialog, once an application makes a FileDialog object visible, it cannot continue until the user has chosen a file.

  • Has two static fields that indicate whether the file will be used for input or output. They are

Field

Usage

LOAD

Indicates that the purpose of the file dialog window is to locate a file from which to read

SAVE

Indicates that the purpose of the file dialog window is to locate a file to which to write

  • Has several constructors. The most frequently used is demonstrated by

FileDialog fd = new FileDialog(this, "Choose file", FileDialog.LOAD);
fd.setVisible(true);

which constructs and displays a file dialog window for the current (this) object. The title of the file dialog window will be "Choose file", and the chosen file will be used for input.

  • Has a number of methods. The most frequently used are as follows:

Method

Usage

getDirectory()

Returns a String representing the directory of the selected file

getFile()

Returns a String representing the filename of the selected file

setDirectory()

Sets the directory of this file dialog window to be the specified directory

setFile()

Sets the selected file for this file dialog window to be the specified file

Consult the Java API documentation for more details.

Sample program

The following menu-driven, Windows program uses the File and FileDialog classes to display a variety of information about a file selected by the user:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

public class App extends Frame implements ActionListener {

// Object references.

MenuBar mainBar;
Menu fileMenu;
MenuItem find;
MenuItem exit;
TextArea fileInfo;

// Processing starts here.

public static void main(String[] args) {
App myWindow = new App("File Analyzer");
myWindow.setSize(500, 200);
myWindow.setVisible(true);
}

// Class constructor.

public App(String title) {

// Usual boilerplate for startup and shutdown.

super(title);
addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
);

// Create the frame's menu bar.

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

// Create the file information text area.

fileInfo = new TextArea(" Use the menu bar to find a file...",
10, 40, TextArea.SCROLLBARS_NONE);
fileInfo.setFont(new Font("Monospaced", Font.PLAIN, 12));
fileInfo.setEditable(false);
add(fileInfo);
}

// Required method of the ActionListener interface.

public void actionPerformed(ActionEvent e) {

// If the user selected "File" | "Find" from the menu, let them
// choose a file to be analyzed. Then, display its information.

if (e.getSource().equals(find)) {

// Create and display a modal file dialog box through which the
// user can choose the file they want to analyze.

FileDialog fd = new FileDialog(this, "Choose file", FileDialog.LOAD);
fd.setVisible(true);

// Construct a File object for the file the user selected.

File f = new File(fd.getDirectory() + File.separator + fd.getFile());

// Display information about the file the user selected.

fileInfo.setText(" FILE INFORMATION ");
fileInfo.append(" Path: " + f.getPath());
fileInfo.append(" Directory: " + fd.getDirectory());
fileInfo.append(" File: " + f.getName());
fileInfo.append(" Last modified: " +
new Date(f.lastModified()).toString());
fileInfo.append(" Byte length: " + f.length());
fileInfo.setCaretPosition(0);
}

// If the user selected "File" | "Exit" from the menu, terminate
// the application.

if (e.getSource().equals(exit)) {
dispose();
System.exit(0);
}
}
}

Looking ahead

While the File and FileDialog classes allow a program to act upon the file structure of a platform, they do NOT allow for the actual storage and retrieval of data. That is covered in the next lesson.

Lab exercise for Ferris students

E-mail your answers to this assignment no later than the due date listed in the class schedule.

Review questions

  1. Which one of the following will create and display a file dialog window to assist the user in selecting a file to be used for output?

  1. FileDialog x = new FileDialog(this, "Output file", FileDialog.SAVE);
    x.setVisible(true);

  2. FileDialog x = new FileDialog(this, "Output file", FileDialog.SAVE);
    FileDialog.show(x);

  3. FileDialog x = new FileDialog(this, "Output file", FileDialog.SAVE);
    x.show();

  4. FileDialog x = new FileDialog(this, "Output file", FileDialog.OUTPUT);
    x.setVisible(true);

  5. FileDialog x = new FileDialog(this, "Output file", FileDialog.OUTPUT);
    x.show();

  1. Assuming that all unseen code is correct and that drive D: is a valid drive specification on the platform, what will happen when an attempt is made to compile and execute the following statements in a Java application? The line numbers are for reference purposes only.

1
2
File f = new File("D:Temp");
f.mkdir();
  1. a compile error will occur at line 1

  2. a compile error will occur at line 2

  3. the code will compile but a runtime exception will occur

  4. the code will compile and execute to create a file named Temp in the root directory of the disk in drive D:

  5. the code will compile and execute to create a directory named Temp in the root directory of the disk in drive D:

  1. Code an expression to determine the length of a file whose path is: C:DocumentsTemp.doc

  1. True or False: An application thread is allowed to continue processing while the user responds to a visible FileDialog object.

  1. True

  2. False


28059 bytes more | 2 comments | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Thursday, April 14, 2005 (00:00:00) (12628 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