From: John B. Matthews on
In article <rSAon.88660$K81.21528(a)newsfe18.iad>,
Knute Johnson <nospam(a)rabbitbrush.frazmtn.com> wrote:

> On 3/18/2010 12:39 PM, John B. Matthews wrote:
> > In article<Fcton.11430$%H1.2477(a)newsfe23.iad>,
> > Knute Johnson<nospam(a)rabbitbrush.frazmtn.com> wrote:
> >
> >> On 3/18/2010 9:32 AM, Jim Janney wrote:
> >>> Thanks. That still doesn't work with a JComboBox, but that turns
> >>> out to be because nothing works with JComboBoxes, as is copiously
> >>> described in bug ID 4144505, where Sun says "yes we know, but
> >>> we're not going to fix it."
> >>> ...
> >>> We let our users change the L&F at runtime, so I need something
> >>> that works with that.
> >>
> >> Sure it does.
> >
> > [compelling example elided]
> >
> > It works well with Metal, Motif& Nimbus, but not the Mac OS UI
> > delegate, com.apple.laf.AquaComboBoxUI.
> >
>
> Is that the default for Mac?

com.apple.laf.AquaComboBoxUI is the UI delegate for JComboBox in
com.apple.laf.AquaLookAndFeel, the default Mac system L&F.

> Do tool tips work at all on Mac?

Yes. In fact, setting the L&F to any other available value allows your
example to run correctly on Mac OS X.

--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
From: Jim Janney on
Jim Janney <jjanney(a)shell.xmission.com> writes:

> Knute Johnson <nospam(a)rabbitbrush.frazmtn.com> writes:
>
>> On 3/18/2010 12:11 PM, Jim Janney wrote:
>>> Knute Johnson<nospam(a)rabbitbrush.frazmtn.com> writes:
>>>
>>>> From: Knute Johnson<nospam(a)rabbitbrush.frazmtn.com>
>>>> Subject: Re: dynamic tool tip text
>>>> Newsgroups: comp.lang.java.programmer
>>>> Date: Thu, 18 Mar 2010 10:16:51 -0700
>>>> Organization: NewsDemon
>>>>
>>>> On 3/18/2010 9:32 AM, Jim Janney wrote:
>>>>> Thanks. That still doesn't work with a JComboBox, but that turns out
>>>>> to be because nothing works with JComboBoxes, as is copiously
>>>>> described in bug ID 4144505, where Sun says "yes we know, but we're
>>>>> not going to fix it."
>>>>
>>>> Sure it does.
>>>>
>>>> import java.awt.*;
>>>> import java.awt.event.*;
>>>> import javax.swing.*;
>>>>
>>>> public class test extends JPanel {
>>>> String[] items = {"One","Two","Three","Four","Five"};
>>>>
>>>> public test() {
>>>> super(new GridBagLayout());
>>>>
>>>> setPreferredSize(new Dimension(400,300));
>>>>
>>>> JComboBox b = new JComboBox(items);
>>>> b.addMouseListener(new MouseAdapter() {
>>>> public void mouseEntered(MouseEvent me) {
>>>> JComponent c = (JComponent)me.getSource();
>>>> if (me.isAltDown())
>>>> c.setToolTipText("ALT is pressed");
>>>> else
>>>> c.setToolTipText("ALT isn't pressed!");
>>>>
>>>> }
>>>> });
>>>> add(b);
>>>> }
>>>>
>>>> public static void main(String[] args) {
>>>> EventQueue.invokeLater(new Runnable() {
>>>> public void run() {
>>>> JFrame f = new JFrame();
>>>> f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>>>> test t = new test();
>>>> f.add(t);
>>>> f.pack();
>>>> f.setVisible(true);
>>>> }
>>>> });
>>>> }
>>>> }
>>>
>>> More precisely, it works on the editor but not on the button.
>>>
>>> To be somewhat less unfair to Sun, I did find some discussion of this at
>>>
>>> http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html#listeners
>>
>> I tried this on Windows with 1.6.0_18. It works on both the box and
>> the arrow button. What OS and Java are you running?
>>
>
> Windows, java 1.6.something (I'm at home now, not at work). Try this:
> Press the alt key and move the mouse into the box. The tooltip will
> show "Alt is pressed". Now move the mouse back into the panel. With
> the alt key released, move it into the arrow button. On my system the
> tooltip shows "Alt is pressed", because there is no mouse listener on
> on the arrow button. If you run this in a debugger you can also try
> setting a breakpoint in the mouseEntered method.

The following code makes it work correctly in the L&Fs I've tried it with

JComboBox b = new JComboBox(items);
final MouseListener tooltipListener = new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent me) {
JComponent c = (JComponent)me.getSource();
if (me.isAltDown())
c.setToolTipText("ALT is pressed");
else
c.setToolTipText("ALT isn't pressed!");
}
};
b.addMouseListener(tooltipListener);
for (Component c : b.getComponents()) {
if (c instanceof JComponent) {
c.addMouseListener(tooltipListener);
}
}
b.addContainerListener(new ContainerAdapter() {
@Override
public void componentAdded(ContainerEvent event) {
if (event.getChild() instanceof JComponent) {
event.getChild().addMouseListener(tooltipListener);
}
}
});
add(b);


The ContainerListener is only needed if you change the L&F
dynamically: it adds the tooltip listener to the new UI components.

--
Jim Janney
From: Knute Johnson on
On 3/18/2010 11:36 PM, Jim Janney wrote:
> Knute Johnson<nospam(a)rabbitbrush.frazmtn.com> writes:
>
>> On 3/18/2010 12:11 PM, Jim Janney wrote:
>>> Knute Johnson<nospam(a)rabbitbrush.frazmtn.com> writes:
>>>
>>>> From: Knute Johnson<nospam(a)rabbitbrush.frazmtn.com>
>>>> Subject: Re: dynamic tool tip text
>>>> Newsgroups: comp.lang.java.programmer
>>>> Date: Thu, 18 Mar 2010 10:16:51 -0700
>>>> Organization: NewsDemon
>>>>
>>>> On 3/18/2010 9:32 AM, Jim Janney wrote:
>>>>> Thanks. That still doesn't work with a JComboBox, but that turns out
>>>>> to be because nothing works with JComboBoxes, as is copiously
>>>>> described in bug ID 4144505, where Sun says "yes we know, but we're
>>>>> not going to fix it."
>>>>
>>>> Sure it does.
>>>>
>>>> import java.awt.*;
>>>> import java.awt.event.*;
>>>> import javax.swing.*;
>>>>
>>>> public class test extends JPanel {
>>>> String[] items = {"One","Two","Three","Four","Five"};
>>>>
>>>> public test() {
>>>> super(new GridBagLayout());
>>>>
>>>> setPreferredSize(new Dimension(400,300));
>>>>
>>>> JComboBox b = new JComboBox(items);
>>>> b.addMouseListener(new MouseAdapter() {
>>>> public void mouseEntered(MouseEvent me) {
>>>> JComponent c = (JComponent)me.getSource();
>>>> if (me.isAltDown())
>>>> c.setToolTipText("ALT is pressed");
>>>> else
>>>> c.setToolTipText("ALT isn't pressed!");
>>>>
>>>> }
>>>> });
>>>> add(b);
>>>> }
>>>>
>>>> public static void main(String[] args) {
>>>> EventQueue.invokeLater(new Runnable() {
>>>> public void run() {
>>>> JFrame f = new JFrame();
>>>> f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>>>> test t = new test();
>>>> f.add(t);
>>>> f.pack();
>>>> f.setVisible(true);
>>>> }
>>>> });
>>>> }
>>>> }
>>>
>>> More precisely, it works on the editor but not on the button.
>>>
>>> To be somewhat less unfair to Sun, I did find some discussion of this at
>>>
>>> http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html#listeners
>>
>> I tried this on Windows with 1.6.0_18. It works on both the box and
>> the arrow button. What OS and Java are you running?
>>
>
> Windows, java 1.6.something (I'm at home now, not at work). Try this:
> Press the alt key and move the mouse into the box. The tooltip will
> show "Alt is pressed". Now move the mouse back into the panel. With
> the alt key released, move it into the arrow button. On my system the
> tooltip shows "Alt is pressed", because there is no mouse listener on
> on the arrow button. If you run this in a debugger you can also try
> setting a breakpoint in the mouseEntered method.
>

Even weirder (or is that more weirdly) if you start the program and
mouse the mouse over the button, no tool tip. Move the mouse over the
label part, move it off and then back over the button part it shows a
tool tip. I think you are correct, it is generally hosed.

--

Knute Johnson
email s/nospam/knute2010/

From: Knute Johnson on
On 3/19/2010 1:07 AM, John B. Matthews wrote:
> In article<rSAon.88660$K81.21528(a)newsfe18.iad>,
> Knute Johnson<nospam(a)rabbitbrush.frazmtn.com> wrote:
>
>> On 3/18/2010 12:39 PM, John B. Matthews wrote:
>>> In article<Fcton.11430$%H1.2477(a)newsfe23.iad>,
>>> Knute Johnson<nospam(a)rabbitbrush.frazmtn.com> wrote:
>>>
>>>> On 3/18/2010 9:32 AM, Jim Janney wrote:
>>>>> Thanks. That still doesn't work with a JComboBox, but that turns
>>>>> out to be because nothing works with JComboBoxes, as is copiously
>>>>> described in bug ID 4144505, where Sun says "yes we know, but
>>>>> we're not going to fix it."
>>>>> ...
>>>>> We let our users change the L&F at runtime, so I need something
>>>>> that works with that.
>>>>
>>>> Sure it does.
>>>
>>> [compelling example elided]
>>>
>>> It works well with Metal, Motif& Nimbus, but not the Mac OS UI
>>> delegate, com.apple.laf.AquaComboBoxUI.
>>>
>>
>> Is that the default for Mac?
>
> com.apple.laf.AquaComboBoxUI is the UI delegate for JComboBox in
> com.apple.laf.AquaLookAndFeel, the default Mac system L&F.
>
>> Do tool tips work at all on Mac?
>
> Yes. In fact, setting the L&F to any other available value allows your
> example to run correctly on Mac OS X.
>

Thanks John.

--

Knute Johnson
email s/nospam/knute2010/

From: John B. Matthews on
In article <2phbocyvru.fsf(a)shell.xmission.com>,
Jim Janney <jjanney(a)shell.xmission.com> wrote:

> The following code makes it work correctly in the L&Fs I've tried it with
>
> JComboBox b = new JComboBox(items);
> final MouseListener tooltipListener = new MouseAdapter() {
> @Override
> public void mouseEntered(MouseEvent me) {
> JComponent c = (JComponent)me.getSource();
> if (me.isAltDown())
> c.setToolTipText("ALT is pressed");
> else
> c.setToolTipText("ALT isn't pressed!");
> }
> };
> b.addMouseListener(tooltipListener);
> for (Component c : b.getComponents()) {
> if (c instanceof JComponent) {
> c.addMouseListener(tooltipListener);
> }
> }
> b.addContainerListener(new ContainerAdapter() {
> @Override
> public void componentAdded(ContainerEvent event) {
> if (event.getChild() instanceof JComponent) {
> event.getChild().addMouseListener(tooltipListener);
> }
> }
> });
> add(b);
>
>
> The ContainerListener is only needed if you change the L&F
> dynamically: it adds the tooltip listener to the new UI components.

Thank you for this followup; it works correctly on Mac OS X with all
supplied L&Fs.

--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>
First  |  Prev  | 
Pages: 1 2 3
Prev: Java Type System
Next: Evisu original jeans Wholesale