Re: KeyListener
On Aug 18, 10:02 pm, Andrew Thompson <andrewh...@gmail.com> wrote:
On Aug 19, 6:57 pm, Bum...@gmail.com wrote:
I add JPanel to JFrame with setContentPane(panel) and KeyListener does
not work. If I do not write setContentPane(panel) then KeyListener
work normally. What is the reason?
Dragon.out.println( section.isFocusable() );
Report.out.println( sneaker.hasFocus() );
If that print out does not fix the determination for you,
you might try posting a SSCCE* of representing existence.
* <http://jackknife.org/sscce.html>
--
Alejandro McSlivinshttp://pickax.org/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
"For every fatal shooting, there were roughly three non-fatal
shootings. And, folks, this is unacceptable in America.
It's just unacceptable. And we're going to do something about it."
--- Adolph Bush,
Philadelphia, May 14, 2001
(Thanks to John Brooks.)
What Andrew is saying (in my opinion) is that only Component which has
focus right now does truly listen to key events.
Each Component listens differently and it, actually, has sense.
There is no "common" listener like frame.
I had added couple buttons to you example. One listens for F5 and
another for F6. If you click one of them (make them in focus) then
this particular one is listening. So, F5 will react for F5 and F6 for
F6. But when you click on F5 button and then click F6 key then nothing
happens because F5 listens for F5 key only.
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class Scratch {
public static void main(String[] ss) throws Exception {
EventQueue.invokeLater(new Runnable() {
public void run() {
final JFrame f = new JFrame("InputMapTest");
final Action a = new
AbstractAction("UNIQUE_ACTION_NAME") {
boolean dir = true;
public void actionPerformed(ActionEvent e) {
Component c = f.getContentPane();
dir ^= (c.getBackground().equals(Color.WHITE)
|| c
.getBackground().equals(Color.BLACK));
c.setBackground(dir ?
c.getBackground().darker() : c
.getBackground().brighter());
c.repaint();
}
};
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setPreferredSize(new Dimension(400, 400));
f.getRootPane().getInputMap().put(
KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0),
a.getValue(Action.NAME));
f.getRootPane().getActionMap().put(a.getValue(Action.NAME), a);
JButton button1=new JButton("F5");
button1.getInputMap().put(
KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0),
a.getValue(Action.NAME));
button1.getActionMap().put(a.getValue(Action.NAME),
a);
f.add(button1,BorderLayout.NORTH);
JButton button2=new JButton("F6");
button2.getInputMap().put(
KeyStroke.getKeyStroke(KeyEvent.VK_F6, 0),
a.getValue(Action.NAME));
button2.getActionMap().put(a.getValue(Action.NAME),
a);
f.add(button2,BorderLayout.SOUTH);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
So, you need Component in focus which changes color.
If you want any Component to change the color the you have to add such
listener for each Component.
If you have too many components then one possible solution would be to
constantly change focus to one component which has such listener
added.
Alex.
http://www.myjavaserver.com/~alexfromohio/