2017-01-20 2 views
-1

В настоящее время код скрывает только JLabel. Я не уверен, почему это не делает его видимым, когда я снова нажимаю кнопку. Надеюсь, это легко исправитьПоказать/скрыть JLabel с кнопкой?

 contentPane.add(btnSwap); 
    btnHide.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      lblHello.setVisible(false); 
     } 
    }); 
    contentPane.add(btnHide); 
    btnHide.setBounds(185, 199, 89, 23); 
    lblHello.setVisible(true); 

} 
+0

Вы не предоставили полный код, но я предлагаю убедиться, что вы перепроверить родителя 'объекта lblHello' поэтому его перекрасили, чтобы отразить изменения. – fabfas

ответ

4

Я не знаю, почему это не делает его видимым, когда я снова нажмите на кнопку.

Зачем это делать, поскольку все действия ActionListener (код, который вызывается при нажатии кнопки), постоянно устанавливают метку невидимой?

Решение состоит в том, чтобы просто переключить его видимость:

lblHello.setVisible(!lblHello.isVisible()); 

Обратите внимание, чтобы быть безопасным, лучше перепроверить и перекрашивать контейнера после внесения таких изменений, так:

btnHide.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     lblHello.setVisible(!lblHello.isVisible()); 
     revalidate(); 
     repaint(); 
    } 
}); 

как это избавит GUI от «грязных» пикселей, которые могут возникнуть в результате добавления, и особенно от удаления видимых компонентов.


Слово об этом:

btnHide.setBounds(185, 199, 89, 23); 

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


Еще одна рекомендация:

Если ваше желание изменить внешний вид графического интерфейса пользователя на кнопку печати, а затем также взглянуть на CardLayout (пожалуйста, проверьте CardLayout Tutorial), так как это может быть способ чисто и легко поменять взгляды


и лучше рекомендацию:

S осле JLabel только показывает его текст или его изображение или оба, лучший способ сделать это «невидимый», чтобы удалить его текст и его значок, как отмечает Эндрю Томпсон ниже:

// get rid of its text 
lblHello.setText(""); 

// and if needed 
lblHello.setIcon(null); 

Это не будет работать для текстовых компонентов, таких как JTextFields и JTextAreas, или других компонентов, которые имеют больше «heft», чем JLabel, включая почти все другие компоненты взаимодействия с пользователем.

+1

* «Если ваше желание изменить внешний вид графического интерфейса на кнопке нажмите, а также посмотрите на CardLayout», который кажется лучшим предложением для меня. Сказав это, другой способ (ОК, взломать), чтобы сделать ярлык, исчезнуть: 'label.setIcon (null); метка.setText (""); ' –

+1

@AndrewThompson: Сказал вам:« Конечно, вы абсолютно правы! » Сказал себе: «О, да!» –

+1

Я все же предпочитаю идею «CardLayout». Удаление текста или значка с метки может изменить положение других компонентов. Это свежо в моей памяти от «фиксации» ярлыка от перемещения других компонентов, когда текст был изменен, заменив его на текстовое поле, которое было настроено так, чтобы ** выглядеть как ярлык (о, мальчик, хаки толстые и быстро!). ;) –

2

Try:

btnChangeLabelVisibilityButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     lblHello.setVisible(!lblHello.isVisible()); 
    } 
}); 
Смежные вопросы