Каково различие между Swing и AWT?

У меня был аналогичный случай использования, когда я разбил входной файл на Hadoop HDFS на несколько файлов на основе ключа (1 файл на ключ). Вот мой scala-код для искры

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

val hadoopconf = new Configuration();
val fs = FileSystem.get(hadoopconf);

@serializable object processGroup {
    def apply(groupName:String, records:Iterable[String]): Unit = {
        val outFileStream = fs.create(new Path("/output_dir/"+groupName))
        for( line <- records ) {
                outFileStream.writeUTF(line+"\n")
            }
        outFileStream.close()
    }
}
val infile = sc.textFile("input_file")
val dateGrouped = infile.groupBy( _.split(",")(0))
dateGrouped.foreach( (x) => processGroup(x._1, x._2))

Я сгруппировал записи на основе ключа. Значения для каждого ключа записываются в отдельный файл.

214
задан Yves M. 20 November 2014 в 00:49
поделиться

4 ответа

AWT является интерфейсом Java к собственному системному коду GUI, существующему в Вашей ОС. Это не будет работать то же над каждой системой, хотя это пробует.

Swing более или менее GUI чистого Java. Это использует AWT для создания окна операционной системы и затем красит изображения кнопок, маркировок, текста, флажков, и т.д., в то окно и отвечает на все щелчки мышью, ключевые записи, и т.д., решая для себя, что сделать вместо того, чтобы позволить операционной системе обработать его. Таким образом Swing является 100%-м портативным устройством и является тем же через платформы (хотя это со сменными окнами и имеет "сменный стиль", который может заставить его посмотреть более или менее как то, как собственные окна и виджеты посмотрели бы).

Они - весьма разные подходы к инструментариям GUI и имеют много последствий. Полный ответ на Ваш вопрос попытался бы исследовать все те.:) Вот пара:

AWT является межплатформенным интерфейсом, поэтому даже при том, что он использует базовую ОС или собственный инструментарий GUI для его функциональности, он не обеспечивает доступ ко всему, что могут сделать те инструментарии. Усовершенствованные или более новые виджеты AWT, которые могли бы существовать на одной платформе, не могли бы поддерживаться на другом. Функции виджетов, которые не являются тем же на каждой платформе, не могли бы поддерживаться или хуже, они могли бы работать по-другому над каждой платформой. Люди раньше инвестировали большое усилие заставить их приложения AWT последовательно работать через платформы - например, они могут попытаться выполнить вызовы в собственный код от Java.

, поскольку AWT использует собственные виджеты GUI, Ваша ОС знает о них и дескрипторах, помещая их друг перед другом, и т.д., тогда как виджеты Swing являются бессмысленными пикселями в окне с точки зрения Вашей ОС. Сам Swing обрабатывает расположение и укладку Ваших виджетов. Смешивание AWT и Swing высоко не поддерживается и может привести к смешным результатам, таким как собственные кнопки, которые затеняют все остальное в диалоговом окне, в котором они находятся, потому что все остальное было создано с Swing.

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

Наконец, Вы могли бы также хотеть проверить SWT (инструментарий GUI, используемый для Eclipse и альтернативы и AWT и Swing), который является своего рода возвратом к идее AWT получить доступ к собственным Виджетам через Java.

227
ответ дан Nondeterministic narwhal 23 November 2019 в 04:26
поделиться

Основное различие, которое то, что уже все упомянули, - то, что каждый тяжелый вес и другой, легкий вес . Позвольте мне объяснить, в основном что термин, который означает тяжелый вес, - то, что при использовании awt компонентов собственный код, используемый для получения компонента представления , сгенерирован Операционной системой , вот почему он изменения стиля от ОС до ОС. , Где как в компонентах колебания это - ответственность JVM для генерации представления для компонентов. Другой оператор, который я видел, - то, что колебание является базирующимся MVC, и awt не.

34
ответ дан Access Denied 23 November 2019 в 04:26
поделиться

Swing по сравнению с AWT. В основном AWT был на первом месте и является рядом тяжелых компонентов UI (значение, что они - обертки для объектов операционной системы), тогда как Swing создал сверху AWT с более богатым набором легких компонентов.

Любой серьезный Java работа UI сделана в Swing не AWT, который, прежде всего, использовался для апплетов.

14
ответ дан cletus 23 November 2019 в 04:26
поделиться

As far as when AWT may be more useful than Swing -

  • you may be targeting an older JVM or platform that doesn't support Swing. This used to really come into play if you were building Applets - you wanted to target the lowest common denominator so people wouldn't have to install a newer Java plugin. I'm not sure what the current most widely installed version of the Java plugin is - this may be different today.
  • some people prefer the native look of AWT over Swing's 'not quite there' platform skins. (There are better 3rd party native looking skins than Swing's implementations BTW) Lots of people preferred using AWT's FileDialog over Swing's FileChooser because it gave the platform file dialog most people were used to rather than the 'weird' custom Swing one.
11
ответ дан 23 November 2019 в 04:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: