how keep visible ToolTip while mouse is over it? - java

Is there any way to keep a JToolTip visible while mouse is over the component who owns it, or the tooltip itself?

have you try using setToolTipText() method. Here btnNext is JButton.
btnNext.setToolTipText("Next");
ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);

Related

Custom JButton with JTextArea component inside

I extended JButton so it would fit my needs. I have one JTextArea and two JLabel components inside of my new class. The problem is, that I cannot click through JTextArea. So, when mouse is in JTextArea bounds, the button is not responding. There is no problem with labels.
As on screen. There are four buttons. Each one is a separate yellowish rectangle. When mouse is over JTextArea's gray rectangle, I cannot press the button. I need JTextArea because it supports multiple lines. Is there any option to make it not intercept the mouse?
It would be ok if I could attach ActionListener to JTextArea, but I can't. It cannot have this kind of listener.
You look to be trying to use a JButton in a very non-button way, including having it hold a JTextArea, and not looking at all like a button. If you want a clickable area that is not an identifiable JButton, then consider using a MouseListener instead. You would likely have to add the same MouseListener to the container JPanel and the JTextArea.
Take a look at Concepts: Editors and Renderers to understand the difference between a renderer and an editor.
A renderer is a "rubber stamp" of the component, it is simply "painted" onto the surface of the JTable and is not a real life component
You would need to implement a custom editor, which could translate the trigger event (in your case the MouseEvent) into a local context.
Take a look at TableCellEditor#isCellEdtiable which is probably the closest you will get to the source of the event which might trigger the cell to become editable.
JButton could be seeded with a HTML String (`"This is some text"), which would be capable of supporting multiple lines and line wrapping as well
Having said all that, you might want to seriously reconsider your design...

Is it Possible to Remove the Shadow on a JButton Icon?

My questing is pretty much already asked in the title. When you click a (Java Swing) JButton you get a type of hover effect or a "shadow" over the icon of the JButton. Is it possible to remove this shadow to make the button icon appear in the same way as it does when not clicked?
Thanks in advance!
You could call setRolloverIcon with the result of getIcon.
You can try button.setBorder(null); This will remove all of the graphics for the button and therefore the button will look the same whether it has been pressed or not.

How to simulate a clicking visual effect when clicking on a JLabel?

I have a JLabel (sorry I can't have a JButton) and a mouse listener to trap the click. All I need now is to simulate some kind of clicking visual effect/animation. This seems complicated because repaints are asynchronous. How do I go about doing that???
Use a MouseListener.
On mousePressed() you set a Border
On mouseReased() you reset the Border.

Customize JButton style

I'm working on a project. I want to add a toolbar to the software so I put some buttons in a panel . However the default button style doesn't meet my need. I want the button to have the following effects:
When the mouse doesn't hover over the button, the button should looks like a JLabel. The icon in the button just looks like an image on the panel, i.e. all we can see is the icon in the button and other things are transparent.
When the mouse hovers over the button, the button's border appears. It looks like a real button.
Example: Just like the buttons on the eclipse's toolbar.
Why not use a JToolbar instead of a JPanel?
I got it. The answer to my question is the setContentAreaFilled() method. When the mouse hovers over the button, call the setContentAreaFilled(true). Otherwise call the setContentAreaFilled(false). Here is a relative code: link text
So, you want to customize your JButton renderings ?
First, for an all-inclusive soluition, you can take a look at existing LnF like Substance (obviously, it's a far too powerful solution for your need, however it may give you some inspiration).
Then, if you want to solve that by yourself, you'll have to override the paintComponent method.
For that, the first move is to subclass JButton.
Then, in your subclass, start by redefining the paintComponent(Graphics) method.
Notice that if all that is overcomplicated to you, you can also take a look at setBorderPainted(boolean) method.
Extend JButton and:
Just add an Icon instead of Text to
the button.
Add MouseMotionListener to capture
hovering to show/hide border.

Swing make a JButton not focussable

I want to make a Java swing button 'not-focussable'.
The button should not receive focus at all, but should be able to receive mouse clicks.
I thought the following options, but these either dont solve my problem completely, or dont seem elegant. Are there any other/better/suggested options?
Move the focus to the next component immediately when the button receives focus (but then what do I do if the button is the only component on the UI other than labels?)
Implement another non-focusable component as a button (a label with mouse events, borders...) (this does not look very elegant to me)
Create a anonymous button implementation that overides the keyboard events so that it does not respond to keyboard events (this does not solve the focus problem, but is somwhat ok for me, since the root of the problem is to avoid accidental keyboard clicks. I will do this only if there are no options at all, but even then prefer option 2)
All Swing components have a setFocusable method to do this:
JButton button = ...
button.setFocusable(false);
Did you try to call the setFocusable() method inherited from java.awt.Component ?
Resources :
Javadoc - Component.isFocusable()
Oracle.com - Focus tutorial
You can implement your own FocusTraversalPolicy (or extend e.g. ContainerOrderFocusTraversalPolicy) with an accept method that just doesn't like your button.
JFrame frame = new JFrame();
... /* create other components */
frame.setFocusTraversalPolicy(new ContainerOrderFocusTraversalPolicy() {
public boolean accept(Component c) {
return super.accept(c) && c!=iDontLikeYouButton;
}
});

Categories