Errata

Swing Hacks

Errata for Swing Hacks

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed
Page xiv
+1

They use it to refer to people who breaks into systems or wreaks havoc
with computers as their weapon.
->
They use it to refer to people who break into systems or wreak havoc
with computers as their weapon.

########################################

Anonymous    Mar 01, 2007
Printed
Page xvi
+1

This chapter revelas
->
This chapter reveals

########################################

Anonymous    Mar 01, 2007
Printed
Page 5
+3

The code is almost the same as JLabel.
->
The code is almost the same as ImageLabel.

########################################

Anonymous    Mar 01, 2007
Printed
Page 5
example 1-4

There is a missing constructor in the ImageButton() class. It is in the
downloadable example code, but not in the book. So this:

public class ImageButton extends JButton {

public ImageButton(ImageIcon icon) {

should be changed to:

public class ImageButton extends JButton {

public ImageButton(String img) {
this(new ImageIcon(img));
}

public ImageButton(ImageIcon icon) {



Anonymous    Jun 01, 2008
Printed
Page 5
example 1-4

There is a missing constructor in the ImageButton() class. It is in the
downloadable example code, but not in the book. So this:

public class ImageButton extends JButton {

public ImageButton(ImageIcon icon) {

should be changed to:

public class ImageButton extends JButton {

public ImageButton(String img) {
this(new ImageIcon(img));
}

public ImageButton(ImageIcon icon) {



Anonymous    Jun 01, 2016
Other Digital Version
5
example 1-4

There is a missing constructor in the ImageButton() class. It is in the
downloadable example code, but not in the book. So this:

public class ImageButton extends JButton {

public ImageButton(ImageIcon icon) {

should be changed to:

public class ImageButton extends JButton {

public ImageButton(String img) {
this(new ImageIcon(img));
}

public ImageButton(ImageIcon icon) {


Anonymous    Jun 01, 2008
Printed
Page 7
sidebar "On Image Creation"

save any section of the image as it's own file
->
save any section of the image as its own file

########################################

Anonymous    Mar 01, 2007
Printed
Page 23
-1

After the obligatory call to super(), the constructor...
->
After the usual call to super(), the constructor...

########################################

Anonymous    Mar 01, 2007
Printed
Page 110
2nd Paragraph; The class "DefaultMutableTableModel" is not part of Java 1.4. "... like the

ability to add an remove rows provided by the DefaultMutableTableModel ..." "On the other hand, if
you subclass DefaultMutableTableModel ..." The search phrase "DefaultMutableTableModel" is not to be
found on java.sun.com, so I assume this class is not present in all Java version.

Changed:

If you go too high up the hierarchy by implementing TableModel
or subclassing DefaultTableModel, you would miss some typical Swing
functionality that developer expect, like the ability to add and remove
rows provided by DefaultMutableTableModel. On the other hand,
if you subclass DefaultMutableTableModel, other developers will
be unhappy...

to:

If you go too high up the hierarchy by implementing TableModel
or subclassing AbstractTableModel, you would miss some typical Swing
functionality that developer expect, like the ability to add and remove
rows provided by DefaultTableModel. On the other hand,
if you subclass DefaultTableModel, other developers will
be unhappy...

Anonymous    Jun 01, 2008
Printed
Page 110
2nd Paragraph; The class "DefaultMutableTableModel" is not part of Java 1.4. "... like the

ability to add an remove rows provided by the DefaultMutableTableModel ..." "On the other hand, if
you subclass DefaultMutableTableModel ..." The search phrase "DefaultMutableTableModel" is not to be
found on java.sun.com, so I assume this class is not present in all Java version.

Changed:

If you go too high up the hierarchy by implementing TableModel
or subclassing DefaultTableModel, you would miss some typical Swing
functionality that developer expect, like the ability to add and remove
rows provided by DefaultMutableTableModel. On the other hand,
if you subclass DefaultMutableTableModel, other developers will
be unhappy...

to:

If you go too high up the hierarchy by implementing TableModel
or subclassing AbstractTableModel, you would miss some typical Swing
functionality that developer expect, like the ability to add and remove
rows provided by DefaultTableModel. On the other hand,
if you subclass DefaultTableModel, other developers will
be unhappy...

Anonymous    Jun 01, 2016
Other Digital Version
110
2nd Paragraph; The class "DefaultMutableTableModel" is not part of Java 1.4. "... like the

ability to add an remove rows provided by the DefaultMutableTableModel ..." "On the other hand, if
you subclass DefaultMutableTableModel ..." The search phrase "DefaultMutableTableModel" is not to be
found on java.sun.com, so I assume this class is not present in all Java version.

Changed:

If you go too high up the hierarchy by implementing TableModel
or subclassing DefaultTableModel, you would miss some typical Swing
functionality that developer expect, like the ability to add and remove
rows provided by DefaultMutableTableModel. On the other hand,
if you subclass DefaultMutableTableModel, other developers will
be unhappy...

to:

If you go too high up the hierarchy by implementing TableModel
or subclassing AbstractTableModel, you would miss some typical Swing
functionality that developer expect, like the ability to add and remove
rows provided by DefaultTableModel. On the other hand,
if you subclass DefaultTableModel, other developers will
be unhappy...

Anonymous    Jun 01, 2008
Printed
Page 114
example 3-6, last 2 lines

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
delegatedModel.setValueAt(aValue, rowIndex, columnIndex);
->
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
delegatedModel.setValueAt(aValue, getDelegatedRow(rowIndex), columnIndex);

########################################

Anonymous    Mar 01, 2007
Printed
Page 117
example 3-10, under static Object[][] data

{"A", new Integer(2), Color.gray.darker().darker()},
{"B", new Integer (3), Color.gray},
{"C", new Integer (1), Color.gray.darker()},

->

{"A", new Integer(2), Color.gray.darker().darker()},
{"B", new Integer(3), Color.gray},
{"C", new Integer(1), Color.gray.darker()}

########################################

Anonymous    Mar 01, 2007
Printed
Page 117
example 3-10, above TestSortableTableModel

static Object[] bonusData = {
"D", "0", Color.red
->
static Object[] bonusData = {
"D", new Integer(0), Color.red

########################################

Anonymous    Mar 01, 2007
Printed
Page 131
+3

I used a FileWriter instead of a FileInputStream because...
->
I used a FileWriter instead of a FileOutputStream because...

########################################

Anonymous    Mar 01, 2007
Printed
Page 131
last paragraph; FileInputStream should be FileOutputStream

The reader is correct. FileInputStream should be replaced with FileOutputStream

Anonymous    Jun 01, 2008
Printed
Page 131
last paragraph; FileInputStream should be FileOutputStream

The reader is correct. FileInputStream should be replaced with FileOutputStream

Anonymous    Jun 01, 2016
Other Digital Version
131
last paragraph; FileInputStream should be FileOutputStream

The reader is correct. FileInputStream should be replaced with FileOutputStream

Anonymous    Jun 01, 2008
Printed
Page 174
example 4-4

} else {
in = new FileInputStream(file);
}
}

->

} else {
in = new FileInputStream(file);
}
// ... code that does something with the InputStream 'in'
}

########################################

Anonymous    Mar 01, 2007
Printed
Page 187
code example at bottom

public class JStatusPanel extends JPanel {
->
public class JStatusBar extends JPanel {

########################################

Anonymous    Mar 01, 2007
Printed
Page 188
code example at top

public JStatusPanel(){
->
public JStatusBar(){

########################################

Anonymous    Mar 01, 2007
Printed
Page 195
1st code block

Properties settings = new Properties();
settings.load(new FileInputStream("configuration.props"));
String name = frame.getName();

->

Properties settings = new Properties();
try {
settings.load(new FileInputStream("configuration.props"));
} catch (FileNotFoundException fnfe) {
settings.store (new FileOutputStream ("configuration.props"),
"Window settings");
}
String name = frame.getName();

########################################

Anonymous    Mar 01, 2007
Printed
Page 196
2nd code block

Properties settings = new Properties();
settings.load(new FileInputStream("configuration.props"));

Iterator it = saver.framemap.keySet().iterator();

->

Properties settings = new Properties();
try {
settings.load(new FileInputStream("configuration.props"));
} catch (FileNotFoundException fnfe) {
// quietly ignore and overwrite later
}

Iterator it = saver.framemap.keySet().iterator();

########################################

Anonymous    Mar 01, 2007
Printed
Page 200
3rd paragraph

expressed at
should be
expressed as

Anonymous    Jun 01, 2008
Printed
Page 200
3rd paragraph

expressed at
should be
expressed as

Anonymous    Jun 01, 2016
Other Digital Version
200
3rd paragraph

expressed at
should be
expressed as

Anonymous    Jun 01, 2008
Printed
Page 254
Within paintComponent(Graphics g) method

The variable hints in g2.setRenderingHints(hints) was never declared and is an unknown variable.

The reader is correct. The line should be changed to:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

Anonymous    Jun 01, 2008
Printed
Page 254
Within paintComponent(Graphics g) method

The variable hints in g2.setRenderingHints(hints) was never declared and is an unknown variable.

The reader is correct. The line should be changed to:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

Anonymous    Jun 01, 2016
Other Digital Version
254
Within paintComponent(Graphics g) method

The variable hints in g2.setRenderingHints(hints) was never declared and is an unknown variable.

The reader is correct. The line should be changed to:

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

Anonymous    Jun 01, 2008
Printed
Page 255
Run the Animator; Infinite loop bug in sample code for the InfiniteProgressPanel$Animator

if rampUp == false and alphaLevel == 0, the following code will never break itself out of the
animation loop as alphaLevel will always fail the test "alphaLevel > 0". Quick fix: change this test
to "alphaLevel >= 0".

if (rampUp)
{
if (alphaLevel < 255)
{
alphaLevel = (int) (255 * (System.currentTimeMillis() - start) / rampDelay);
if (alphaLevel >= 255)
{
alphaLevel = 255;
inRamp = false;
}
}
} else if (alphaLevel > 0) {
alphaLevel = (int) (255 - (255 * (System.currentTimeMillis() -start) /
rampDelay));
if (alphaLevel <= 0)
{
alphaLevel = 0;
break;
}
}

try
{
Thread.sleep(inRamp ? 10 : (int) (1000 / fps));
} catch (InterruptedException ie) {
break;
}
Thread.yield();
}

I believe the reader is correct. However, the code he quotes is not actually in the book. I
suspect a different version of the code ended up in the download. We should update the download but
the book itself is fine.

Anonymous    Jun 01, 2008
Printed
Page 255
Run the Animator; Infinite loop bug in sample code for the InfiniteProgressPanel$Animator

if rampUp == false and alphaLevel == 0, the following code will never break itself out of the
animation loop as alphaLevel will always fail the test "alphaLevel > 0". Quick fix: change this test
to "alphaLevel >= 0".

if (rampUp)
{
if (alphaLevel < 255)
{
alphaLevel = (int) (255 * (System.currentTimeMillis() - start) / rampDelay);
if (alphaLevel >= 255)
{
alphaLevel = 255;
inRamp = false;
}
}
} else if (alphaLevel > 0) {
alphaLevel = (int) (255 - (255 * (System.currentTimeMillis() -start) /
rampDelay));
if (alphaLevel <= 0)
{
alphaLevel = 0;
break;
}
}

try
{
Thread.sleep(inRamp ? 10 : (int) (1000 / fps));
} catch (InterruptedException ie) {
break;
}
Thread.yield();
}

I believe the reader is correct. However, the code he quotes is not actually in the book. I
suspect a different version of the code ended up in the download. We should update the download but
the book itself is fine.

Anonymous    Jun 01, 2016
Printed
Page 258
2nd paragraph; common subclass should be common superclass

The reader is correct. It should be changed to 'common superclass'.

Anonymous    Jun 01, 2008
Printed
Page 258
2nd paragraph; class agnostic listener: define the term

Re-reading it, I'm coming to doubt the entire value of that sentence. I'd suggest we drop the
sentence "By constructing it with...".

Anonymous    Jun 01, 2008
Printed
Page 258
2nd paragraph; common subclass should be common superclass

The reader is correct. It should be changed to 'common superclass'.

Anonymous    Jun 01, 2016
Printed
Page 258
2nd paragraph; class agnostic listener: define the term

Re-reading it, I'm coming to doubt the entire value of that sentence. I'd suggest we drop the
sentence "By constructing it with...".

Anonymous    Jun 01, 2016
Other Digital Version
258
2nd paragraph; common subclass should be common superclass

The reader is correct. It should be changed to 'common superclass'.

Anonymous    Jun 01, 2008
Other Digital Version
258
2nd paragraph; class agnostic listener: define the term

Dropped the sentence "By constructing it with...".

Anonymous    Jun 01, 2008
Printed
Page 269
last paragraph, line 1

is handled
should be
are handled

Anonymous    Jun 01, 2008
Printed
Page 269
last paragraph, line 1

is handled
should be
are handled

Anonymous    Jun 01, 2016
Other Digital Version
269
last paragraph, line 1

is handled
should be
are handled

Anonymous    Jun 01, 2008
Printed
Page 273
-1

trasnformations
->
transformations

########################################

Anonymous    Mar 01, 2007
Printed
Page 273
code sample; super.paint(g); } else { delete both lines

g and g2 both refer to the same object, so the code works with or without
this change. g2 is only needed in order to call Graphics2D methods on the object. I think the reader
is asking for a simple refactoring: since the if and else blocks both end with super.paint(g), the if
could end with the transform, the else could be eliminated, and you could then fall through to
super.paint(g). That's not really important, but it is cleaner, so let's change that part of example
7-6 from:

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToTranslation (widthD, 0);
flipTrans.scale (-1.0, 1);
g2.transform (flipTrans);
super.paint(g);
} else {
super.paint(g);
}
}

to:

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToTranslation (widthD, 0);
flipTrans.scale (-1.0, 1);
g2.transform (flipTrans);
}
super.paint(g);
}

Anonymous    Jun 01, 2008
Printed
Page 273
code sample; super.paint(g); } else { delete both lines

g and g2 both refer to the same object, so the code works with or without
this change. g2 is only needed in order to call Graphics2D methods on the object. I think the reader
is asking for a simple refactoring: since the if and else blocks both end with super.paint(g), the if
could end with the transform, the else could be eliminated, and you could then fall through to
super.paint(g). That's not really important, but it is cleaner, so let's change that part of example
7-6 from:

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToTranslation (widthD, 0);
flipTrans.scale (-1.0, 1);
g2.transform (flipTrans);
super.paint(g);
} else {
super.paint(g);
}
}

to:

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToTranslation (widthD, 0);
flipTrans.scale (-1.0, 1);
g2.transform (flipTrans);
}
super.paint(g);
}

Anonymous    Jun 01, 2016
Other Digital Version
273
code sample; super.paint(g); } else { delete both lines

g and g2 both refer to the same object, so the code works with or without
this change. g2 is only needed in order to call Graphics2D methods on the object. I think the reader
is asking for a simple refactoring: since the if and else blocks both end with super.paint(g), the if
could end with the transform, the else could be eliminated, and you could then fall through to
super.paint(g). That's not really important, but it is cleaner, so let's change that part of example
7-6 from:

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToTranslation (widthD, 0);
flipTrans.scale (-1.0, 1);
g2.transform (flipTrans);
super.paint(g);
} else {
super.paint(g);
}
}

to:

public void paint (Graphics g) {
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
AffineTransform flipTrans = new AffineTransform();
double widthD = (double) getWidth();
flipTrans.setToTranslation (widthD, 0);
flipTrans.scale (-1.0, 1);
g2.transform (flipTrans);
}
super.paint(g);
}

Anonymous    Jun 01, 2008
Printed
Page 280
2nd paragraph, line 6

and leave
should be
and leaves

Anonymous    Jun 01, 2008
Printed
Page 280
2nd paragraph, line 6

and leave
should be
and leaves

Anonymous    Jun 01, 2016
Other Digital Version
280
2nd paragraph, line 6

and leave
should be
and leaves

Anonymous    Jun 01, 2008
Printed
Page 282
code sample; Hack 100 should be Hack 53

In example 7-8, should change:

JFrame frame = new JFrame("Hack 100: Anti-Aliased text");

to:

JFrame frame = new JFrame("Hack 53: Anti-Aliased text");

This change should be made in the source download too.

Anonymous    Jun 01, 2008
Printed
Page 282
code sample; Hack 100 should be Hack 53

In example 7-8, should change:

JFrame frame = new JFrame("Hack 100: Anti-Aliased text");

to:

JFrame frame = new JFrame("Hack 53: Anti-Aliased text");

This change should be made in the source download too.

Anonymous    Jun 01, 2016
Other Digital Version
282
code sample; Hack 100 should be Hack 53

In example 7-8, should change:

JFrame frame = new JFrame("Hack 100: Anti-Aliased text");

to:

JFrame frame = new JFrame("Hack 53: Anti-Aliased text");

Anonymous    Jun 01, 2008
Printed
Page 286
2nd paragraph; first argument should be second argument

The wording is unclear. It should be 'and then call the main() entry point of the class passed
as the first argument after Wrapit.

Anonymous    Jun 01, 2008
Printed
Page 286
2nd paragraph; first argument should be second argument

The wording is unclear. It should be 'and then call the main() entry point of the class passed
as the first argument after Wrapit.

Anonymous    Jun 01, 2016
Other Digital Version
286
2nd paragraph; first argument should be second argument

The wording is unclear. It should be 'and then call the main() entry point of the class passed
as the first argument after Wrapit.

Anonymous    Jun 01, 2008
Printed
Page 289
3rd paragraph

mangnified
should be
magnified

Anonymous    Jun 01, 2008
Printed
Page 289
last paragraph; multiplying the zoom factor by the should be dividing the magnifying

component's height and width by the zoom factor

The reader is correct. It should be changed

Anonymous    Jun 01, 2008
Printed
Page 289
3rd paragraph

mangnified
should be
magnified

Anonymous    Jun 01, 2016
Printed
Page 289
last paragraph; multiplying the zoom factor by the should be dividing the magnifying

component's height and width by the zoom factor

The reader is correct. It should be changed

Anonymous    Jun 01, 2016
Other Digital Version
289
3rd paragraph

mangnified
should be
magnified

Anonymous    Jun 01, 2008
Other Digital Version
289
last paragraph

"Multiplying the zoom factor by the" should be "dividing the magnifying component's height and width by the zoom factor."

Anonymous    Jun 01, 2008
Printed
Page 290
3rd paragraph, last line; translate() should be translatePoint()

The reader is correct. It's translatePoint() in example 8-1, so the only thing wrong here is
the text.

Anonymous    Jun 01, 2008
Printed
Page 290
3rd paragraph, last line; translate() should be translatePoint()

The reader is correct. It's translatePoint() in example 8-1, so the only thing wrong here is
the text.

Anonymous    Jun 01, 2016
Other Digital Version
290
3rd paragraph, last line; translate() should be translatePoint()

The reader is correct. It's translatePoint() in example 8-1, so the only thing wrong here is
the text.

Anonymous    Jun 01, 2008
Printed
Page 297
last paragraph; The component still not clear -- change to: However, the component still

The reader is correct. It should be changed

Anonymous    Jun 01, 2008
Printed
Page 297
last paragraph; The component still not clear -- change to: However, the component still

The reader is correct. It should be changed

Anonymous    Jun 01, 2016
Other Digital Version
297
last paragraph; "The component still" is not clear -- change to: However, the component still

Anonymous    Jun 01, 2008
Printed
Page 309
Hack #62; Vector-Based: explain what vector-based means

I'm pretty sure the audience will know what a Vector is, but if we need to clarify we should
modify the last sentence of the first paragraph like this:

'opening the door for a completely vector drawn (meaning with shapes instead of images) Swing Look
and Feel'

Anonymous    Jun 01, 2008
Printed
Page 309
last paragraph; due to a DPI change: explain when a DPI change occurs

Change to 'due to a change in screen resolution, for example'

Anonymous    Jun 01, 2008
Printed
Page 309
Hack #62; Vector-Based: explain what vector-based means

I'm pretty sure the audience will know what a Vector is, but if we need to clarify we should
modify the last sentence of the first paragraph like this:

'opening the door for a completely vector drawn (meaning with shapes instead of images) Swing Look
and Feel'

Anonymous    Jun 01, 2016
Printed
Page 309
last paragraph; due to a DPI change: explain when a DPI change occurs

Change to 'due to a change in screen resolution, for example'

Anonymous    Jun 01, 2016
Other Digital Version
309
Hack #62; Vector-Based: explain what vector-based means

I'm pretty sure the audience will know what a Vector is, but if we need to clarify we should
modify the last sentence of the first paragraph like this:

'opening the door for a completely vector drawn (meaning with shapes instead of images) Swing Look
and Feel'

Anonymous    Jun 01, 2008
Other Digital Version
309
last paragraph; due to a DPI change: explain when a DPI change occurs

Change to 'due to a change in screen resolution, for example'

Anonymous    Jun 01, 2008
Printed
Page 315
under Hacking the Hack; SVG define the abbreviation

"...would be to use SVG (Scalable Vector Grahpics) files instead of..."

Anonymous    Jun 01, 2008
Printed
Page 315
under Hacking the Hack; SVG define the abbreviation

"...would be to use SVG (Scalable Vector Grahpics) files instead of..."

Anonymous    Jun 01, 2016
Other Digital Version
315
under Hacking the Hack; SVG define the abbreviation

"...would be to use SVG (Scalable Vector Graphics) files instead of..."

Anonymous    Jun 01, 2008
Printed
Page 319
1st paragraph; as a lightweight: as a heavyweight (?)

Changed "Indeed, as a lightweight component..." to "Indeed, as a heavyweight..."

Anonymous    Jun 01, 2008
Printed
Page 319
1st paragraph; as a lightweight: as a heavyweight (?)

Changed "Indeed, as a lightweight component..." to "Indeed, as a heavyweight..."

Anonymous    Jun 01, 2016
Other Digital Version
319
1st paragraph; as a lightweight: as a heavyweight (?)

Changed "Indeed, as a lightweight component..." to "Indeed, as a heavyweight..."

Anonymous    Jun 01, 2008
Printed
Page 361
1st paragraph

with an applet
should be
with applets
(because of the "they")

Anonymous    Jun 01, 2008
Printed
Page 361
1st paragraph

with an applet
should be
with applets
(because of the "they")

Anonymous    Jun 01, 2016
Other Digital Version
361
1st paragraph

with an applet
should be
with applets
(because of the "they")

Anonymous    Jun 01, 2008
Printed
Page 364
1st paragraph; AppletAudio should be AppletSound

"...and AppletAudio.class in their own..." has changed to "...and AppletSound.class in
their own..."

Anonymous    Jun 01, 2008
Printed
Page 364
1st paragraph; AppletAudio should be AppletSound

"...and AppletAudio.class in their own..." has changed to "...and AppletSound.class in
their own..."

Anonymous    Jun 01, 2016
Other Digital Version
364
1st paragraph; AppletAudio should be AppletSound

"...and AppletAudio.class in their own..." has changed to "...and AppletSound.class in
their own..."

Anonymous    Jun 01, 2008
Printed
Page 367
last paragraph; description: descriptor (as in the next line)

Changed "pass around description objects" to "pass around descriptor objects"

Anonymous    Jun 01, 2008
Printed
Page 367
last paragraph; description: descriptor (as in the next line)

Changed "pass around description objects" to "pass around descriptor objects"

Anonymous    Jun 01, 2016
Other Digital Version
367
last paragraph; description: descriptor (as in the next line)

Changed "pass around description objects" to "pass around descriptor objects"

Anonymous    Jun 01, 2008
Printed
Page 380
first code example

NOTE: On some JVMs, the default AudioInputStream will not support moving backwards and
forwards in the stream, so the call to reset() in the downloadable example will fail
with "mark/reset not supported". You can prevent this by ensuring the reset-ability
of your stream, which you do by creating the AudioInputStream from a
BufferedInputStream you set up.

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file);
->
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new
BufferedInputStream (new FileInputStream (file)));

########################################

Anonymous    Mar 01, 2007
Printed
Page 447
2nd code sample; loop through 100 times: delete

The reader is correct. It should be changed

Anonymous    Jun 01, 2008
Printed
Page 447
2nd code sample; loop through 100 times: delete

The reader is correct. It should be changed

Anonymous    Jun 01, 2016
Other Digital Version
447
2nd code sample

Delete "loop through 100 times"

Anonymous    Jun 01, 2008
Printed
Page 451
1st code block; move the mouse over 10 steps: delete

The reader is correct. It should be changed

Anonymous    Jun 01, 2008
Printed
Page 451
1st code block; move the mouse over 10 steps: delete

The reader is correct. It should be changed

Anonymous    Jun 01, 2016
Other Digital Version
451
1st code block

Delete "move the mouse over 10 steps"

Anonymous    Jun 01, 2008
Printed
Page 463
1st code block; (Runnable): delete. The cast is unnecessary

The reader is correct.

Changed:

loaderThread = new Thread ((Runnable) this);

to:

loaderThread = new Thread (this);

Anonymous    Jun 01, 2008
Printed
Page 463
1st code block; (Runnable): delete. The cast is unnecessary

The reader is correct.

Changed:

loaderThread = new Thread ((Runnable) this);

to:

loaderThread = new Thread (this);

Anonymous    Jun 01, 2016
Other Digital Version
463
1st code block; (Runnable): delete. The cast is unnecessary

The reader is correct.

Changed:

loaderThread = new Thread ((Runnable) this);

to:

loaderThread = new Thread (this);

Anonymous    Jun 01, 2008
Printed
Page 465
2nd paragraph; doRun: loadURL

Changed "In the doRun() implementation" to "In the loadURL() implementation"

Anonymous    Jun 01, 2008
Printed
Page 465
2nd paragraph; doRun: loadURL

Changed "In the doRun() implementation" to "In the loadURL() implementation"

Anonymous    Jun 01, 2016
Other Digital Version
465
2nd paragraph; doRun: loadURL

Changed "In the doRun() implementation" to "In the loadURL() implementation"

Anonymous    Jun 01, 2008
Printed
Page 489
1st line; Explain why the ACTION_EVENT.MASK

Add this sentence at the end of the paragraph. 'This is to include both action and mouse
events'

Anonymous    Jun 01, 2008
Printed
Page 489
1st line; Explain why the ACTION_EVENT.MASK

Add this sentence at the end of the paragraph. 'This is to include both action and mouse
events'

Anonymous    Jun 01, 2016
Other Digital Version
489
1st line; Explain why the ACTION_EVENT.MASK

Add this sentence at the end of the paragraph. 'This is to include both action and mouse
events'

Anonymous    Jun 01, 2008
Printed
Page 493
last paragraph; imbedded: embedded

The reader is correct. It should be changed.

Anonymous    Jun 01, 2008
Printed
Page 493
last paragraph; imbedded: embedded

The reader is correct. It should be changed.

Anonymous    Jun 01, 2016
Other Digital Version
493
last paragraph

Change imbedded to embedded

Anonymous    Jun 01, 2008