Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #1472
| From | "Jeff Higgins" <jeff.higgins@THRWHITE.remove-dii-this> |
|---|---|
| Subject | Re: How to detect focus l |
| Message-ID | <F_cVh.24$7W2.18@newsfe06.lga> (permalink) |
| Newsgroups | comp.lang.java.gui |
| References | <46248ce3$0$19256$da0feed9@news.zen.co.uk> |
| Date | 2011-04-27 15:33 +0000 |
| Organization | TDS.net |
To: comp.lang.java.gui
Ian Wilson wrote:
> clearlight@cantv.net wrote:
>> Hi,
>>
>> I am new to Java. As a basic learning project, I started writing a no-
>> frill small general ledger application.
>>
>> The basic design is a Frame containing a menu and a JTabbedPanel. When
>> a menu option is selected, a component derived from JPanel containing
>> the graphical interface for the data entry of the selected option is
>> created, added to the JTabbedPane component and the corresponding Tab
>> is selected.
>>
>> Inside any of this panels, there are JTextFields that have to be
>> validated (via InputVerifiers).
>>
>> Now, if focus is inside any of this JTextFields, and I select a new
>> option from the frame's menu, validation shouldn't be fired.
>>
>> So far, I have tried to add a FocusListener to the JPanel descendents,
>> but it doesn't work as I expected: JPanel fires a focusLost event when
>> focus enters a JTextField contained within the panel itself, and fires
>> nothing when a menu option is selected.
>>
>> If I establish a dependency between the main JFrame and the contained
>> JPanel derivates, I might perhaps design a sort of bidirectional
>> notification protocol, but I would like to avoid any dependence that
>> can be avoided.
>>
>> So, is there a standard event that lets me know when the focus leaves
>> a JPanel (FocusListener doesn't work, because -at least in my
>> configuration: NetBeans 5.5, JDK 1.6, WinXP- it fires when a control
>> within the panel gains focus)?
>>
>
> I had a similar problem, an input panel with OK and Cancel buttons. If the
> user is editing a JTextField then clicks Cancel, you don't want the
> validation to kick in. I used this approach:
>
> cancelButton.setVerifyInputWhenFocusTarget(false);
>
> In your shoes I'd read the docs to see if
> .setVerifyInputWhenFocusTarget(false) can be applied to your JMenuItems
Strange, that JMenu, JMenuBar don't seem to honor
.setVerifyInputWhenFocusTarget(false)
I could only get your suggestion to work using:
f.getRootPane().setVerifyInputWhenFocusTarget(false);
as below. I don't know what implications that may hold.
What about pop-up context menus?
Thanks,
Jeff Higgins
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
public class TestFocus {
private static void createGUI() {
JFrame f = new JFrame();
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Test");
menu.setMnemonic(KeyEvent.VK_T);
menuBar.add(menu);
JTextField textFieldOne = new JTextField ();
textFieldOne.setInputVerifier(new TestVerifier());
JTextField textFieldTwo = new JTextField ("TextField2");
JButton button = new JButton("Test");
//menu.setVerifyInputWhenFocusTarget(false);
f.getRootPane().setVerifyInputWhenFocusTarget(false);
f.setJMenuBar(menuBar);
f.getContentPane().add (textFieldOne, BorderLayout.NORTH);
f.getContentPane().add (textFieldTwo, BorderLayout.CENTER);
f.getContentPane().add (button, BorderLayout.SOUTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
static class TestVerifier extends InputVerifier {
public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
System.out.println("verify");
return "pass".equals(tf.getText());
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
createGUI();
}
});
}
}
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24
Back to comp.lang.java.gui | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
How to detect focus lost "clearlight" <clearlight@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
Re: How to detect focus l "Ian Wilson" <ian.wilson@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
Re: How to detect focus l "Jeff Higgins" <jeff.higgins@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
Re: How to detect focus l "Jeff Higgins" <jeff.higgins@THRWHITE.remove-dii-this> - 2011-04-27 15:33 +0000
csiph-web