2013-04-23 4 views
2

У меня есть класс LMSPanel, который расширяет JPanel. Этот класс имеет два следующих методов:Невозможно удалить JLabel из JPanel после добавления программно

/** 
* A method to add an informative temporary label to the Panel until 
* the second Sensor is added. 
* 
* @param zoneid - The ID of the Zone. 
* @param sensorid - The ID of the Sensor. 
*/ 
public void justAddedLbl(String zoneid, String sensorid) 
{ 
    infoLbl = new JLabel("Sensor: " + zoneid + sensorid + " added. Please Add 2nd Sensor."); 
    add(infoLbl); 
    revalidate(); 
} 

/** 
* A method to remove the temporary informative label. 
* Only called when second sensor has been added. 
*/ 
public void removeInfoLbl() 
{ 
    remove(infoLbl); 
    revalidate(); 
} 

Метод добавления работает отлично, но когда я пытаюсь вызвать removeInfoLbl Метку остается и не уходит. Я пробовал repaint() и всевозможные комбинации, которые я нашел онлайн, и я до сих пор не могу удалить JLabel.

Что я делаю неправильно?

+3

Похоже, у вас есть справочные вопросы. При вызове 'justAddedLbl' вы создаете новый ярлык, а это значит, что если он вызывается более одного раза, вы будете иметь ссылку только на последнюю добавленную метку. Из фрагмента невозможно точно знать – MadProgrammer

+0

* «Невозможно удалить JLabel» * Почему бы просто не просто label.setText (""); '? –

+0

@MadProgrammer Это то, что я тоже думал, но каждый метод получает только один раз для каждого LMSPanel. Поэтому я сначала вызываю 'justAddedLbl()', затем я всегда вызываю 'removeInfoLbl()' сразу после. И 'infoLbl' является частным полем типа JLabel. – Ciwan

ответ

1

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

Если вы всегда собираетесь отображать только одну метку, почему бы не использовать setText(), как предложил Эндрю Томпсон.

+0

Не работает :(попробовал repaint и setText(). – Ciwan

+0

I буквально потерял мой разум над этим. Точный же код со вчерашнего дня, как предположил MadProgrammer, только разница в том, что я показывал другу проблему над TeamViewer и думаю, что это решило работать! Я предполагаю, что Eclipse и ПК нуждались в перезапуск? :/ – Ciwan

0
public void removeInfoLbl() 
    { 
    remove(infoLbl); 
    revalidate(); 
    repaint(); 
    SetVisible(true); 
} 

SetVisbile (истина), то это будет показывать текущий вид, который доступен .. Так что попробуйте это ..

+0

Вы действительно думаете, что весь «Контейнер» был невидим? Как бы он мог обнаружить, что 'JLabel' не был удален, когда' Container' невидим? – Robin

+0

Jlabel был удален, но контейнер еще раз показывает, что j ярлык много раз .. так что если мы снова используем Setvisble (true) .. он покажет текущий контейнер ... – karthi

+0

@Ciwan У вас есть ответ? – karthi

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