2016-05-08 3 views
1

Я пытаюсь использовать следующий класс как ракетку для простой pinpong игрJLabel не отображается в рамке

public class Racket extends JLabel{ 
     int up, down; 
     int x, y; 

     public Racket(int up, int down, int x, int y){ 
      this.setBackground(Color.BLACK); 
      this.setForeground(Color.BLACK); 
      this.up = up; 
      this.down = down; 
      this.x = x; 
      this.y = y; 
      setLocation(x,y); 
      setOpaque(true); 
     } 
    } 

Когда я добавляю ракетку к основной раме с помощью

p1 = new Racket(KeyEvent.VK_W, KeyEvent.VK_S, 0, (windowSize.height/2)-10); 
window.add(p1); 

в ракетка не появляется, может ли кто-нибудь указать, что случилось?

Контейнер только простой JFrame, без менеджера компоновки

window = new JFrame("Ping Pong"); 
window.setSize(500, 500); 
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
window.setLayout(null); 
+0

Нет необходимости в переменных x/y. Просто используйте метод setLocation() напрямую, когда вы хотите изменить расположение ракетки. – camickr

ответ

2

И ваша проблема:

window.setLayout(null); 

При использовании null раскладки вы полностью ответственны за полный макет, включая размер и расположение всех добавленных компонентов, а также в вашем коде, когда вы устанавливаете местоположение JLabel, вы не устанавливаете размер. Правильное решение - не устанавливать его размер, а избегать использования нужных макетов. Хотя нулевые макеты и setBounds() могут показаться новичкам Swing, как самый простой и лучший способ создания сложных графических интерфейсов, чем больше Swing GUI вы создадите более серьезные трудности, с которыми вы столкнетесь при их использовании. Они не будут изменять размеры ваших компонентов при изменении размера графического интерфейса, они являются королевской ведьмой для улучшения или поддержки, они полностью не выполняются при размещении в scrollpanes, они выглядят ужасно ужасно при просмотре на всех платформах или разрешениях экрана, отличных от исходного ,

+0

Так как это для игры «пинг-понг», которая имеет случайное движение ракетки (вверх и вниз). У меня нет проблемы с использованием нулевого макета. Но вам нужно установить размер вашей ракетки в конструкторе с помощью метода 'setSize()'. – camickr

+0

Это действительно была проблема, большое спасибо за помощь! – gabevt

 Смежные вопросы

  • Нет связанных вопросов^_^