Кіріспе
Java-ға негізделген GUI құрал жиынтығы
Swing – Java-ға арналған GUI виджеттерінің құрал жиынтығы. Ол Oracle-дың Java Foundation Classes (JFC) құрамына кіреді – Java бағдарламалары үшін графикалық пайдаланушы интерфейсін (GUI) ұсынуға арналған API. Swing бұрынғы Abstract Window Toolkit (AWT) қарағанда графикалық интерфейс компоненттерінің кеңейтілген жиынтығын ұсыну үшін әзірленді. Swing бірнеше платформалардың сыртқы түрін және сезімін имитациялайтын сыртқы түр мен сезімді қамтамасыз етеді, сонымен қатар қолданбаларға негізгі платформаға байланысты емес сыртқы түр мен сезімге ие болуға мүмкіндік беретін қосылатын сыртқы түрді қолдайды. Оның AWT-ға қарағанда күшті және икемді компоненттері бар. Батырмалар, тексеру тізімдері және жапсырмалар сияқты таныс компоненттерден басқа, Swing бірнеше кеңейтілген компоненттерді ұсынады, мысалы, табулы панель, прокрутка панелі, ағаштар, кестелер және тізімдер. AWT компоненттерінен айырмашылығы, Swing компоненттері платформаға тән кодпен іске асырылмайды. Керісінше, олар толығымен Java тілінде жазылған, сондықтан платформаға тәуелсіз. 2008 жылдың желтоқсан айында Sun Microsystems (Oracle-дың алдыңғы компаниясы) Swing-тің ізбасары болуы тиіс деп жоспарлаған CSS / FXML негізіндегі JavaFX деп аталатын құрылымды шығарды.
Тарих
Internet Foundation Classes (IFC) – бастапқыда Netscape Communications Corporation әзірлеген және алғаш рет 1996 жылғы 16 желтоқсанда жарияланған Java графикалық кітапханасы. 1997 жылғы 2 сәуірде Sun Microsystems және Netscape Communications Corporation компаниялары Java Foundation Classes құру үшін IFC-ді басқа технологиялармен біріктіру ниеті туралы хабарлады. "Java Foundation Classes" кейін "Swing" деп аталды. Swing бағдарламалық кодқа елеулі өзгерістер енгізбей, қолданбаның әрбір компонентінің сыртқы түрін өзгертуге мүмкіндік беретін механизмді ұсынды. Плагиндік сыртқы түрін қолдау Swing компоненттеріне платформадан тәуелсіздікті сақтай отырып, жүйелік компоненттердің сыртқы түрін имитациялауға мүмкіндік берді. Бастапқыда жеке жүктеліп алынатын кітапхана ретінде таратылған Swing, 1.2 нұсқасынан бастап Java Standard Edition құрамына енді. Swing кластары мен компоненттері пакеттік иерархияда орналасқан. Swing-тің ізбасары JavaFX-тің әзірленуі 2005 жылы басталды және екі жылдан кейін JavaOne 2007 конференциясында ресми түрде таныстырылды. JavaFX 2011 жылы ашық кодты болды және 2012 жылы Oracle JDK жүктемесінің бөлігіне кірді. JavaFX бірнеше артықшылықтарының арқасында Swing-ті алмастыруда, оның ішінде жеңілдігі, CSS стильдеуі, тартымды дизайндық басқару элементтері және FXML мен Scene Builder-ді пайдалану. 2018 жылы JavaFX оның даму қарқынын арттыру мақсатында OpenJFX жобасы аясында OpenJDK құрамына енгізілді. Swing-ке жауапты Java Client командасының құрамына Джеймс Гослинг (архитектор), Рик Левенсон (менеджер), Эми Фаулер және Ханс Мюллер (техникалық жетекшілер), Том Болл, Джефф Динкинс, Жорж Сааб, Тим Принзинг, Джонни Канерва және Жаннет Хунг пен Джим Грэм (2D Графика) кірді.
Сәулет
Swing – Java үшін платформаға тәуелсіз, "модель-көрініс-бақылаушы" (model–view–controller) GUI фреймворкі, бір жіпті бағдарламалау үлгісін қолданады. Бұған қоса, бұл фреймворк код құрылымы мен Swing негізіндегі GUI-дың графикалық бейнеленуі арасында абстракция деңгейін қамтамасыз етеді.
Негізгі құралдар
Swing платформаға тәуелсіз, себебі ол толығымен Java тілінде жазылған. Барлық Swing кластарына қатысты толық құжаттаманы Java API нұсқасы 6-ға арналған нұсқаулықта немесе Java Platform Standard Edition 8 API нұсқасы 8-ге арналған сипаттамалық құжаттарда табуға болады.
Ұзартылатын
Swing - бұл жоғары модульдік архитектура, ол белгілі бір фреймворк интерфейстерінің әртүрлі бейімделген іске асырылуларын "қосуға" мүмкіндік береді: Пайдаланушылар Java мұрагерлік механизмін пайдаланып, әдепкі іске асырылуларды жою үшін осы компоненттердің өз бейімделген нұсқаларын ұсына алады. Swing - компоненттік фреймворк, оның барлық компоненттері ақыр соңында классдан туындайды. Swing объектілері асинхронды түрде оқиғаларды тудырады, байланысты қасиеттері бар және компонентке тән әдістердің құжатталған жиынтығына жауап береді. Swing компоненттері JavaBeans спецификациясына сәйкес келетін JavaBeans компоненттері болып табылады.
Swing is a component based framework, whose components are all ultimately derived from the class. Swing objects asynchronously fire events, have bound properties, and respond to a documented set of methods specific to the component. Swing components are JavaBeans components, compliant with the JavaBeans specification.
Конфигурацияланатын
Swing-тің орындалу уақытындағы механизмдерге және жанама құрастыру үлгілеріне үлкен тәуелділігі, оның параметрлеріндегі маңызды өзгерістерге орындалу кезінде жауап беруге мүмкіндік береді. Мысалы, Swing-ге негіделген қосымша орындалу барысында пайдаланушы интерфейсін «қыздырып ауыстыруға» (hot swapping) қабілетті. Бұдан әрі, пайдаланушылар өздерінің көрініс және сезім стилін ұсына алады, бұл бағдарламалық кодты өзгертпей-ақ, қолданыстағы Swing қосымшаларының көрінісі мен сезімін біркелкі өзгертуге мүмкіндік береді.
Жеңіл UI
Swing-тің жоғары деңгейдегі икемділігі, өзін көрсету үшін жергілікті хост операциялық жүйенің (OS) GUI басқаруын жобау мүмкіндігінде көрінеді. Swing, жергілікті пайдаланушы интерфейсі құрал жиынтығын шақырудың орнына, Java 2D API-ді пайдаланып өзінің басқару элементтерін "салады". Осылайша, Swing компонентіне сәйкес келетін туынды OS GUI компоненті болмайды және ол өзінің графикалық интерфейсінің мүмкіндіктері шегінде кез келген тәсілмен еркін көрсетіледі. Дегенмен, Swing компонентінің негізінде AWT контейнері жатыр, себебі Swing, AWT контейнерін кеңейтеді. Бұл Swing-ке хост операциялық жүйенің GUI басқару аясына интеграциялануға мүмкіндік береді, соның ішінде маңызды құрылғы/экран сәйкестіктері мен пайдаланушының әрекеттері, мысалы, пернелерді басу немесе тышқанды жылжыту сияқтылар. Swing, өзінің (OS-ке тәуелсіз) семантикасын негізгі (OS-ке тән) компоненттерге "ауыстырып" береді. Мысалы, әрбір Swing компоненті, компонент.paint() шақырылғанда графикалық құрылғыда өзінің бейнесін салады, бұл (AWT) контейнерінде анықталған. Бірақ AWT компоненттерінен айырмашылығы, олар кескінін OS-тің "салмақты" виджетіне жүктесе, Swing компоненттері өздерінің көрсетілуіне жауапты. Бұл ауыстыру және ажырату тек визуалды ғана емес, сонымен қатар Swing-тің өз OS-ке тәуелсіз семантикасын басқаруға және қолдануға, компоненттік иерархиясының ішінде туындаған оқиғалар үшін де қатысты. Жалпы айтқанда, Swing архитектурасы OS GUI семантикасының әртүрлі түрлерін қарапайым, бірақ жалпыланған үлгіге бейімдеу міндетін AWT контейнеріне жүктейді. Осы жалпыланған платформаға сүйене отырып, ол модель түрінде өзінің бай және күрделі GUI семантикасын құрады.
Ашық біріктірілген және MVC
Swing кітапханасы модель-көрініс-бақылаушы (Model-View-Controller) бағдарламалық жасақтама дизайны үлгісін кеңінен пайдаланады, ол қарастырылатын деректерді оны көретін пайдаланушы интерфейсі элементтерінен тұжырымдамалық тұрғыдан ажыратады. Осы себепті, көптеген Swing компоненттеріне сәйкес модельдер (Java интерфейстері арқылы анықталған) қоса беріледі, және бағдарламашылар әртүрлі әдепкі іске асыруларды пайдалана алады немесе өздерінің іске асыруларын ұсына алады. Жүйе барлық нақты компоненттер үшін модель интерфейстерінің әдепкі іске асыруларын қамтамасыз етеді. Swing фреймворкінің әдеттегі қолданылуы арнайы модельдерді жасауды қажет етпейді, себебі фреймворк Swing кітапханасындағы тиісті туынды класспен байланысты әдепкі іске асырулар жиынтығын ұсынады. Әдетте, тек күрделі компоненттер, мысалы кестелер, ағаштар және кейде тізімдер, қолданбаға тән дерек құрылымдары үшін арнайы модель іске асыруларын қажет етуі мүмкін. Swing архитектурасының әлеуетін жақсы түсіну үшін, кестелер мен тізімдер үшін арнайы модельдер DAO және/немесе EJB қызметтеріне орама ретінде болатын гипотетикалық жағдайды қарастырайық. Әдетте, Swing компонентінің модель объектілері оқиғаларды анықтайтын ықшам интерфейсті және байланысты JComponent пайдалану үшін (тұжырымдамалық) дерек моделіне қолжетімді қасиеттерді ұсыну үшін жауапты. Жалпы MVC үлгісі бос байланысты, ынтымақтаса жұмыс істейтін объект қатынасы үлгісі болғандықтан, модель дерек моделі объектісіне оқиға тыңдаушыларын тіркеу үшін бағдарламалық құралдарды ұсынады. Әдетте, бұл оқиғалар модельге бағытталған (мысалы, кесте моделінде "қатар қосылды" оқиғасы) және JComponent мамандануы арқылы GUI компоненті үшін мағыналы оқиғаға түрлендіріледі. Мысалы, кестелік деректерге қалай қол жеткізуге болатынын сипаттайтын деп аталатын модель бар. Бұл әдепкі іске асыру екі өлшемді массивпен жұмыс істейді. Swing JComponent-тің көрініс компоненті – бұл тұжырымдамалық GUI элементін графикалық түрде көрсету үшін қолданылатын объект. Swing-тің GUI фреймворкі ретіндегі ерекшелігі – оның программалық түрде көрсетілген GUI элементтеріне сенуі (туған хост опералық жүйенің GUI элементтерін пайдаланудан айырмашылығы). Java 6 Update 10-ға дейін, бұл айырмашылық GUI-де AWT элементтерін Swing элементтерімен араластыру кезінде қиындықтар тудыратын (AWT және Swing компоненттерін араластыру қараңыз). Соңында, визуальды құрастыру және басқару тұрғысынан алғанда, Swing абсолюттік орналастыруларға (компоненттердің нақты орналасуын және мөлшерін анықтайтын) қарағанда салыстырмалы орналастыруларды (компоненттер арасындағы позициялық қатынастарды анықтайтын) ұнатады. "Икемді" визуальды реттелуге бейімділігі түпнұсқа Java GUI құрал жиынтығының дизайны мен дамуын құрастырған апплеттік операциялық ортада пайда болды. (Тұжырымдамалық тұрғыдан алғанда, орналасуды басқаруға осы көзқарас браузерлерде HTML мазмұнын көрсетуді қамтамасыз етуге ұқсас және бұрынғысын тудырған уайымдардың бірдей жиынтығын қарастырады.)
АВТ-мен қарым-қатынасы
Java-ның алғашқы нұсқаларынан бері, Abstract Window Toolkit (AWT) құралының бір бөлігі пайдаланушы интерфейсі компоненттері үшін платформаға тәуелсіз API-лерді ұсынды. AWT-да әрбір компонент негізгі терезе жүйесіне тән, туалас компонент арқылы көрсетіліп, басқарылады. Керісінше, Swing компоненттері көбінесе жеңіл деп сипатталады, себебі олар операциялық жүйенің терезелік құрал жиынтығында туалас ресурстарды бөлуді қажет етпейді. AWT компоненттері ауыр компоненттер деп аталады. Swing API-нің көп бөлігі AWT-нің тікелей алмастырылуының орнына, оның толықтыратын кеңейтімі болып табылады. Шындығында, әрбір Swing жеңіл интерфейсі ақырында AWT ауыр компонентінің ішінде орналасады, өйткені Swing-тегі (, , және ) барлық жоғарғы деңгейдегі компоненттер AWT жоғарғы деңгейдегі контейнерді кеңейтеді. Java 6 Update 10 нұсқасына дейін, бір терезеде жеңіл және ауыр компоненттерді бірге қолдану Z-реттілік үйлесімсіздіктеріне байланысты ұсынылмайтын еді. Бірақ, Java-ның кейінгі нұсқалары бұл мәселелерді шешті, және Swing және AWT компоненттерін енді бір GUI-де Z-реттілік проблемаларынсыз қолдануға болады. Swing-тің жеңіл компоненттерін салу үшін қолданылатын негізгі рендерлеу мүмкіндігі Java 2D арқылы қамтамасыз етіледі, ол JFC-нің тағы бір бөлігі.
SWT-мен қарым-қатынасы
Standard Widget Toolkit (SWT) – бастапқыда IBM әзірлеген, қазір Eclipse қауымдастығы қолдайтын бәсекелес құралдар жиынтығы. SWT-нің іске асырылуы AWT-ның ауыр салмақты компоненттерімен көбірек байланысты. Бұл, бағдарламалау моделіндегі түпкілікті платформаға ұшыраудың артуымен бірге, негізгі терезе жиынтығымен жоғары дәлдікке ие болу сияқты артықшылықтарды береді. SWT-ның Swing-ке қарағандағы өнімділігі туралы көп пікірталастар мен болжамдар болды; кейбіреулер SWT-ның JNI-ге күшті тәуелділігі GUI компоненті мен Java арасында дерек алмасу кезінде баяулауға, бірақ дерек моделі GUI-ге жүктелгеннен кейін көрсету жылдамдығын арттыруға әкелуі мүмкін деп болжады, бірақ бұл екі жақтан да расталмады. 2005 жылы жүргізілген жан-жақты зерттеулер Swing пен SWT ешқайсысы да жалпы жағдайда айқын артықшылыққа ие емес екенін көрсетті.