2015-05-29 2 views
2

Я добавляю JButton в свой подкласс класса JPanel, и если я изменяю текст или шрифт кнопки, объект Quiz исчезает, показывая только панель под ним , Однако, если я изменяю текст или шрифт перед добавлением кнопки, все работает нормально.JPanel исчезает при изменении добавляемого к нему текста JButton

setupGraphics() вызывается после того, как викторина добавляется к иерархии представлений

public void setupGraphics() { 
    this.setBackground(Color.red); 
    setLayout(null); 
    a.setBounds(20, 20, 200, 200); 
    add(a); 
    a.setText("Hi"); 
} 

Если изменить код следующим образом:

public void setupGraphics() { 
    this.setBackground(Color.red); 
    setLayout(null); 
    a.setBounds(20, 20, 200, 200); 
    a.setText("Hi"); 
    add(a); 
} 

затем он работает.

Любые идеи?

+3

Используйте соответствующий [LayoutManager] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html) – copeg

+1

Заказ не должен иметь значения, поскольку компоненты Swing достаточно умны, чтобы рисовать себя, когда свойство изменяется. Таким образом, проблема заключается в том, как вы вызываете этот метод. Отправьте надлежащий [SSCCE] (http://sscce.org/), который демонстрирует проблему. – camickr

+0

Java GUI должны работать с разными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

ответ

-1

добавить (a); a.setText («Привет»); -> вы добавляете кнопку на панель и затем устанавливаете текст. Это не отображение текста. Для второго вы устанавливаете текст и другие атрибуты и добавляете кнопку на панель.

+0

'вы добавляете кнопку на панель и затем устанавливаете текст. Это значит, что он не отображает текст. '- Не имеет значения, если вы установите текст после добавления кнопки на панель. Всякий раз, когда вы изменяете свойство компонента Swing, компонент будет ссылаться на revalidate() и repaint() на себя. – camickr

+0

жаль, что я пропустил упоминание о перекраске(). – Shriram

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

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