Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #5204
| From | Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> |
|---|---|
| Newsgroups | comp.lang.java.gui |
| Subject | Re: Passing KeyEvent upward |
| Date | 2012-07-25 00:32 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <jun7pv$um0$1@dont-email.me> (permalink) |
| References | <0f05834e-c654-4925-b78a-b8328b23ba0b@googlegroups.com> |
On 23/07/2012 01:09, Adam Beneschan allegedly wrote:
> Hi,
>
> I'm trying to learn how to program in Java and use some of the GUI features.. Here's something I'm trying to do but haven't succeeded at yet.
>
> I have a text window (JTextPane) object, and I want to set things up so that when a certain something happens, a popup menu (JPopupMenu) will come up. But I'd like it so that if the user presses a key, the key is handled just as if the menu hadn't come up--that is, the key-press event will be handled by the JTextPane (or is it the associated document?) as if the user had typed that key into the document. I've already set up a MenuKeyListener for the popup menu that recognizes the KeyEvent and calls menu.setVisible(false) to get rid of the menu. So far, so good. But I don't know how to get the KeyEvent propagated to the text window. I've tried getKeyListeners() on the JTextPane and then calling the keyTyped explicitly on each listener. No good--the only listener it found was one I had added myself for debugging. I also tried textPane.getInputContext().dispatchEvent(e) on the KeyEvent; that didn't do what I wanted either (seemed to have no effect).
>
> Any thoughts? I haven't found anything else to try.
>
> Thanks,
>
> -- Adam
The following appears to be working, although not necessarily optimal:
package scratch;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
public class ScratchUI {
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable(){
public void run(){
JFrame f = new JFrame("Gah");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea c = new Area();
c.setColumns(40);
c.setRows(10);
c.setBorder( BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(10,20,10,20),
BorderFactory.createTitledBorder("Type here:")
) );
f.getContentPane().add( c );
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
} );
}
static boolean isShowMenuEvent( KeyEvent e ){
return ! e.isConsumed()
&& e.getID() == KeyEvent.KEY_PRESSED
&& (e.getModifiers() == 0 || e.getModifiersEx() ==
KeyEvent.SHIFT_DOWN_MASK)
&& e.getKeyCode() == KeyEvent.VK_A
;
}
static final class Area
extends JTextArea
{
private JPopupMenu menu;
protected JPopupMenu createMenu(){
JPopupMenu ret = new JPopupMenu();
ret.add("Blah");
ret.add("Bleh");
ret.addSeparator();
ret.add("Uh.");
ret.setFocusable(false);
ret.setFocusTraversalKeysEnabled(false);
return ret;
}
private void toggleShowMenu( KeyEvent e ){
if( menu == null ){
menu = createMenu();
}
if( menu.isShowing() ){
menu.setVisible(false);
}
else {
//position??
menu.show(e.getComponent(), e.getComponent().getX() +
10, e.getComponent().getY() + 50);
}
}
@Override
protected void processKeyEvent( KeyEvent e ) {
if( isShowMenuEvent(e) ){
toggleShowMenu(e);
}
super.processKeyEvent(e);
}
}
}
HTH,
--
DF.
Back to comp.lang.java.gui | Previous | Next — Previous in thread | Find similar
Passing KeyEvent upward Adam Beneschan <adam@irvine.com> - 2012-07-22 16:09 -0700
Re: Passing KeyEvent upward markspace <-@.> - 2012-07-22 17:26 -0700
Re: Passing KeyEvent upward markspace <-@.> - 2012-07-22 17:39 -0700
Re: Passing KeyEvent upward Adam Beneschan <adam@irvine.com> - 2012-07-23 21:15 -0700
Re: Passing KeyEvent upward markspace <-@.> - 2012-07-23 23:08 -0700
Re: Passing KeyEvent upward "John B. Matthews" <nospam@nospam.invalid> - 2012-07-22 21:32 -0400
Re: Passing KeyEvent upward Roedy Green <see_website@mindprod.com.invalid> - 2012-07-23 23:46 -0700
Re: Passing KeyEvent upward Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2012-07-24 13:15 -0700
Re: Passing KeyEvent upward Adam Beneschan <adam@irvine.com> - 2012-07-24 21:08 -0700
Re: Passing KeyEvent upward markspace <-@.> - 2012-07-24 22:50 -0700
Re: Passing KeyEvent upward Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2012-07-25 00:32 +0200
csiph-web