Object message?

B

bob smith

Can someone tell me why "message" is an Object here in javax.swing.JOptionPane?

Why isn't it a String?

showMessageDialog
public static void showMessageDialog(Component parentComponent,
Object message)
throws HeadlessException
Brings up an information-message dialog titled "Message".
 
A

Arne Vajhøj

Can someone tell me why "message" is an Object here in javax.swing.JOptionPane?

Why isn't it a String?

showMessageDialog
public static void showMessageDialog(Component parentComponent,
Object message)
throws HeadlessException
Brings up an information-message dialog titled "Message".

If you really want to know, then lookup the author in the
source and email him.

For a guess: they wanted to make it convenient for callers, so
they call toString instead of caller having to.

Arne
 
K

Knute Johnson

Can someone tell me why "message" is an Object here in javax.swing.JOptionPane?

Why isn't it a String?

showMessageDialog
public static void showMessageDialog(Component parentComponent,
Object message)
throws HeadlessException
Brings up an information-message dialog titled "Message".

import java.awt.*;
import javax.swing.*;

public class test8 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JLabel l = new JLabel("Because I'm an Object");
JOptionPane.showMessageDialog(null,l);
}
});
}
}
 
E

Eric Sosman

Can someone tell me why "message" is an Object here in javax.swing.JOptionPane?

Um, er, have you considered reading the class' Javadoc?

"A descriptive message to be placed in the dialog box.
In the most common usage, message is just a String or
String constant. However, the type of this parameter
is actually Object. Its interpretation depends on its
type: [...]"
Why isn't it a String?

So it can be something other than a String, of course.
 
R

Roedy Green

Can someone tell me why "message" is an Object here in javax.swing.JOptionP=
ane?

Why isn't it a String?

In general Object can let you pass any sort of information to
yourself, not just a string. It can be formatted data. The
disadvantage is you must cast it to a String.
 
D

Daniele Futtorovic

In general Object can let you pass any sort of information to
yourself, not just a string. It can be formatted data. The
disadvantage is you must cast it to a String.

Not quite, Roedy. Among other things, it can be any JComponent. And
that's extremely useful.
 
L

Lew

No, you mustn't, actually. That would defeat the purpose of the 'message' argument.
Not quite, Roedy. Among other things, it can be any JComponent. And
that's extremely useful.

The other things: an 'Icon', an array, a 'Component' (not just 'JComponent', per the docs),
and of course, any ol' 'Object' via its 'toString()'.

Also, in general you cannot cast a reference to 'String'. Reference casts must adhere to
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.5.1

You can use 'String' conversion or a transformation method.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.4
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#valueOf(java.lang.Object)
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()
et al.

As for the OP's question, IT'S IN THE JAVADOCS!

http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html

"message
"A descriptive message to be placed in the dialog box. In the most common usage, message is just a String or String constant. However, the type of this parameter is actually Object. Its interpretation depends on its type: ..."

Followed by an explanation of what it does for each type. So, no, you don't have to convert/transform the reference to a 'String', contrary to what was said upthread.

bob, you might not be aware of the full power of the Javadocs. The ones for 'JOptionPane' show a lot of
that power. It's got class-level documentation, which you should go ahead and read after all, field (static
constant) documentation, constructor documentation, method documentation, nested class
documentation, and of course, package documentation through the 'javax.swing' package
documentation. It's also got hyperlinked documentation, some of which in Swing's case seems to
have gotten sparse and some of which is good.

Swing is a tricky package. First and foremost it's a UI-builder platform. I've used a bunch, such
as OpenLook, and quite often they are messy, but creatively and purposefully so. It's also an API.
This means it speaks in two domains of discourse. Types in an API have members, but that's a
different "containment" than a UI component exercises over another. The former is class
membership and the latter is geometric enclosure, sort of.

So the method could have had a bunch of overloads, one for each different 'message' type (not to
be confused with a 'messageType'), but that could lead to an explosion of methods, so they chose
to stick with 'Object' and presumably reflectively work its display magic. As a UI component it has
the luxury of time to examine its arguments, but you do lose the safety net of compile-time checks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top