Here's part of my simple code where I can move rectangle on a frame. When I try to add button and text field on frame, these components are not visible or I can't see rectangle. I also tried adding them first on JPanel
and then adding panel on frame. Components were visible but rectangle wasn't. Any suggestions?
public class Buffer extends JPanel implements KeyListener,ActionListener{
public static JFrame frame;
public static JButton button;
public static JTextField field;
public int x;
public int y;
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(x,y,20,20);
}
public static void main(String args[]){
Buffer z=new Buffer();
frame=new JFrame();
button=new JButton();
field=new JTextField();
frame.setLayout(new BorderLayout());
button.setPreferredSize(new Dimension(20,20));
button.setText("XY");
button.addActionListener(z);
field.setPreferredSize(new Dimension(100,20));
field.setEditable(false);
frame.setSize(500,500);
frame.setVisible(true);
frame.setFocusable(true);
frame.addKeyListener(z);
frame.setTitle("TEST");
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x=x+10;
repaint();
}
}
public void actionPerformed(ActionEvent e){
field.setText("X- "+x+" Y- "+y);
frame.requestFocusInWindow();
}
}
}
JFrame
by default never to react to KeyEvent
, meaning frame.setFocusable(true);
have to setFocusable(true)
for JPanel
, then KeyEvents
from KeyListener
are firing an desired event(s)
don't to use KeyListener
for Swing JComponent
, use (most scallable, settable) KeyBindings
instead (for example)
use constant for BorderLayout, only one JComponent
can be visible, placed to the one of 5th. areas