简体   繁体   English

无法添加JFrame和JTextField

[英]Cannot add JFrame and JTextField

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. 我还尝试首先在JPanel上添加它们,然后在框架上添加面板。 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); 默认情况下, JFrame永远不会对KeyEvent做出反应,这意味着frame.setFocusable(true);

  • have to setFocusable(true) for JPanel , then KeyEvents from KeyListener are firing an desired event(s) 必须为JPanel设置setFocusable(true) ,然后KeyListener KeyEvents将触发所需的事件


To add components to the frame you have to get the Container of the frame then you add the components to the container. 要向框架添加组件,您必须获取框架的Container,然后将组件添加到容器中。

for example a sample program 例如一个示例程序

import javax.swing.*;
import java.awt.*;

public class Test
{
JFrame f;
Container c;
JButton btn;
JTextField tf;
public Test() //constructor
{

f=new JFrame("Swah!");
f.setBounds(50,50,300,300); //position and dimension of frame

c=f.getContentPane();// getting container of the frame
c.setLayout(new FlowLayout()); //if you do not use layout then only one 
//component will be visible to you.

btn=new JButton("OK");
tf=new JTextField(20);

c.add(btn);
c.add(tf);

f.setVisible(true);
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
}

public static void main(String []val)
{
Test tobj=new Test();
}

}

you can use layouts according to you output, there are layouts like Flowlayout,GridLayout and GridBagLayout. 你可以根据你的输出使用布局,有像Flowlayout,GridLayout和GridBagLayout这样的布局。

Hope this help you. 希望这对你有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM