2013-08-18 3 views
1

Я пишу программу, где есть JFrame с JPanel с графическим интерфейсом для входа. После успешного входа в систему вызывается метод, который очищает JFrame. Проблема, с которой я сталкиваюсь, заключается в том, что вместо очистки JFrame материал в JPanel все еще заметно там, и он просто заморожен.Не может Ясно JFrame

Метод, который создает для входа в графический интерфейс:

public void logingui() { 

    JPanel loginpanel = new JPanel(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 0; 
    c.gridy = 0; 
    c.gridwidth = 2; 
    JLabel gamename = new JLabel("InvestGame By Ama291"); 
    gamename.setFont(new Font("Arial", 1, 22)); 
    loginpanel.add(gamename, c); 
    c.ipady = 20; 
    c.gridx = 0; 
    c.gridy = 1; 
    loginpanel.add(new JPanel(), c); 
    c.ipady = 10; 
    c.gridwidth = 1; 
    c.gridx = 0; 
    c.gridy = 2;   
    loginpanel.add(new JLabel("Username: "), c); 
    c.gridx = 1; 
    final JTextField userfield = new JTextField(10); 
    loginpanel.add(userfield, c); 
    c.gridx = 0; 
    c.gridy = 3; 
    loginpanel.add(new JPanel(), c); 
    c.gridx = 0; 
    c.gridy = 4; 
    loginpanel.add(new JLabel("Password: "), c); 
    c.gridx = 1; 
    final JPasswordField passfield = new JPasswordField(10); 
    loginpanel.add(passfield, c); 
    c.gridx = 0; 
    c.gridy = 5; 
    c.ipady = 20; 
    loginpanel.add(new JPanel(), c); 
    c.ipady = 10; 
    c.gridx = 0; 
    c.gridy = 6; 
    c.gridwidth = 1; 
    JButton createacc = new JButton("Create Account"); 
    loginpanel.add(createacc, c); 
    c.gridx = 1; 
    JButton login = new JButton("Log In"); 
    loginpanel.add(login, c); 
    add(loginpanel); 
} 

метод очистить JFrame:

public void gamegui() { 

    JPanel gamepanel = new JPanel(); 
    removeAll(); 
    invalidate(); 
    validate(); 
    repaint(); 
    add(gamepanel); 
} 

Кто-нибудь знает, как я могу успешно удалить JPanel из JFrame без кнопок и прочее от JPanel заморожен внутри окна? Это вопрос, который у меня есть.

+0

Обратите внимание на CardLayout, для такого рода проблем, как уже было сказано. Для [example] (http://stackoverflow.com/a/9349137/1057230) :-) –

+0

Пользуясь CardLayout для чего-то еще в моей программе, спасибо, что показал мне, как его использовать. – ama291

ответ

2

Для входа в систему, наверное, лучше использовать всплывающее окно JDialog. Затем, когда диалог закрывается, вы просто показываете панель на кадре.

Другой вариант заключается в использовании Card Layout. При необходимости вы можете менять панели.

+0

Я собираюсь использовать JDialog, это упростит ситуацию. У меня нет большого опыта с качелями и даже не знал, что он существует. Большое спасибо за предложение! – ama291

+0

Итак, я действительно исправил свою проблему, выполнив setVisible (false); перед удалением старого JPanel и добавлением нового JPanel. Затем я установил видимость в true после того, как это было сделано, и теперь оно отлично работает. Тем не менее, я решил, что я буду использовать JDialog, потому что он в основном будет иметь такую ​​же функцию и мне будет легче. – ama291

0

, если вы будете просто добавить

this.setLayout(your layout) 

// раскладку = макет, который вы используете. то есть границы, карты и т.д ..

между Invalidate() и проверки() в своем коде в gamegui().

Я надеюсь, что будет работать. Я не пытался, но надеюсь, что это сработает.

1

При удалении компонентов из JFrame, компонент будет удален, но он будет визуально все еще будет там. Поэтому, чтобы скрыть или обновить JFrame, используйте метод .setVisible (false).

+0

Привет, друг! Да, это решение, которое я искал, но вы ответили на него слишком поздно, я больше не работаю над этим проектом. – ama291

+1

Не удалось, не проверял дату – user3161084