Компоненты исчезают после установки visable в false, а затем снова в true

#java #swing

#java #swing

Вопрос:

у меня есть эта программа с небольшим количеством настроек, и она должна выглядеть следующим образом:
http://img4.imageshack.us/img4/8527/programbillede.png (извините, не могу публиковать изображения ..)
и это загружается в main, а затем скрывается, а затем, когда я запускаю некоторые другие функции и пытаюсь показать это снова, тогда это выглядит так:
http://img696.imageshack.us/img696/6886/programbillede1.png (извините, не могу опубликовать изображения ..)
несколько кнопок, которые видны, потому что, когда вы наводите курсор мыши на это, вы можете видеть их, но вы никогда не сможете увидеть 3 метки… помогите .. 🙂

любые вопросы тогда задавайте .. 🙂

вот как я называю настройки.. Домен просто скрывает части главного меню.

 }else if(e.getActionCommand().equals("Indstillinger")){
        doMain(false);
        Exit.setVisible(true);
        Exit.setBounds(650, 135, 70, 20);
        returntomain.setVisible(true);
        settings.setvisable(true);
  

ops .. забыл настройки.setvisable выглядит следующим образом..

 public void setvisable(boolean doWhat){
    panel1.setVisible(doWhat);
    panel2.setVisible(doWhat);
    panel3.setVisible(doWhat);
}
  

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

 private Image tilfojbillede(int nr) throws IOException{
    String navn=("/Resources/" Indstillinger.BilledeMappe "/" (nr 1) ".png");
    return ImageIO.read(getClass().getResource(navn));
}
  

и настройки состоят из 3 панелей, сделанных подобным образом в конструкторе…

     panel1.setBounds(50, 150, 150, 200);
    panel1.setVisible(false);
    panel2.setBounds(200, 150, 150, 100);
    panel2.setVisible(false);
    panel3.setBounds(350, 150, 150, 200);
    panel3.setVisible(false);
  

и я вызываю эти 2 класса в моем main как глобальную функцию, подобную этой…

     public static Indstillinger settings= new Indstillinger();
    public static Spillet spillet= new Spillet();
  

я надеюсь, что вы, ребята, сможете помочь мне с этой информацией..

Комментарии:

1. Пожалуйста, опубликуйте SSCCE . В противном случае мы никак не сможем вам помочь.

2. Давайте посмотрим на часть кода-нарушителя. Постарайтесь сделать его как можно меньше, чтобы он 1) компилировался и 2) иллюстрировал проблему.

3. (Просто предположение) Попробуйте вызвать revalidate контейнер компонентов, видимость которых вы изменяете. Вам нужно вызывать revalidate всякий раз, когда вы вносите изменения в макет, и я думаю, что невидимые элементы имеют нулевой размер, так что это было бы изменением макета.

4. повторная проверка не сработала, просто попытался вызвать ее на всех 3 панелях.. не сработало .. к сожалению .. 🙂

5. ну, вы сказали контейнеры, то есть не 3 панели, а JFrame, но я не могу вызвать revalidate в main, как в this.revalidate в классе main, или я делаю что-то неправильно?

Ответ №1:

Вам нужно вызвать revalidate(); и, возможно repaint(); , также.

Комментарии:

1. я не могу это вызвать … я получаю сообщение об ошибке, если я вызываю это в main и если я вызываю это в своем классе настроек..