JTextField和JLabel没有出现

时间:2013-12-22 23:56:35

标签: java swing jpanel jlabel jtextfield

我的JLabel和JTextField没有出现在图像上方,我不知道为什么。我把图像放在JLabel和setOpaque(假)上,但没有运气。有什么建议?我在这里先向您的帮助表示感谢。

       private JTextField tf;
       private JLabel jl2;
       private JLabel jl3;

       public void window() {
           ImageIcon ic = new ImageIcon("hangman.png");
          JFrame gameFrame = new JFrame();
          JPanel jp = new JPanel();
          jp.setOpaque(false); //!!
          jp.setBorder(BorderFactory.createTitledBorder(""));
          JLabel img = new JLabel(ic, JLabel.CENTER);
          img.setOpaque(false);
          JLabel jl = new JLabel("Enter a Letter:");
          jl.setFont(new Font("Rockwell", Font.PLAIN, 20));
          tf = new JTextField(1);
          jl2 = new JLabel("Letters Used:    ");
          jl3 = new JLabel();//blank spaces
          tf.setFont(new Font("Rockwell", Font.PLAIN, 20));
          jl2.setFont(new Font("Rockwell", Font.PLAIN, 20));
          jp.add(jl);
          jp.add(tf);
          jp.add(jl2);
          jp.add(jl3);
          gameFrame.add(img);
          img.add(jp);
          gameFrame.setTitle("Hangman");
          gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          gameFrame.setIconImage(
          new ImageIcon("Hangman-Game-grey.png").getImage());
          gameFrame.setResizable(false);
          gameFrame.pack();
          gameFrame.setLocationRelativeTo(null);
          gameFrame.setVisible(true);

2 个答案:

答案 0 :(得分:1)

默认情况下,JLabel不使用布局管理器,因此添加到标签的组件不会被绘制。

尝试设置布局管理器。也许:

img.setLayout( new BorderLayout() );

或选择符合要求的布局。

答案 1 :(得分:1)

您应该分别将图像,标签和文本字段对象添加到面板。然后,您应该将该面板添加到您的框架中。另外,在调用gameFrame.add(img);方法之前放置jp.add()代码。我不知道,如果这是你想要的,但是根据你的尝试,我可以说下面的代码应该有效:

public void window()
        {
        ImageIcon ic = new ImageIcon("hangman.png");
        JFrame gameFrame = new JFrame();
        JPanel jp = new JPanel();
        jp.setOpaque(false); // !!
        jp.setBorder(BorderFactory.createTitledBorder(""));
        JLabel img = new JLabel(ic, JLabel.CENTER);
        img.setOpaque(false);
        JLabel jl = new JLabel("Enter a Letter:");
        jl.setFont(new Font("Rockwell", Font.PLAIN, 20));
        tf = new JTextField(1);
        jl2 = new JLabel("Letters Used:    ");
        jl3 = new JLabel();// blank spaces
        tf.setFont(new Font("Rockwell", Font.PLAIN, 20));
        jl2.setFont(new Font("Rockwell", Font.PLAIN, 20));
        jp.add(img);
        jp.add(jl);
        jp.add(tf);
        jp.add(jl2);
        jp.add(jl3);
        gameFrame.add(jp);
        gameFrame.setTitle("Hangman");
        gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameFrame.setIconImage(new ImageIcon("1.jpg").getImage());
        gameFrame.setResizable(false);
        gameFrame.pack();
        gameFrame.setLocationRelativeTo(null);
        gameFrame.setVisible(true);
        }