Подтвердить что ты не робот

Swing и AWT Mixing плохо, но все же сделано, почему?

Я заметил, что люди рекомендуют не смешивать Swing и AWT Components, однако мы видим это много:

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.ImageIcon;
 //AWT imports though only for listeners
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

Итак, почему многие из них включают Java (потому что я получил это от своего учебника здесь) все еще используют импорт AWT, хотя я вижу его главным образом для Listener s.

Как вы добавляете собственные Swing Listener s/Libraries для таких вещей, как Key, Button, JComboBox нажатия/отключения и т.д.?

Или я бы использовал firePropertyChangeListeners()? (хотя это относится к Java Beans)

Это запутало меня сейчас, в большинстве моих приложений есть Swing и AWT, которые, как говорят, плохие?

4b9b3361

Ответ 1

Swing имеет довольно много классов с AWT и использует некоторые из той же самой реализации - обратите внимание, что javax.swing.JComponent(базовый класс компонентов Swing) фактически наследует от java.awt.Component(базовый класс контейнера AWT)

На самом деле не так много проблем смешать Swing и AWT, если вы будете осторожны. Основные подводные камни:

  • Вы рискуете получить совсем другой внешний вид, если будете смешивать компоненты AWT и Swing UI.
  • Компоненты Swing являются "легкими" (визуализируются Java), в то время как компоненты AWT являются "тяжеловесами" (реализованы как компоненты на платформе хоста) - это означает, что у вас возникнут проблемы, если вы добавите компоненты AWT в компоненты Swing (наоборот) хорошо)

Ответ 2

Swing построен поверх AWT с другой философией для создания и рисования компонентов пользовательского интерфейса. Смешение компонентов пользовательского интерфейса из двух фреймворков может привести к неожиданным результатам и, таким образом, обескураживает (поскольку состояния клепатра, это было исправлено). Однако Swing по-прежнему использует парадигму очереди событий AWT, включая слушателей - она ​​не заменяет их слушателями, родными Swing, потому что нет причин для этого.

Использование Swing и AWT для ваших приложений является обычной практикой, то, о чем вы предупреждали, использует компоненты Swing и AWT UI.

Ответ 3

Возможно, кто-то увидит это в будущем и все равно найдет его полезным. Есть список компонентов AWT и их замены Swing.