2013-12-22 4 views
0

Мои JLabel и JTextField не отображаются поверх изображения, и я не уверен, почему. Я поставил изображение на JLabel и setOpaque (false), но не повезло. Любой совет? Спасибо за помощь заранее.JTextField и JLabel не отображаются

 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); 
+0

Для лучшей помощи раньше, опубликовать [SSCCE] (HTTP: // sscce .org /). –

ответ

1

JLabel по умолчанию не использует диспетчер компоновки, поэтому компоненты, добавленные к метке, не будут раскрашены.

Попробуйте настроить диспетчер компоновки. Возможно:

img.setLayout(new BorderLayout()); 

или выберите макет, соответствующий вашим требованиям.

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); 
     } 
Смежные вопросы