Java графикийн сангууд. Java GUI Frameworks болон Миний анхны энгийн Swing GUI програмын товч тойм

Ингээд Амьдралын тоглоомын логик хэрэгжиж байна. Би дэлгэцийнхээ дэлгэцэн дээр "Амьдрал"-ын олон янзын хэлбэрийг эргэцүүлэн бодох үйл явцаас таашаал авахыг хүсч байна. Үүнд юу хэрэгтэй вэ?

Цэс, товчлуур бүхий цонхыг өөрөө, түүнчлэн түүний зан төлөвийг номын санг ашиглан үүсгэх болно Савлуур.Номын сангаар дамжуулан бидний "Амьдрал" -ын хувьслын үйл явцыг зурах A.W.T.(илүү нарийвчлалтай, Java 2D). Эдгээр нь Java дээр GUI үүсгэх үндсэн хоёр багц юм.

AWT-ийн ажил нь эхлээд үе тэнгийн интерфейс гэж нэрлэгддэг интерфейс дээр суурилдаг. Хамгийн гол нь хэрэв Java объектыг дэлгэцэн дээр харуулах шаардлагатай бол үйлдлийн систем нь түүнд зориулж хосолсон график объектыг үүсгэдэг бөгөөд энэ нь үнэндээ харагдана. Програм ажиллаж байх үед эдгээр хоёр объект хоорондоо харилцан үйлчилдэг. Энэхүү хэрэгжилт нь платформ бүр өөрийн JDK-г гаргах ёстой болоход хүргэдэг.

Хожим нь AWT нь үе тэнгийн интерфейсийг ашигладаггүй бүрэлдэхүүн хэсгүүдийг бүтээсэн - "хөнгөн" (хөнгөн) бүрэлдэхүүн хэсгүүд. Эдгээр бүрэлдэхүүн хэсгүүдийн номын санг Swing гэж нэрлэсэн. Өөрөөр хэлбэл, Swing бол үнэндээ AWT-ийн өргөтгөл юм.

AWT нь өөрөө шинэ зураг зурах, дүрс харуулах хэрэгслээр нэмэгджээ Java 2D.

Би Swing-ийн үндсэн элементүүдийг товч тайлбартайгаар жагсаах болно.

Бүхэл бүтэн Swing харааны бүрэлдэхүүн номын сангийн үндсэн барилгын материал юм JComponent. Энэ бол бүрэлдэхүүн хэсэг бүрийн супер ангилал юм. Энэ бол хийсвэр анги тул та JComponent-ийг үнэхээр үүсгэж чадахгүй ч ангийн шатлалын үр дүнд Swing бүрэлдэхүүн хэсэг бүр ашиглаж болох хэдэн зуун функцийг агуулна.

jFrame(хэрэглээний цонх) - өөр бүрэлдэхүүн хэсгүүдийг зохион байгуулах, хэрэглэгчдэд өгөхийн тулд өөртөө нэмэх боломжийг олгодог үндсэн сав. JFrame нь үйлдлийн системээс хамааралгүй Swing хэсгүүд болон тэдгээрийн ажиллаж буй бодит үйлдлийн системүүдийн хооронд гүүр болж ажилладаг. JFrame нь үйлдлийн системтэй цонхоор бүртгэгдсэн тул цонхны олон танил шинж чанарыг олж авдаг. үйлдлийн систем.

JMenu/JMenuItem/JMenuBar- JFrame дээр цэсийн системийг хөгжүүлэх зорилготой. Аливаа цэсийн системийн үндэс нь JMenuBar бөгөөд JMenu болон JMenuItem бүрийг түүгээр үүсгэнэ. JMenu нь JMenuItem-ийн дэд ангилал юм. Гэсэн хэдий ч тэдгээр нь гадаад төрхөөрөө ялгаатай: JMenu нь бусад JMenuItem болон JMenu-г агуулахад ашиглагддаг; JMenuItem нь сонгосон үед үйлдлийг идэвхжүүлдэг.

JLabel(шошго) - бусад элементүүдийг (текст эсвэл график) тодорхойлоход ашигладаг.

jButton(товчлуур) - дарагдсан үед зарим үйлдэл хийх боломжийг олгодог үндсэн идэвхтэй бүрэлдэхүүн хэсэг. Бүрэлдэхүүн хэсгийн дэлгэцийг хянадаг стандарт аргуудаас гадна түүний төлөвийг удирдах хэд хэдэн аргуудыг агуулдаг (идэвхтэй / идэвхгүй, сонгосон / сонгогдоогүй, хулганыг дээш / хулганагүй, дарсан / сулласан).

JTextField(текст талбар) - хэрэглэгч програмд ​​боловсруулж болох текст өгөгдлийг оруулах боломжийг олгодог.

JTextArea JTextField-г өргөтгөж, олон мөр оруулах боломжтой.

JPasswordField(нууц үгийн талбар) - оруулсан тэмдэгтүүдийг нуух боломжийг олгодог JTextField-ийн төрөл.

JComboBox(нийлмэл жагсаалт) - Хэрэглэгчид одоо байгаа жагсаалтаас нэг зүйлийг сонгох (эсвэл жагсаалтад шинэ зүйл нэмэх) боломжийг олгоно.

JCheckBox(шалгах нүд) ба JRadioButton(радио товчлуур) - Хэрэглэгчийн сонгох сонголтыг өгнө. JRadioButtons нь хэрэглэгчдэд албадан хариулт өгөхийн тулд ихэвчлэн бүлэглэгддэг (хариултууд нь бие биенээ үгүйсгэдэг - нэг асуултанд зөвхөн нэг хариулт байж болно). Та JRadioButton-г сонгосны дараа бүлгээс өөр сонголтыг сонгох хүртэл тэмдэглэгээг арилгах боломжгүй. JCheckBox өөрөөр ажилладаг. Энэ нь танд хүссэн үедээ сонголтоо шалгах/хасах, асуулт бүрт олон хариулт сонгох боломжийг олгоно. JCheckBox эсвэл JRadioButton бүрэлдэхүүн хэсгүүдийг бүлэглэх боломжийг олгодог анги нь анги юм. Товчлуурын бүлэг.

JSlider— графикаар дүрслэгдсэн мужаас тоон утгыг сонгох элемент.

JSpinner-бүлэг утгуудаас сонгоход зориулагдсан. Энэ нь JComboBox-тай төстэй боловч тэдгээрийн хэрэглээг сольж болохгүй. Та JSpinner-ийг зөвхөн логик дараалсан сонголтуудад ашиглах хэрэгтэй - тоо, огноо нь үүнд тохиромжтой. Харин JComboBox нь илүү их юм сайн сонголтөөр хоорондоо ямар ч хамааралгүй санамсаргүй мэт санагдах хувилбаруудыг төлөөлөх.

JToolBarнь бусад бүрэлдэхүүн хэсгүүдийн (JButtons, JComboBoxes гэх мэт) савны үүрэг гүйцэтгэдэг бөгөөд эдгээр нь ихэнх програмуудад байдаг хэрэгслийн мөрүүдийг бүрдүүлдэг. Хэрэгслийн мөрүүд нь програмд ​​байнга хэрэглэгддэг командуудыг тохиромжтой газар байрлуулж, бүлэглэх боломжийг олгодог. Ихэвчлэн хэрэгслийн самбарын товчлуурууд нь цэсийн командуудтай тохирдог.

JToolTip- Эдгээр нь хулганын курсорыг ямар нэг зүйл дээр аваачиж барихад гарч ирдэг жижиг "бөмбөлөг" юм. Эдгээр нь элементүүдэд зориулсан зөвлөмж өгөх, дэлгэрэнгүй мэдээлэл өгөх, эсвэл бүр товч UI дээр элементийн бүрэн текстийг харуулах зэрэг програмуудад маш хэрэгтэй байж болно. Тэдгээр нь Swing-д хулганын курсорыг тодорхой хугацаанд бүрэлдэхүүн хэсэг дээр үлдээснээр идэвхждэг; Эдгээр нь ихэвчлэн хулгана зогссоноос хойш нэг секундын дараа гарч ирэх ба курсор бүрэлдэхүүн хэсэг дээр байх үед харагдах болно.

JOptionPane- UI хөгжүүлэгчдэд энгийн мессеж (алдаа эсвэл бусад мэдээллийн талаар) өгөх, өгөгдлийг хурдан хүлээн авах (жишээлбэл, нэр эсвэл дугаар) өгөх анги.

jscrollpane-Бүх гүйлгэх үйлдлийг зохицуулах Swing бүрэлдэхүүн хэсэг.

jlistнь хэрэглэгчдэд сонгох олон сонголтоор хангах ашигтай бүрэлдэхүүн хэсэг юм. Та үүнийг JComboBox өргөтгөл гэж ойлгож болно. JList нь илүү олон сонголтоор хангаж, олон сонголтыг сонгох боломжийг нэмдэг. JList болон JComboBox хоёрын хоорондох сонголт нь ихэвчлэн ийм байдаг: хэрэв танд олон сонголт хэрэгтэй эсвэл 15-аас дээш сонголт байгаа бол (энэ тоо нь ерөнхий дүрэм биш боловч) үргэлж JList-ийг сонгох хэрэгтэй. Та JList-ийг JScrollPane-тэй хамт ашиглах хэрэгтэй, учир нь энэ нь харагдахуйц хэсэгт багтахаас илүү олон сонголтыг өгөх боломжтой. JList-д бас сонгож болох загвар бий янз бүрийн төрөлсонголтуудын сонголт. Эдгээр төрлүүд нь: нэг сонголт (та зөвхөн нэг сонголтыг сонгож болно), нэг интервал (та хэдэн ч гэсэн зэргэлдээх сонголтуудыг сонгож болно), олон интервал (та дурын хослолд дурын тооны сонголтыг сонгож болно).

Java хэл дээрх график интерфэйс нь хөгжил, үүсэх маш хэцүү замыг туулсан. Удаан хугацааны турш түүнийг удаан ажилласан, системийн нөөцөд шунасан, хязгаарлагдмал ажиллагаатай гэж буруутгаж байсан.

Java AWT

Sun Java-д зориулсан GUI-ийн анхны оролдлого нь номын сан байв A.W.T.(Abstract Window Toolkit) - янз бүрийн цонхны орчинтой ажиллах хэрэгсэл. Sun нь C хэл дээр бичигдсэн номын сангаас аргуудыг дууддаг Java давхарга хийсэн. AWT номын сангийн аргууд нь үйлдлийн орчны график бүрэлдэхүүн хэсгүүдийг үүсгэж ашигладаг. Нэг талаараа энэ нь сайн хэрэг, учир нь Java програм нь ижил үйлдлийн систем дэх бусад програмуудтай төстэй юм. Гэхдээ үүнийг өөр платформ дээр ажиллуулах үед бүрэлдэхүүн хэсгүүдийн хэмжээ, фонтуудын ялгаа гарч болзошгүй бөгөөд энэ нь муудах болно. Гадаад төрххөтөлбөрүүд.

Олон платформыг хангахын тулд A.W.T.Бүрэлдэхүүн хэсгүүдийн дуудлагын интерфэйсүүдийг нэгтгэсэн тул функцийг бага зэрэг бууруулсан. Мөн бүрэлдэхүүн хэсгүүдийн багц нь нэлээд бага болсон. Жишээлбэл, AWT-д хүснэгт байхгүй, товчлуурууд дээр дүрсийг дэмждэггүй. Гэсэн хэдий ч багц java.awtЭхний хувилбараасаа л Java-д орсон бөгөөд GUI үүсгэхэд ашиглаж болно.

Тиймээс бүрэлдэхүүн хэсгүүд A.W.T."ажил" бүү хий. Энэ бол зүгээр л тэдний ажиллаж байгаа үйлдлийн системийн удирдлагад зориулсан "Java боодол" юм. Эдгээр бүрэлдэхүүн хэсгүүдийн бүх хүсэлтийг үйлдлийн систем рүү шилжүүлдэг бөгөөд энэ нь бүх ажлыг гүйцэтгэдэг.

Ашигласан нөөц A.W.T.автоматаар гаргахыг оролддог. Энэ нь архитектурыг бага зэрэг хүндрүүлж, гүйцэтгэлд нөлөөлдөг. AWT ашиглан ноцтой зүйл бичих нь зарим талаараа хэцүү байх болно. Одоо энэ нь зөвхөн апплетуудад ашиглагддаг.

SWING-ийн үндсэн ойлголтууд

Дараа нь A.W.T. Sun нь график бүрэлдэхүүн хэсгүүдийн номын санг боловсруулсан Савлуур, бүхэлдээ Java хэл дээр бичигдсэн. 2D дүрсийг үзүүлэхэд ашигладаг бөгөөд энэ нь нэгэн зэрэг хэд хэдэн давуу талыг авчирдаг. Стандарт бүрэлдэхүүн хэсгүүдийн багц нь олон янз байдал, функциональ байдлын хувьд AWT-ээс хол давсан. Swing нь одоо байгаа хэсгүүдээс өвлөн шинэ бүрэлдэхүүн хэсгүүдийг бий болгоход хялбар болгож, янз бүрийн загвар, арьсыг дэмждэг.

Шинэ UI номын сангийн бүтээгчид СавлуурТэд "дугуйг дахин зохион бүтээгээгүй" бөгөөд номын сангийнхаа үндэс болгон AWT-ийг сонгосон. Мэдээжийн хэрэг, бид тодорхой хүнд жинтэй AWT бүрэлдэхүүн хэсгүүдийг (Товчлуур, Шошго болон үүнтэй төстэй ангиудаар төлөөлдөг) ашиглах тухай яриагүй. Зөвхөн хөнгөн бүрэлдэхүүн хэсгүүд нь шаардлагатай уян хатан байдал, хяналтыг хангаж өгдөг. Өв залгамжлалын диаграмм нь AWT болон Swing-ийн хоорондын хамаарлыг харуулж байна.

Хамгийн чухал ялгаа Савлуур AWT-аас харахад Swing бүрэлдэхүүн хэсгүүд нь үйлдлийн системд огт холбогдоогүй тул илүү тогтвортой, хурдан байдаг. Java хэл дээр ийм бүрэлдэхүүн хэсгүүдийг хөнгөн жинтэй гэж нэрлэдэг бөгөөд тэдгээрийн ажиллах үндсэн зарчмуудыг ойлгох нь Swing хэрхэн ажилладагийг тайлбарлахад ихээхэн тус болно.

Дээд түвшний савлуур

Үүсгэхийн тулд GUIпрограмууд нь дээд түвшний контейнер гэж нэрлэгддэг Swing номын сангийн тусгай бүрэлдэхүүн хэсгүүдийг ашиглах шаардлагатай. Эдгээр нь хэрэглэгчийн интерфейсийн бүрэлдэхүүн хэсгүүдийг агуулсан үйлдлийн системийн цонхнууд юм. Дээд түвшний контейнерууд нь JFrame болон JWindow цонх, JDialog харилцах цонх, JApplet апплет (энэ нь цонх биш боловч энэ апплетыг ажиллуулж буй хөтөч дээр интерфэйсийг харуулах зорилготой) багтана. Дээд түвшний дүүжин савнууд нь хүнд жинтэй бүрэлдэхүүн хэсгүүд бөгөөд ерөнхий дүрмээс үл хамаарах зүйл юм. Бусад бүх Swing бүрэлдэхүүн хэсгүүд нь хөнгөн жинтэй.

Энгийн Савлуурцонхны интерфейсийн жишээ jFrame.

java.awt.Dimension импортлох; javax.swing.JFrame импортлох; javax.swing.JLabel импортлох; нийтийн анги JFrameTest ( public static void createGUI() ( JFrame frame = new JFrame("Test frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Test label"); frame.getContentPane(). add(label); frame.setPreferredSize(new Dimension(200, 100)); frame.pack(); frame.setVisible(true); ) public static void main(String args) ( JFrame.setDefaultLookAndFeelDecorated(true); javax. swing.SwingUtilities.invokeLater(шинэ Runnable() ( нийтийн хүчингүй ажиллуулах() ( createGUI(); ) )); ) )

Барилгачин JFrame()параметргүй бол хоосон цонх үүсгэдэг. Барилгачин JFrame(Мөрийн гарчиг)гарчигтай хоосон цонх үүсгэдэг. Хоосон цонхтой энгийн програм үүсгэхийн тулд та дараах аргуудыг ашиглах хэрэгтэй.

  • setSize(int width, int height) - цонхны хэмжээг тодорхойлох;
  • setDefaultCloseOperation(int operation) - програмыг зогсоох үйлдлийн тодорхойлолт;
  • setVisible(boolean visible) - цонхыг харагдуулна.

Хэрэв та цонхны хэмжээг тодорхойлоогүй бол дотор нь юу байгаагаас үл хамааран энэ нь тэг өндөртэй байх болно. Цонхны хэмжээсүүд нь зөвхөн "ажлын" талбараас гадна хил хязгаар, гарчгийн мөрийг агуулдаг.

setDefaultCloseOperation арга нь "програмаас гарах" үед хийх үйлдлийг тодорхойлдог. Үүнийг хийхийн тулд JFrame ангид тодорхойлсон EXIT_ON_CLOSE тогтмолыг үйлдлийн параметр болгон дамжуулна.

Анхдагч байдлаар, цонхыг үл үзэгдэх байдлаар үүсгэдэг. Цонхыг дэлгэцэн дээр харуулахын тулд setVisible аргыг true параметрээр дууддаг. Хэрэв та үүнийг хуурамч параметрээр дуудвал цонх үл үзэгдэх болно.

GUI java савлуурцонх үүсгэх жишээ jFrameдараах зурагт үзүүлэв.

Номын санг холбохын тулд Савлуурпрограм нь номын санг импортлох шаардлагатай javax.swing.

Энгийн цонх, харилцах цонх эсвэл апплет байхаас үл хамааран дээд түвшний контейнер үүсгэх бүрд контейнерын бүтээгч үүнийг үүсгэдэг. JRootPane үндэс самбар. Дээд түвшний дүүжин савнууд нь бусад бүрэлдэхүүн хэсгүүд нь JRootPane-ээс гадуур "мөлхөж" чадахгүй байхыг баталгаажуулдаг.

Үндэс цайвар JRootPaneсаванд "гүн" шинж чанарыг нэмж, бүрэлдэхүүн хэсгүүдийг нэг нэгээр нь байрлуулахаас гадна шаардлагатай бол тэдгээрийг солих, бүрэлдэхүүн хэсгүүдийн гүнийг нэмэгдүүлэх, багасгах боломжийг олгодог. Энэ функц нь олон баримт бичгийн програм үүсгэхэд зайлшгүй шаардлагатай. Савлуур, цонхнууд нь бие биенийхээ дээр давхарласан хөнгөн бүрэлдэхүүн хэсгүүд, мөн унждаг (контекст) цэсүүд болон зөвлөмжүүдийг төлөөлдөг.

Дараах зураг нь эх хавтангийн бүтцийг тодорхой харуулж байна JRootPane.

Үндэс самбар JRootPaneнь үндсэн Swing JComponent ангиас удамшсан контейнер юм. Энэ контейнерт дотоод RootPaneLayout ангид хэрэгжсэн тусгай зохион байгуулалтын менежер бүрэлдэхүүн хэсгүүдийн байршлыг хариуцдаг. Энэхүү зохион байгуулалтын менежер нь үндсэн хавтангийн бүх бүрэлдэхүүн хэсгүүдийг байх ёстой байдлаар нь байрлуулах үүрэгтэй: давхаргат самбар нь цонхны бүхэл бүтэн зайг эзэлдэг; түүний FRAME_CONTENT_LAYER нь цэсийн хэсэг болон агуулгын самбарыг агуулдаг бөгөөд үүнээс илүү нь ил тод самбар юм.

Үндсэн самбарын бүх бүрэлдэхүүн хэсэг JRootPaneавах эсвэл өөрчлөх боломжтой. Үүнд авах/тогтоох аргууд байдаг. Програмчлалын хувьд JRootPane getRootPane() аргыг ашиглан авч болно.

Дээд түвшний контейнеруудаас гадна эх самбарыг олон баримт бичгийн программ дээр үүсгэсэн, JDesktopPane "ширээний" дээр байрлах дотоод JInternalFrame цонхонд ашигладаг. Энэ нь эдгээр цонхнууд нь энгийн хөнгөн эд анги гэдгийг мартаж, тэдэнтэй жинхэнэ дээд түвшний сав шиг ажиллах боломжийг олгоно.

Давхаргатай самбар JLayeredPane

Үндэс хавтангийн суурь (сав) дээр давхаргат хавтан гэж нэрлэгддэг JLayeredPaneСаванд байгаа бүх зайг эзэлдэг A. Энэ самбарт үндсэн самбарын бусад бүх хэсгүүд, түүний дотор хэрэглэгчийн интерфейсийн бүх бүрэлдэхүүн хэсгүүд байрладаг.

JLayeredPaneсаванд гүнийн шинж чанарыг нэмэхэд ашигладаг. Өөрөөр хэлбэл, олон давхаргат самбар нь бүрэлдэхүүн хэсгийн давхаргууд (давхаргууд) байрладаг саванд гурав дахь хэмжээсийг зохион байгуулах боломжийг олгодог. Энгийн саванд бүрэлдэхүүн хэсгийн байрлалыг тухайн бүрэлдэхүүн хэсэг нь хэр их хэмжээний сав эзэлдэгийг харуулсан тэгш өнцөгтөөр тодорхойлно. Олон давхаргат самбарт бүрэлдэхүүн хэсэг нэмэхдээ зөвхөн бүрэлдэхүүн хэсэгт байрлах тэгш өнцөгтийг төдийгүй түүний байрлах давхаргыг зааж өгөх ёстой. Давхаргатай самбар дахь давхарга нь бүхэл тоогоор тодорхойлогддог. Давхаргыг тодорхойлох тоо их байх тусам давхарга өндөр байна.

Саванд нэмсэн эхний бүрэлдэхүүн хэсэг нь дараа нь нэмсэн бүрэлдэхүүн хэсгүүдээс өндөр байна. Ихэнх тохиолдолд хөгжүүлэгч нь бүрэлдэхүүн хэсгүүдийн байрлалтай харьцдаггүй. Бүрэлдэхүүн хэсгүүдийг нэмэхэд тэдгээрийн байрлал автоматаар өөрчлөгддөг. Гэсэн хэдий ч давхаргат самбар нь бүрэлдэхүүн хэсгүүдийн байрлалыг саванд нэмсний дараа динамикаар өөрчлөх боломжийг олгодог.

Давхаргатай хавтангийн чадавхийг зарим бүрэлдэхүүн хэсгүүд өргөнөөр ашигладаг Савлуур. Эдгээр нь олон баримт бичгийн програмууд, зөвлөмжүүд болон цэсүүдэд онцгой ач холбогдолтой юм. Олон баримт бичиг Савлуурпрограмууд нь тусгай савыг ашигладаг JDesktopPane("ширээний") -аас өвлөн авсан JLayeredPaneДотор дүүжин цонхнуудыг барьж байгаа A. Ихэнх чухал шинж чанаруудолон баримт бичгийн програм - "идэвхтэй" цонхны бусдаас дээгүүр байрлал, цонхыг багасгах, чирэх зэрэг нь олон давхаргат самбарын механизмаар хангагдсан байдаг. Хэрэгслийн зөвлөмж, цэсэнд давхаргат самбар ашиглахын гол давуу тал нь тэдгээрийн хурд юм. Хэрэгслийн зөвлөмж эсвэл цэсийг хүссэн бүрэлдэхүүн хэсгийн дээр байрлах шинэ хүнд жингийн цонх үүсгэхийн оронд, Савлуурхурдан хөнгөн бүрэлдэхүүн хэсгийг бий болгодог. Энэ бүрэлдэхүүн хэсэг нь бусад бүх бүрэлдэхүүн хэсгүүдийн стек дэх давхраатай самбарын хангалттай өндөр давхаргад байрлуулсан бөгөөд зөвлөмж эсвэл цэсийг харуулахад ашиглагддаг.

Олон давхаргат самбар нь хязгааргүй тооны давхаргыг зохион байгуулах боломжийг олгодог. Бүтэц JLayeredPaneЭнэ нь хэд хэдэн стандарт давхаргыг агуулдаг бөгөөд эдгээрийг бүх Swing бүрэлдэхүүн хэсгүүдэд ашигладаг бөгөөд энэ нь давхаргат хавтангийн бүх механизмыг зөв ажиллуулах боломжийг олгодог. Стандарт JLayeredPane давхаргыг дараах зурагт үзүүлэв.

Өгөгдмөл давхарга нь саванд нэмсэн бүх хэвийн бүрэлдэхүүн хэсгүүдийг байрлуулахад ашиглагддаг. Энэ давхарга нь олон баримт бичгийн хэрэглээний дотоод цонхыг агуулдаг.

Палетт давхарга нь ихэвчлэн бусад интерфейстэй давхцдаг олон хэрэгсэл бүхий цонхнуудыг байрлуулах зориулалттай. JDesktopPane самбар нь ийм цонхнуудыг үүсгэх боломжийг олгодог бөгөөд энэ давхарга дээр байрлуулдаг.

Modal давхарга нь хөнгөн жинтэй модаль харилцах цонхыг байрлуулах зорилготой байв. Гэсэн хэдий ч ийм харилцах цонхнууд хараахан хэрэгжээгүй байгаа тул энэ давхаргыг Swing-д одоогоор ашиглаагүй байна.

Попап цэс болон зөвлөмжийн хамгийн түгээмэл хэрэглэгддэг давхарга.

Хамгийн дээд давхарга. Хөтөлбөрийн интерфейс дээр тодорхой харагдах ёстой чирэх, буулгах үйлдлүүдэд зориулагдсан.

Давхаргатай самбар бүхий JLayeredPane-ийн жижиг жишээ нь өөр өөр давхаргад бүрэлдэхүүн хэсгүүдийг хэрхэн нэмэх, давхаргууд хэрхэн бие биенийхээ дээр давхарлаж байгааг харуулж байна.

javax.swing.* импортлох; java.awt.* импортлох; // текст ангитай хоёр төрлийн дүрс зурах анги Зураг өргөтгөл JComponent ( private static final long serialVersionUID = 1L; private; private Өнгөний өнгө; хувийн int төрөл; хувийн мөр текст; // параметрүүд: өнгө ба зургийн төрөл Зураг(Өнгөний өнгө, int төрөл, Мөр текст) ( this.color = өнгө; this.type = төрөл; this.text = text; setOpaque(false); ) public void paintComponent(Graphics g) ) ( // дүрс зурах g.setColor(color); шилжүүлэгч (төрөл) ( 0 тохиолдол: g.fillOval(0, 0, 90, 90); завсарлага; 1-р тохиолдол: g.fillRect(0, 0, 130, 80 ); break; ) g.setColor(Color.yellow); g.drawString(текст, 10, 35); ) ) нийтийн анги JLayeredPaneTest нь JFrame (хувийн статик эцсийн урт serialVersionUID = 1L; нийтийн JLayeredPaneTest() ( // үүсгэх) a window super("Жишээ нь LayeredTest"); // цонх хаагдах үед гарах setDefaultCloseOperation(EXIT_ON_CLOSE); // давхаргат самбарын тодорхойлолт JLayeredPane lp = getLayeredPane(); // гурван дүрс үүсгэх Зураг Зураг1 = шинэ Зураг(Color.red) , 0, "Зураг 2"); Зураг2 = шинэ Зураг(Өнгө.цэнхэр, 0, "Зураг 1"); Зураг3 = шинэ Зураг(Цэнхэр өнгөтэй, 1, "Зураг 2"); // дүрсүүдийг ол цонхонд figure1.setBounds (10, 40, 12 0.120); figure2.setBounds(60, 120, 160, 180); figure3.setBounds(90, 55, 250, 180); // өөр давхаргад дүрс нэмэх lp.add(figure1, JLayeredPane.POPUP_LAYER); lp.add(зураг2, JLayeredPane.PALETTE_LAYER); lp.add(зураг3, JLayeredPane.PALETTE_LAYER); // аль нэг дүрсийн байрлалыг өөрчлөх lp.setPosition(зураг3, 0); // хэмжээг тодорхойлж, цонхыг нээх setSize(280, 250); setVisible(үнэн); ) public static void main(String args) ( JFrame.setDefaultLookAndFeelDecorated(true); шинэ JLayeredPaneTest(); ) )

Жишээ нь жижиг цонх үүсгэдэг jFrameболон олон Зураг бүрэлдэхүүн хэсэг нь давхаргат самбар нэмэгдсэн байна. Ямар ч дээд түвшний Swing саванд давхаргат самбар авахын тулд аргыг дуудах хэрэгтэй getLayeredPane().

Figure туслагч анги нь JComponent үндсэн ангийн шинж чанарыг өвлөн авсан бөгөөд өөр өөр өнгөөр ​​хоёр төрлийн дүрс (тойрог ба тэгш өнцөгт) зурах боломжийг олгодог. Дүрс зурах параметрүүдийг анги үүсгэгч дээр тавьдаг.

Интерфейсийг тодорхойлохдоо өөр өөр өнгийн гурван дүрс (хоёр тойрог ба тэгш өнцөгт) үүсдэг. Тойрог POPUP_LAYER давхаргад, тэгш өнцөгтүүдийг PALETTE_LAYER давхаргад байрлуулна. Бүрэлдэхүүн хэсгүүдийг байрлуулахдаа тэдгээрийн үнэмлэхүй дэлгэцийн координатыг зааж өгдөг, учир нь ердийн байршлын менежерүүд давхаргат самбар дээр ажилладаггүй.

Төгсгөлд нь тэгш өнцөгтүүдийн аль нэгнийх нь байрлалыг өөрчилснөөр давхаргын эхнийх нь байх болно, гэхдээ энэ нь анх хоёр дахь нь нэмэгдсэн байна. Аппликешныг ажиллуулах үед давхаргат самбар ажиллаж, бүрэлдэхүүн хэсгүүдийг давхарга, байрлалын дагуу эмх цэгцтэй байрлуулж байгааг харах болно.

Уламжлалт хэрэглээнд давхаргат самбарыг шууд ашиглах нь ховор бөгөөд энэ нь түүний үүргийг үл үзэгдэх байдлаар гүйцэтгэдэг. Гэсэн хэдий ч заримдаа энэ нь гайхалтай эффект, ер бусын интерфейсийг бий болгоход тусалдаг бөгөөд жишээлбэл, хөгжүүлэгчээс хүнлэг бус хүчин чармайлт, заль мэхийг шаардахгүйгээр энгийн бүрэлдэхүүн хэсгүүдийн дээр хөдөлгөөнт дүрс эсвэл видео байрлуулах боломжийг олгодог.

ContentPane

ContentPane нь үндсэн самбарын дараагийн хэсэг бөгөөд програмын хэрэглэгчийн интерфейсийн бүрэлдэхүүн хэсгүүдийг байрлуулахад ашиглагддаг. ContentPaneдавхаргат самбарын ихэнх зайг эзэлдэг (цэсийн мөрөнд эзэлдэг зайнаас бусад). Агуулгын самбарыг цонхонд дараа нь нэмж оруулах бүрэлдэхүүн хэсгүүдийг хамрахаас сэргийлэхийн тулд давхаргат самбар нь үүнийг FRAME_CONTENT_LAYER гэж нэрлэгддэг, -30000 дугаартай, маш бага давхарга дээр байрлуулна.

Та контентын самбар руу нэвтрэх боломжтой getContentPane() JFrame анги. Add(Component component) аргыг ашигласнаар та түүнд дурын хяналтыг нэмж болно. Солих ContentPane JPanel төрлийн өөр ямар ч самбар байгаа бол та энэ аргыг ашиглаж болно setContentPane()

Агуулгын самбарт товчлуур нэмэх жишээ:

JButton newButton = шинэ JButton(); getContentPane().add(newButton);

Үүний үр дүнд бид товчлуур бүхий цонхыг авдаг. Товчлуур нь цонхны боломжтой хэсгийг бүхэлд нь эзэлдэг. Энэ эффект нь бүх програмуудад ашиггүй тул самбар дээрх элементүүдийг янз бүрийн аргаар зохион байгуулах хэрэгтэй.

Агуулгын самбарыг бүрэн сольж болно. Дараахь зүйлийг анхаарч үзээрэй Савлуурагуулгын самбарын жишээ ContentPane.

javax.swing.* импортлох; нийтийн анги ContentPaneReplace нь JFrame-г өргөтгөдөг (хувийн статик эцсийн урт serialVersionUID = 1L; нийтийн ContentPaneReplace() ( super("Test ContentPane"); setDefaultCloseOperation(EXIT_ON_CLOSE); // JPanel-ийн хоёр товчлуур бүхий самбар үүсгэх JPanel контент = шинэ JPanel(); нэмэх (шинэ JButton("Гэр бүл")); contents.add(шинэ JButton("Сургууль")); // Агуулгын самбарыг солих setContentPane(контент); // Цонхны хэмжээг тодорхойлох setSize(200, 100); // Цонхыг нээж байна setVisible (true); ) public static void main(String args) ( JFrame.setDefaultLookAndFeelDecorated(true); new ContentPaneAdd(); ) )

Жишээ нь жижиг цонх, хоёр товчлуур бүхий самбар үүсгэдэг бөгөөд энэ нь дараа нь юм setContentPane()цонхны агуулгын самбарыг орлоно. Тиймээс нэмэх () аргыг дуудах энгийн нэмэлтийн оронд орлуулах аргыг ашигласан. Цонхны интерфейсийг дараах дэлгэцийн агшинд үзүүлэв.

Агуулгын самбар ContentPaneөөрөө онцгой зүйл биш. Бүрэлдэхүүн хэсгүүд нь түүнд нэмэгдсэн гэдгийг санах хэрэгтэй.

Ил тод JOptionPane

Ил тод самбар JOptionPaneдавхаргатай хавтангийн бүх элементүүдийн дээр үндэс хавтан болгон байрлуулсан. JOptionPane-ийн байршлыг үндсэн самбараар зохицуулдаг бөгөөд энэ нь тунгалаг самбарыг давхаргат самбарын дээгүүр байрлуулснаар цонхны бүхэл хэсгийг, тэр дундаа цэсийн мөрний эзэлдэг хэсгийг бүрхэнэ.

JOptionPaneпрограмуудад ховор хэрэглэгддэг тул үндсэн самбар нь үүнийг үл үзэгдэх болгодог бөгөөд энэ нь зургийн системийн ачааллыг бууруулдаг. Хэрэв та тунгалаг самбарыг харагдуулах юм бол ил тод байгаа эсэхийг шалгах хэрэгтэй гэдгийг санаарай (түүний тунгалаг бус шинж чанар нь худал), эс тэгвээс энэ нь үндсэн самбарын бусад бүх элементүүдийг хамрах бөгөөд бусад интерфейс нь харагдах болно. үл үзэгдэх.

Ямар тохиолдолд ил тод хавтанг ашиглаж болох вэ? JOptionPane? Үүнийг эхнээс нь хэрэгжүүлэхэд ихээхэн хүчин чармайлт шаардагдах програмын функцуудыг тодорхойлоход ашиглаж болно. Ил тод самбарыг хэрэглэгчийн интерфэйсийг автоматаар шалгахад тохируулж болно. Үүнд нэгтгэгдсэн үйл явдлууд нь дибаг хийх завсрын үр дүнг хянах боломжийг танд олгоно. Заримдаа энэ арга нь гарын авлагын туршилтаас хамаагүй илүү үр дүнтэй байдаг.

Ил тод самбар JOptionPaneЦэсийн талбар зэрэг бүх бүрэлдэхүүн хэсгүүдийн дээр "хөвөх" сонирхолтой хөдөлгөөнт дүрс, эсвэл үндсэн UI руу илгээхээс өмнө заримыг нь зохицуулах шаардлагатай бол үйл явдлыг барихад ашиглаж болно.

Ил тод Swing JOptionPane ашиглах жишээ:

// Ил тод JOptionPane импортыг ашиглах java.awt.Dimension; java.awt.Font импортлох; java.awt.event.WindowEvent импортлох; java.awt.event.WindowListener импортлох; javax.swing.JDialog импортлох; javax.swing.JFrame импортлох; javax.swing.JLabel импортлох; javax.swing.JOptionPane импортлох; javax.swing.UIManager импортлох; public class JOptionPaneTest нь JFrame-г өргөтгөдөг (хувийн статик эцсийн урт serialVersionUID = 1L; нийтийн статик эцсийн Фонт FONT = шинэ Фонт("Verdana", Font.PLAIN, 11); нийтийн статик хүчингүй болгохGUI() ( JFrame хүрээ = шинэ JFrame("Test JOptionPane" "); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowListener() ( нийтийн хүчингүй цонхActivated(WindowEvent үйл явдал) () public void windowClosed(WindowEvent event) () public void windowDeactivated(Window public void event) windowDeiconified(WindowEvent event) () public void windowIconified(WindowEvent event) () public void windowOpened(WindowEvent event) () public void windowClosing(WindowEvent event) ( Объектийн сонголт = ( "Тийм", "Үгүй!" ); int rc = JOptionPane.showOptionDialog(event.getWindow(), "Цонх хаах уу?", "Баталгаажуулах", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, сонголтууд, сонголтууд); (худал);System.exit(0); ) ) ))) JLabel шошго = шинэ JLabel("Цонхыг хаахдаа ил тод самбар ашиглах"); frame.getContentPane().add(шошго); frame.setPreferredSize(шинэ Хэмжээ(350, 80)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(үнэн); ) public static void main(String args) ( javax.swing.SwingUtilities.invokeLater(new Runnable() ( public void run() ( UIManager.put("Button.font", FONT); UIManager.put("Label.font" ", FONT); JFrame.setDefaultLookAndFeelDecorated(үнэн); JDialog.setDefaultLookAndFeelDecorated(үнэн); createGUI(); ) ); ) )

Хэрэв setDefaultCloseOperation аргыг тогтмол дамжуулсан бол JFrame.EXIT_ON_CLOSE, дараа нь цонх хаагдах үед програм ажиллахаа болино. Жишээн дээр тогтмолыг энэ аргад шилжүүлсэн JFrame.ХААХГҮЙ_ЮУ_ГҮЙИнгэснээр цонх хаагдсан үед юу ч болохгүй. Жишээн дээрх програмаас гарах нь аргын JFrame сонсогч WindowListener-ээс хийгддэг цонх хаах. Цонх хаагдсан үед цонх хаах аргыг WindowEvent үйл явдлын параметрээр дууддаг бөгөөд энэ нь ил тод Swing JOptionPane дээр баталгаажуулах харилцах цонхыг нээдэг.

Дараах дэлгэцийн зураг нь хоёр програмын цонхыг харуулж байна. Дээд талын үндсэн цонх. Энэ цонхыг хааснаар доод зорилгыг баталгаажуулах харилцах цонх нээгдэнэ.

JMenuBar цэсний мөр

Нэг нь чухал шинж чанарууд Swing-д JRootPane root самбарыг ашиглах нь цонхонд цэсийн мөр байрлуулах хэрэгцээ юм JMenuBar. Програмын функцэд хандах ямар нэгэн цэсгүйгээр ноцтой програмыг бүтээх боломжгүй юм. Swing номын сан өгдөг гайхалтай боломжуудхөнгөн бүрэлдэхүүн хэсэг болох тохиромжтой JMenuBar цэсийг бий болгох.

Цэсний мөр JMenuBar FRAME_CONTENT_LAYER тусгай давхаргад давхаргат самбарт байрлуулсан бөгөөд цонхны дээд талд бага зай эзэлнэ. Цэсний мөрний урт нь цонхны хэмжээтэй тэнцүү байна. Цэсний мөрний өргөн нь түүнд агуулагдах бүрэлдэхүүн хэсгүүдээс хамаарна.

Үндэс самбар нь агуулгын самбар болон цэсийн мөрийг баталгаажуулдаг JMenuBarдавхцаагүй. Хэрэв цэсийн мөр шаардлагагүй бол үндсэн самбар нь агуулгын самбарыг байрлуулах бүх зайг ашигладаг.

Савлуурын жишээнүүд

Хуудасны текстэнд дурдсан жишээнүүдийн эх кодыг татаж авах боломжтой.

Урьдчилан анхааруулах

Өмнөх хичээлүүдээс ялгаатай нь бид ихэвчлэн "миний хийсэн шиг хий" гэсэн зарчмаар ажиллаж, ойлголт, техникийн нарийн ширийн зүйлийг "хуруунд" гэж нэрлэдэг байсан тул энэ хичээлээс эхлэн илтгэлийн хэв маяг бага зэрэг өөрчлөгдөх болно. илүү техниктэй байх.

Харамсалтай нь үүнээс зайлсхийх боломжгүй, учир нь. эрт орой хэзээ нэгэн цагт бид "хурууны" арга барилыг тэсвэрлэх боломжгүй болох цэгт хүрэх хэрэгтэй болно. Одоо тэр мөч ирж байна. Тиймээс эр зоригоо цуглуулж, ханцуй шамлан, ажилдаа орцгооё.

Өмнөх хичээл дээр () бид дэлгэцийн дэлгэцэн дээр график цонх үүсгэж, харуулах ба түүний гадаад байдал, байршилтай холбоотой зарим асуудлыг шийдсэн. Одоо бид хөшигний ард юу үлдсэн талаар ярилцах болно.

Эх кодын эхэнд дараах хоёр мөр байгааг та анзаарсан байх.

java.awt.* импортлох;

javax.swing.* импортлох;

Энд бид бага зэрэг саатах хэрэгтэй. Байгаль орчин гэж бид түрүүн дурьдсаныг санаж байна Java програмчлалсүлжээ, график, өгөгдлийн сангийн үйл ажиллагаа, мессеж гэх мэтийг дэмжих зорилготой олон номын сангууд багтана. Номын сангууд нь Java-д бүх хүч чадал, олон талт байдлыг өгдөг.

Жава хэл дээр "номын сан" гэсэн нэр томъёоны оронд "багц" гэсэн ойлголтыг ашигладаг. Дээрх мөрүүд нь график интерфэйс үүсгэхийн тулд шаардлагатай багцуудыг холбоно. Дараа нь та бид бусад багцуудыг ашиглах болно гэдгийг харах болно, гэхдээ одоогоор энэ хоёр бидэнд хангалттай.

Багцууд нь ирээдүйн програмын нэг буюу өөр функцийг хангадаг шаардлагатай ангиуд, интерфейсийг (бид цаг тухайд нь интерфэйсүүдийн талаар ярих болно) агуулдаг. Одоор ("*") байгаа нь програмист багцын агуулгыг бүхэлд нь импортлож байгааг харуулж байна. нарийн заалттүүнд агуулагдах ангиуд эсвэл интерфейс. Том багцуудын хувьд үүссэн объектын код нь хэтэрхий том байх шиг санагдаж магадгүй, гэхдээ санаа зовох хэрэггүй: Java хөрвүүлэгч нь зөвхөн таны програмд ​​үнэхээр хэрэгтэй зүйлийг ашиглахад хангалттай ухаалаг; Програмд ​​шаардлагагүй бүх зүйлийг хөрвүүлэгч нь объектын кодонд оруулахгүй. Хэрэв та хүсвэл багцыг оруулах арай өөр хэлбэрийг ашиглаж болно, жишээлбэл,

java.awt.window импортлох;

javax.swing.JFrame импортлох;

гэхдээ энэ нь программист эдгээр багцуудын бүтэц, чадавхийн талаар аль хэдийн сайн мэдлэгтэй болсон гэж үздэг. Бид өмнө нь дурдсан багцуудыг холбох энгийн хэлбэрийг ашиглах болно.

Боловсруулж буй программд багц импортлох (холбох) нь импортын түлхүүр үгийн дараа багцын нэрээр хийгддэг. Багц бүрийг тусад нь импортлох ёстой (өөрөөр хэлбэл та import java.awt.*, javax.swing.*; гэж бичиж болохгүй). Мэдээжийн хэрэг, эх кодын хэмжээ бага зэрэг нэмэгдсэн боловч маш бага байна. Таны програмыг бүрдүүлдэг бүх анги, интерфейсийг импортын бүтээцийн дараа хатуу байрлуулах ёстой, эс тэгвээс хөрвүүлэгч нь эмхэтгэлийн алдааны мессежийг үүсгэх болно.

Эхний багц (java.awt-аас эхлэн) нь үндсэндээ үйлдлийн системийн график дэд системтэй Java программуудын харилцан үйлчлэлийг хангадаг. Java нь платформ хоорондын програмчлалын хэл бөгөөд энэ кодыг гүйцэтгэх үйлдлийн системээс үл хамааран нэг объектын код үүсгэдэг гэдгийг санаарай. Тиймээс, Java нь хэрэглэгчийн компьютер дээр суулгасан үйлдлийн системээр хангагдсан нөөцөд хандахад "албадан" ордог. Ийм эх сурвалжуудын нэг нь график (графикаас гадна Java нь үйлдлийн системийн "үйлчилгээ" рүү ханддаг Файлын системболон бусад нөөц). Тиймээс java.awt.* багц нь Java хэл дээр бичигдсэн график интерфэйсүүдэд үйлдлийн системийн график чадварыг ашиглах, Java хэл дээр бүтээгдсэн график объектуудад харуулах боломжийг олгодог. Java програмууд, дэлгэцийн дэлгэц дээр. Энд бид бага зэрэг саатах болно.

Java дахь бүх график бүрэлдэхүүн хэсгүүдийг хөнгөн (хөнгөн) ба хүнд жинтэй (хүнд жинтэй) гэсэн хоёр ангилалд хуваадаг. График бүрэлдэхүүн хэсгүүдийн дийлэнх нь (товчлуур, жагсаалт, мод, шошго, хүснэгт гэх мэт) нь хөнгөн жинтэй байдаг. Энэ нь үйлдлийн систем нь тэдний талаар огт юу ч мэдэхгүй бөгөөд тэдний оршин тогтнолыг "сэжиглэдэггүй" гэсэн үг юм. Хөнгөн бүрэлдэхүүн хэсгүүд нь цонхонд хамаарах (өмнөх хичээл дээр үзүүлсэн шиг) бөгөөд тэдгээр цонхонд харагдана.

Хэрэв бид товчлуурыг цонхонд харуулахыг хүсвэл доорхи кодоор үүнийг тодорхойлоход л хангалттай

JButton товчлуурPressMe = шинэ JButton("Намайг дар");

мөн цонхны заасан байршилд байрлуулна (холбогдох дэлгэрэнгүй мэдээллийг дараа нь тайлбарлах болно). Товчлуур нь хөнгөн объект бөгөөд үйлдлийн систем нь товчлуурын талаар ямар ч мэдлэггүй (үйлдлийн системд товчлуур байхгүй). Зөвхөн байгаа цонх нь товчлуурын талаар "мэддэг". Цонх нь товчлуурыг зурж, товчлуур дээр гарч буй үйл явдлуудыг таслан зогсоож, ямар нэгэн зүйлээр бүрхэгдсэн бол товчлуурыг дахин зурах гэх мэт. Гэхдээ цонх нь өөрөө ийм байдаг - үйлдлийн систем нь үүнийг мэддэг бөгөөд цонх нь хүнд бүрэлдэхүүн хэсэг учраас яг таг байдаг. Зөвхөн цонх нь үйлдлийн системийн нөөцөд (ялангуяа график нөөц) хандах боломжтой.

Эх кодыг харна уу. Дэлгэц дээр харуулахын өмнө цонхны зүүн дээд булангийн координатыг тооцоолохдоо дэлгэцийн нягтралыг мэдэх шаардлагатай болсон.

Хэмжээ sSize = Toolkit.getDefaultToolkit().getScreenSize()

Ийм мэдээллийг юу өгч чадах вэ? Үйлдлийн систем ба зөвхөн энэ! Дараа нь бид кодыг ашигласан

оролдоод үз(UIManager.setLookAndFeel

(UIManager.getSystemLookAndFeelClassName());

барих(Exceptionlfe)()

Ингэснээр цонхны харагдах байдал нь тодорхой үйлдлийн системд батлагдсан стандартад нийцдэг. Ийм мэдээллийг юу өгч чадах вэ? Дахин хэлэхэд үйлдлийн систем! Тиймээс бид график интерфэйсийг үүсгэхийн тулд java.awt.* багцгүйгээр хийж чадахгүй.

Дэлгэц дээр цонх гарч ирэхэд үйлдлийн систем нь шаардлагатай нөөцийг цонхонд (ялангуяа санах ой) хуваарилж, цонх харагдах болно. Дараа нь хөнгөн жинтэй бүрэлдэхүүн хэсгүүд болон бүхэлд нь орж ирдэг цаашдын ажилбараг зөвхөн тэдэнтэй хамт хийгдсэн.

Хоёрдахь импортын багц (javax.swing-ээс эхлэн) нь хөнгөн GUI үүсгэх үүрэгтэй (бусад багцууд байдаг, гэхдээ энэ нь хамгийн чухал бөгөөд бараг үргэлж ашиглагддаг). Бид энэ багцыг аажмаар судалж, эзэмших болно, учир нь. Энэ нь нэлээд том бөгөөд нэлээд төвөгтэй юм. Бид дараагийн хичээл дээр үүнийг хийж эхлэх болно, гэхдээ одоогоор эх кодын дараах мөрийг харцгаая.

нийтийн анги MoneyForNothing JFrame-г өргөтгөдөг(

Хоёр элемент энд шинэ байна: extends түлхүүр үг болон JFrame үг.

Түлхүүр үгөргөтгөх ("өргөтгөх" гэж орчуулсан боловч утгаараа "өвлөх" гэсэн үг эсвэл "шинж чанар, зан төлөвийг зээлэх" гэсэн хэллэгтэй ойролцоо байдаг) нь объект хандалтат програмчлалын (эсвэл энгийнээр хэлбэл ангид суурилсан програмчлалын) үндсэн ойлголтыг илэрхийлдэг. ). Энэ ойлголтыг "өв залгамжлал" гэж нэрлэдэг. Үүнийг сайн зохицуулах хэрэгтэй.

Анхны хичээлүүдийн нэгэнд () бид ангиудын тухай ойлголтыг хэлэлцэж, машины хөдөлгүүрийг жишээ болгон ашигласан гэдгийг санаарай. Төрөл бүрийн хөдөлгүүр, тэдгээрийн дизайны хувьд (мэдээжийн хэрэг, бид дотоод шаталтат хөдөлгүүрүүдийн тухай ярьж байна) эдгээр хөдөлгүүрүүд бараг бүгдээрээ ижил төстэй байдаг: тус бүр нь цилиндр, поршений, тахир гол, хавхлага гэх мэт.

Мэдээжийн хэрэг, танканд зориулсан асар том дизель хөдөлгүүрийг онгоцны загварт зориулсан жижигхэн спиртийн хөдөлгүүртэй харьцуулах боломжгүй, гэхдээ тэдгээр нь (хэрэв би тэгж хэлж болох юм бол) хол боловч хамаатан садан юм. Тэд нийтлэг өвөг дээдэстэй - ямар нэгэн хийсвэр хөдөлгүүртэй бөгөөд хөдөлгүүрүүд нь өөрөө түүний үр удам юм (хэдийгээр тэд маш хол байсан ч).

Програмчлалд ийм өвөг дээдсийг ихэвчлэн "эцэг эх" эсвэл "дээд анги" гэж нэрлэдэг, өөрөөр хэлбэл. бусад ангиудаас гаралтай анги. Супер ангийн нэр нь өргөтгөлийн дараа шууд ирдэг. Тиймээс, энгийн хэл рүү хөрвүүлбэл дээрх кодын фрагментийг "анги... JFrame ангиллыг өргөжүүлдэг", "анги... JFrame ангиллыг өвлөн авдаг", эсвэл "анги ... JFrame ангийн шинж чанар, зан төлөвийг зээлдэг" гэж уншиж болно. . JFrame анги нь "стандарт" график цонхны үндсэн шинж чанар, үйл ажиллагааг тодорхойлдог. JFrame анги өөрөө javax.swing.* багцад байдаг бөгөөд үүнийг бид программын эхэнд оруулж ирсэн.

JFrame нь график цонхны эх (Java нэр томъёогоор супер анги) юм (харилцах цонх гэх мэт бусад цонхнууд байдаг, гэхдээ бид тэдний талаар цаг тухайд нь ярих болно). Хэрэв та Java-ийн баримт бичигт хандвал JFrame анги нь хэд хэдэн бүтээгч, талбар, зарим "стандарт" цонхны үйл ажиллагааг тодорхойлдог хорь орчим аргатай болохыг олж мэдэх болно. Тиймээс MoneyForNothing нэртэй манай анги бол JFrame ангийн өв залгамжлагч юм (ихэвчлэн тэд өв залгамжлагчдын тухай биш, харин үр удам эсвэл хүүхдийн ангийн тухай ярьдаг).

JFrame анги нь өөрөө хэд хэдэн ангийн удам гэдгийг анхаарна уу (ихэнх нь аль хэдийн танил болсон java.awt.* багцад багтдаг):

Энэ асуулт руу буцаж орохгүйн тулд бид Java өв залгамжлалын шатлалын дээд хэсэгт java.lang.* багцын ангиуд байдагт анхаарлаа хандуулж байна. Энэ бол JDK-ээс тодорхой импортлох шаардлагагүй цорын ганц багц бөгөөд үүнийг үргэлж автоматаар импортолдог. Энэхүү "шат"-аас харахад JFrame анги нь java.lang.Object-ийн ач гуч юм (дээрх зургийг шинжлэх ухааны үүднээс анги шатлал гэж нэрлэдэг).

График хэрэглэгчийн интерфэйсийн бүх бүрэлдэхүүн хэсгүүдийг (GUI гэж товчилсон, График хэрэглэгчийн интерфэйсээс авсан) хөнгөн элемент болох JFrame-ийн залгамжлагч үндсэн цонхонд байрлуулах ёстой. Яг одоо бидэнд ямар ч бүрэлдэхүүн хэсэг байхгүй, гэхдээ тэд удахгүй гарч ирнэ - бид амлаж байна.

Тэгээд одоо сүүлчийнхээ талаар ярилцъя эх код, энэ нь иймэрхүү харагдаж байна:

// Барилгачин

нийтийн MoneyForNothing()(

setTitle("Мөнгөний төлөө юу ч биш тавтай морил");

setSize(шинэ Хэмжээ(600, 400));

Хэмжээ sSize = Toolkit.getDefaultToolkit().getScreenSize(),

fSize = getSize();

хэрэв (fSize.height > sSize.height) (fSize.height = sSize.height;)

хэрэв (fSize.width > sSize.width) (fSize.width = sSize.width;)

setLocation((sSize.width - fSize.width)/2,

(sSize.height - fSize.height)/2);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(үнэн);

Юуны өмнө бид цонхны гарчгийг (setTitle(...) арга) тохируулна. Дараа нь цонхны хэвтээ ба босоо хэмжээсийг тохируулна (setSize(...) арга). Дэлгэцийн дэлгэцийн нягтралыг тодорхойлсны дараа манай цонхны зүүн дээд булангийн координатыг тооцоолж, дэлгэцийн заасан байршилд цонх гарч ирнэ (байршлын арга (...)).

Үүний дараа бид системийн цэс дэх цонхыг хаахдаа юу хийхээ тодорхойлно; Энэ тохиолдолд програм нь ажлаа дуусгах нь тодорхой байна (EXIT_ON_CLOSE). Энэхүү богино бөгөөд энгийн мөрийн цаана үйл явдлыг зохицуулах гайхалтай сонирхолтой, сонирхолтой ертөнц байдаг. Шууд хэлье: Java хэл дээрх үйл явдлыг зохицуулах механизмыг ойлгох нь график програмуудыг хөгжүүлэх гол мөч бөгөөд дараагийн хичээлээс эхлэн бид үүнийг хийх болно.

Эцэст нь сүүлчийн мөр (setVisible(true) арга) цонхыг харагдуулна.

Мэдээжийн хэрэг, бид зарим нарийн ширийн зүйлийг орхигдуулаагүй, гэхдээ бидний зорилго бол бүх зүйл, бүх зүйлийг нарийвчлан хэлэх явдал биш юм - үүнд баримт бичиг, лавлах ном, зааварчилгаа байдаг. Бидний зорилго бол ерөнхий чиглэл, эхлэлийн цэгийг өгөх явдал бөгөөд үүнээс эхлэн та (хэрэв та хүсвэл, хангалттай тэвчээртэйгээр) хөтөлбөрөө зөв чиглэлд боловсруулж, шаардлагатай функцээр дүүргэх боломжтой болно.

Энэ нь бидний хичээлийг дуусгаж байна. Үүнээс салгах ёстой хамгийн чухал зүйл бол өв залгамжлал (зээл авах) гэсэн ойлголт юм. Энэ бол үнэхээр үндсэн ойлголт юм. Үүнгүйгээр Java-д ямар ч цогцолбор үүсгэх боломжгүй юм ашигтай програм, тиймээс цааш үргэлжлүүлэхийн тулд цаг гаргаарай, гэхдээ бидний өнөөг хүртэл сурсан бүх зүйлээ дахин сайтар нягталж үз.

Амжилт хүсье, удахгүй уулзацгаая!

Энэ богино өгүүлэлд би бүтээх үйл явцыг тайлбарлахыг хүсч байна жижиг програмхэл дээрх GUI-г дэмждэг Java. Уншигч тухайн хэлний үндсийг мэддэг гэж үздэг. Java.

Тэгэхээр бидэнд ямар хэрэгсэл хэрэгтэй вэ:

  • Java виртуал машин (OpenJDK эсвэл Oracle JDK)
  • Intellij IDEA (эсвэл Java-д зориулсан өөр IDE)

Суулгасны дараа шаардлагатай програм хангамж, нээлттэй IntelliJ IDEAмөн шинэ төсөл үүсгэ: Файл -> Шинэ төсөл…

Би төслийг нэрлэсэн guiBase. Дэлгэцийн агшин дээрээс харж байгаагаар хавтас srcюу ч агуулаагүй тул бид үүнд функцийг агуулсан үндсэн ангиа үүсгэнэ гол.

Нийтийн анги Main ( public static void main(String args) ( System.out.println("Сайн уу, Говзалла!"); ) )

Дээрх үндсэн ангийн агуулгыг үзнэ үү. Бид одоо төсөл үүсгэж болно ( барих төсөл ) ба үүнийг ажиллуул ( Гүй ). Таны терминалын доод талд IDEта мессеж харах болно Сайн уу, Говзалла аа!. Гэхдээ та өөрөө ойлгосноор энэ нь GUI-г дэмждэггүй.

Дээр энэ үе шатБидэнд аль хэдийн ажиллаж байгаа програм байгаа боловч GUI дэмжлэггүй. Тэгээд одоо нэг хавтсанд байна srcүүсгэх GUI маягт: Шинэ -> GUI маягт

Үүсгэсэн GUI маягтыг нээж, товшино уу jPanelталбарт түүний танигчийг тохируулна уу талбайн нэр, Би асуусан самбар.

Дараа нь баруун талд байгаа маягт руу чирж дарна уу JTextField, JPasswordFieldТэгээд jButton:

Кодоо нэмж, маягтаа үүнтэй холбоход л үлддэг. Бид маягтыг нэмэх үед үндсэн цонх, анги автоматаар үүсгэгдсэн үндсэн цонх, энэ анги нь үүсгэсэн хэлбэрийн анги юм, i.e. Энэ анги нь өгөгдсөн хэлбэрийн бүх үйл явдалд үйлчлэх болно.

Хэдийгээр манай цонхны анги агуулагддаг шаардлагатай элементүүд, гэхдээ одоо ч гэсэн энэ нь GUI-тэй ямар ч холбоогүй тул үүнийг сунгаж үзье jFrameмөн GUI-ийн үндсэн болон шаардлагатай бүх функцийг өвлөн авах .

IN Энэ мөчбидэнд хэлбэр бий үндсэн цонхболон анги үндсэн цонх-аар сунгасан jFrame. Одоо бид бүх нэмсэн GUI элементүүдийг ангийн агуулга гэж тодорхойлох хэрэгтэй үндсэн цонх this.getContentPane().add(самбар); Үүний дараа MainWindow.java файлын агуулга дараах байдлаар өөрчлөгдөнө.

javax.swing.* импортлох; нийтийн анги MainWindow нь JFrame ( хувийн JTextField textField1; private JPasswordField passwordField1; private JButton button1; private JPanel panel; public MainWindow() ( this.getContentPane().add(panel); ) )

Хэрэв та кодыг ажиллуулахыг оролдвол "Сайн уу, Говзалла!" гэсэн мессеж дахин гарч ирнэ. Гол нь бид анги болон түүний хэлбэрийг үүсгэсэн боловч энэ ангийн жишээг үүсгээгүй.

Main.java файлыг өөрчилж, тэнд GUI үүсгэх кодыг нэмэх цаг болжээ.

java.awt.* импортлох; public class Main ( public static void main(String args) ( // MainWindow классын жишээ үүсгэх MainWindow mainWindow = new MainWindow(); // Манай маягтын mainWindow.pack(); // Цонхны хэмжээг өөрчлөх mainWindow.setSize( new Dimension(200, 200)); // Үүсгэсэн цонхыг mainWindow харуулах. setVisible(true); ) )

Кодыг ажиллуулж байна

Товчлуур дээр дарснаар програм ямар ч хариу үйлдэл үзүүлэхгүй байгааг анзаарах болно. Хамгийн гол нь бид сонсогчийг хараахан нэмээгүй байна ( Сонсогч) үйл явдлын хувьд ( Үйл явдал) товчлуур.

үйл явдал сонсогч ( үйл явдлын сонсогч) jButtonадаптерийн хэрэгжилт байх ёстой ActionListener, тиймээс ангийн үндсэн хэсэгт дараах кодыг нэмнэ үү үндсэн цонх:

MyButtonListener хувийн анги нь ActionListener-ийг хэрэгжүүлдэг ( @Override public void actionPerformed(ActionEvent actionEvent) ( ) )

Арга үйлдэл хийсэн() нь button1 товчлуурын бүх үйл явдлыг зохицуулах боловч эхлээд та button1-д ямар ангиудыг зохицуулахыг хэлэх шаардлагатай байгаа тул MainWIndow анги үүсгэгч дээр дараах кодыг нэмнэ үү: this.button1.addActionListener(new MyButtonListener()); Манай зохицуулагч утгагүй байхын тулд дараах кодыг аргад нэмнэ үү үйлдэл хийсэн():

@Олон нийтийн хүчингүй үйлдэлPerformed(ActionEvent actionEvent) (хэрэв (textField1.getText(). тэнцүү(passwordField1.getText())) ( JOptionPane.showMessageDialog(null, "Амжилт"); ) өөрөөр ( JOptionPane.showMessageDialog(null) ");)))

Одоо хөтөлбөр нь бүх үйл явдалд биш, харин үйл явдалд зөв хариулах болно. Жишээлбэл, хэрэв та загалмай дээр дарж програмыг идэвхгүй болгохыг оролдвол цонх алга болно, гэхдээ програм ажиллах болно, учир нь. үндсэн цонхны үйл явдлын зохицуулагчийг нэмээгүй.

Мэдлэгийн санд сайн ажлаа илгээх нь энгийн зүйл юм. Доорх маягтыг ашиглана уу

Мэдлэгийн баазыг хичээл, ажилдаа ашигладаг оюутнууд, аспирантууд, залуу эрдэмтэд танд маш их талархах болно.

Нийтэлсэн http://www.allbest.ru/

ТАНИЛЦУУЛГА

Сүүлийн хэдэн жилийн хугацаанд хөгжүүлэгчид өөрсдийн апплет болон Java программдаа график, хөдөлгөөнт дүрсийг нэгтгэхийн тулд маш их хүчин чармайлт гаргасан. Java.awt болон javax.swing API-г ашигласнаар хөгжүүлэгчид тоглоом, дэлгэц амраагч, дэлгэц амраагч, 3D GUI гэх мэт илүү төвөгтэй график програмуудыг хэрэгжүүлэх боломжтой.

Ажлын зорилго Тооцоолол, графикийн ажил нь java.awt болон javax.swing номын сангийн график интерфейсийг ашиглан программуудыг бүтээхэд зориулагдсан болно.

Хамааралтай байдал.Өнөөдрийн байдлаар график нь програмчлалын хэлнүүдийн хувьд чухал ач холбогдолтой юм. Энэ нь танд ямар ч програмыг дүрслэх боломжийг олгодог бөгөөд энэ нь тодорхой програмуудыг ашиглахад гэрэл гэгээ, ая тухтай байдлыг өгдөг. Энэ нь танд тод, сонирхолтой вэб хуудас үүсгэх боломжийг олгодог бөгөөд мэдээллийн сан боловсруулах, гар утас, компьютер тоглоом бичихэд тохиромжтой.

1. АСУУДЛЫГ ТОГТООХ

График хэрэглэгчийн интерфэйс (GUI) нь эцсийн хэрэглэгчид java програмтай харьцдаг гол арга зам юм. Хэрэглээний хөгжүүлэлтийн хувьд програм хангамж Java хэл дээр, эсвэл програмын график интерфэйс дээр AWT болон Swing багцуудыг ихэвчлэн ашигладаг.

AWT (java.awt багцыг хандахын тулд ачаалагдсан) нь VBA болон Delphi-д хэрхэн хийгддэгтэй адил график үйлдэл хийх, цонхны хяналтыг бий болгох боломжийг олгодог ангиудыг агуулдаг;

Swing (javax.swing багцыг хандахын тулд ачаалагдсан) нь ихэвчлэн AWT-тай төстэй шинэ ангиудыг агуулдаг. J-г ангийн нэрэнд нэмдэг (JButton, JLabel гэх мэт).

Одоогийн байдлаар визуал интерфейсийг бий болгох үндсэн ангиудыг Swing багцад багтаасан болно. AWT багцаас ангиудыг мессеж боловсруулахад ашигладаг. Эгэл биетэн график програмдоор.

javax импортлох. дүүжин.*;

нийтийн эцсийн анги HelloWorld нь Runnable-г хэрэгжүүлдэг(

public static void main(String args) (

//Swing нь өөрийн илгээх утастай,

//үндсэнтэй зэрэгцэн ажилладаг (main()-г гүйцэтгэдэг)

// урсгал. Хэрэв үндсэн утас ажиллаж дуусвал (үндсэн арга дуусна),

//Swing интерфейсийн ажиллагааг хариуцдаг утас нь ажлаа үргэлжлүүлж болно.

//Хэрэглэгч бүх цонхыг хаасан ч гэсэн програм нь үргэлжлүүлэн ажиллах болно

//(энэ утас амьд байгаа цагт). Java 6-аас хойш бүх зүйл

//бүрэлдэхүүнүүд устаж, хяналтын урсгал автоматаар зогсдог.

//Хяналтын хэлхээн дээр ажиллаж байгаа бүх кодыг ажиллуул, тэр ч байтугай эхлүүлэх:

SwingUtilities.invokeLater(шинэ HelloWorld());

нийтийн хүчингүй ажиллуулах() (

// "Сайн уу, Дэлхий!" Гарчигтай цонх үүсгэ.

Frame f = new JFrame("Сайн уу, Дэлхий!");

// Өмнө нь сонсогч үүсгэн бүртгүүлдэг байсан

// windowClosing()-д хариу өгсөн үндсэн цонхны жишээн дээр

// албадан зогсоох виртуал машин System.exit() руу залгаснаар

// Одоо цонхыг хаахад үзүүлэх хариу үйлдлийг тохируулах илүү "зөв" арга бий.

// Энэ аргаодоогийн цонхыг устгадаг боловч програмыг зогсоодоггүй. Тем

// бүх цонх хаагдах хүртэл програм өөрөө ажиллана.

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

// гэхдээ та үүнийг дараах байдлаар тохируулж болно:

// f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Цонхны самбарт текст бүхий засварлах боломжгүй бүрэлдэхүүн хэсгийг нэмнэ.

// f.getContentPane().add (шинэ JLabel("Сайн уу, Дэлхий!")); - хуучин хэв маяг

f.add(шинэ JLabel("Сайн уу Дэлхий"));

// pack() цонхыг оновчтой хэмжээгээр "баглаа"

// дотор нь байгаа бүх бүрэлдэхүүн хэсгүүд.

// Цонхыг харуулах

f.setVisible(үнэн);

Swing нь илтгэлийн дараах талыг хянах механизмуудыг хангадаг.

Гар (Swing нь хэрэглэгчийн оролтыг таслан зогсоох арга замыг өгдөг)

Өнгө (Swing нь дэлгэцэн дээрх өнгийг өөрчлөх боломжийг олгодог)

Оруулах текст талбар (Swing нь өдөр тутмын бүх ажлыг гүйцэтгэх текстийн бүрэлдэхүүн хэсгүүдээр хангадаг).

JComponent

Swing визуал бүрэлдэхүүн хэсгийн бүх номын сангийн үндсэн анги нь JComponent юм. Энэ нь бусад харааны бүрэлдэхүүн хэсгүүдийн дээд ангилал юм. Энэ нь хийсвэр анги тул та JComponent-г үнэхээр үүсгэж чадахгүй ч ангийн шатлалын үр дүнд Swing бүрэлдэхүүн хэсэг бүр ашиглаж болох олон зуун функцуудыг агуулдаг. JComponent анги нь бүх бүрэлдэхүүн хэсгүүдийг будах дэд бүтцийг бий болгодог, гар дээрх бүх товчлуурыг хэрхэн яаж дарахаа мэддэг тул түүний дэд ангиуд нь зөвхөн тодорхой товчлууруудыг сонсох хэрэгтэй. JComponent анги нь JComponent ангийн бусад объектыг нэмэх боломжийг олгодог add() аргыг агуулдаг тул та үүрлэсэн бүрэлдэхүүн хэсгүүдийг (жишээ нь JButton агуулсан JPanel эсвэл бүр илүү сонирхолтой) үүсгэхийн тулд дурын Swing бүрэлдэхүүн хэсгийг бусад дурын дээр нэмж болно. JButton агуулсан JMenu гэх мэт хослолууд).

JLabel

Swing номын сангийн хамгийн энгийн бөгөөд нэгэн зэрэг үндсэн харааны бүрэлдэхүүн хэсэг нь JLabel буюу "шошго" юм. Энэ ангийн аргууд нь шошгон дээр тайлбарласан текст, зураг, зэрэгцүүлэх болон бусад бүрэлдэхүүн хэсгүүдийг тохируулах орно.

get/setText() - шошгон дээрх текстийг авах/тохируулга;

get/setIcon() - шошгон дээрх дүрсийг авах/тогтоох;

get/setHorizontalAlignment - текстийн хэвтээ байрлалыг авах/тогтоох;

get/setDisplayedMnemonic() - шошгоны мнемоник (доор зурсан тэмдэгт) авах/тогтоох;

get/setLabelFor() - энэ шошго хавсаргасан бүрэлдэхүүн хэсгийг авах/тохируулга; Хэрэглэгч Alt + mnemonic товчлуурын хослолыг дарахад фокус нь заасан бүрэлдэхүүн хэсэг рүү шилждэг.

jButton

Swing-ийн гол идэвхтэй бүрэлдэхүүн хэсэг нь Jbutton юм.

JButton-ийн шинж чанарыг өөрчлөхөд ашигладаг аргууд нь JLabel-ийнхтэй төстэй (энэ нь ихэнх Swing бүрэлдэхүүн хэсгүүдийн хувьд адилхан гэдгийг та олж мэдэх болно). Тэд текст, зураг, чиг баримжааг хянадаг:

get/setText() - товчлуур дээрх текстийг авах/тохируулга;

get/setIcon() - товчлуур дээрх зургийг авах/тохируулах;

get/setHorizontalAlignment() - текстийн хэвтээ байрлалыг авах/тогтоох;

get/setVerticalAlignment() - текстийн босоо байрлалыг авах/тогтоох;

get/setDisplayedMnenomic() - Alt товчлууртай хослуулан товчлуурыг дарахад хүргэдэг мнемоник (доогуур зураастай тэмдэгт) авах/тогтоох.

jFrame

JFrame анги нь өөр бүрэлдэхүүн хэсгүүдийг өөртөө нэмж цэгцэлж, хэрэглэгчдэд үзүүлэх боломжийг олгодог контейнер юм.

JFrame нь үйлдлийн системээс хамааралгүй Swing хэсгүүд болон тэдгээрийн ажиллаж байгаа үйлдлийн системийн хооронд гүүр болж ажилладаг. JFrame нь цонхоор бүртгэгдсэн тул үйлдлийн системийн цонхны олон шинж чанарыг хүлээн авдаг: багасгах/томруулах, хэмжээг өөрчлөх, хөдөлгөөн хийх. Хэдийгээр хэрэгжилт лабораторийн ажил JFrame-ийг бүрэлдэхүүн хэсгүүдийг байрлуулах палитр гэж бодоход хангалттай. JFrame-ийн шинж чанарыг өөрчлөхийн тулд та дуудаж болох зарим аргууд энд байна:

get/setTitle() - хүрээний гарчгийг авах/тогтоох;

get/setState() - хүрээний төлөвийг авах/тогтоох (багасгах, нэмэгдүүлэх гэх мэт);

is/setVisible() - хүрээний харагдах байдал, өөрөөр хэлбэл дэлгэцэн дээрх харагдах байдлыг авах/тогтоох;

get/setLocation() - хүрээ гарч ирэх цонхны байршлыг авах/тогтоох;

get/setSize() - хүрээний хэмжээг авах/тогтоох;

add() - хүрээ рүү бүрэлдэхүүн хэсгүүдийг нэмнэ.

Схем, загвар, үйл явдал

Java хэл дээр визуал программуудыг бүтээхдээ тэдгээрийг дэлгэцэн дээр санамсаргүй байдлаар байрлуулж, шууд ажиллахыг хүлээж болохгүй. Бүрэлдэхүүн хэсгүүдийг тодорхой байршилд байрлуулж, тэдэнтэй харилцах харилцаанд хариу үйлдэл үзүүлж, харилцан үйлчлэлд үндэслэн тэдгээрийг шинэчилж, өгөгдлийг дүүргэх шаардлагатай. Харааны бүрэлдэхүүн хэсгүүдтэй үр дүнтэй ажиллахын тулд дараах гурван Swing архитектурын бүрэлдэхүүн хэсгүүдийг суурилуулсан байх ёстой.

Схемүүд (зохион байгуулалт). Swing нь олон схемүүдийг агуулдаг бөгөөд эдгээр нь програмын бүрэлдэхүүн хэсгүүдийг хаана байрлуулах, програмын цонхны хэмжээг өөрчлөх эсвэл бүрэлдэхүүн хэсгүүдийг хасах эсвэл нэмэх үед юу тохиолдохыг хянадаг ангиуд юм.

Үйл явдал Програм нь товчлуур дарах, хулгана товших, хэрэглэгчийн хийж чадах бүх зүйлд хариу өгөх ёстой.

Загвар (загвар). Илүү дэвшилтэт бүрэлдэхүүн хэсгүүд (жагсаалт, хүснэгт, мод) болон JComboBox гэх мэт энгийн хэсгүүдийн хувьд загварууд нь өгөгдөлтэй ажиллах хамгийн үр дүнтэй арга юм. Тэд өгөгдөл боловсруулах ажлын ихэнх хэсгийг бүрэлдэхүүн хэсгээс (MVC гэж бодоод үзээрэй) устгаж, нийтлэг өгөгдлийн объектын ангиудыг (Vektor болон ArrayList гэх мэт) тойруулж өгдөг.

Харааны бүрэлдэхүүн хэсгүүд дээр динамик үзэгдлүүдийг харуулах шаардлагатай байгаа тул График 2D ангид онцгой анхаарал хандуулах хэрэгтэй.

Тооцоолол, графикийн ажлын бие даасан даалгавар: Програмын цонхонд сегментийн дагуу хөдөлж буй цэгийн эргэн тойронд хүрээний хавтгайд эргэлддэг сегментийг зур.

GUI java бүрэлдэхүүн хэсэг

2. АСУУДЛЫГ ӨНДӨР ТҮВШНИЙ ХЭЛЭЭР ХЭРЭГЖҮҮЛЭХJAVA

java.awt.* импортлох;

java.awt.geom.* импортлох;

java.awt.image.BufferedImage импортлох;

* Даалгавар 4. дүрслэх in цонх програмууд (апплет) Хэсэг, эргэдэг in

* онгоц хүрээ эргэн тойронд оноо хөдөлж байна дээр сегмент.

нийтийн класс LB4 нь java.applet-г өргөтгөдөг.Applet нь Runnable(

хувийн статик эцсийн урт serialVersionUID= 1л;

private int w, h;

хувийн BufferedImage bi;

хувийн Graphics2D том;

private boolean stop = худал;

private Thread timer = null;

хувийн Өнгө fonColor = Өнгө. ЦАГААН;

private Color segmentColor = Өнгө. Хөнгөн_саарал;

private Color pointColor = Өнгө. НОГООН;

хувийн сегмент;

// анхны байршил зурах

хувийн давхар уртSegment;

// чиглэл хазайлт тэнхлэгүүд эргэлт

хувийн давхар хөдөлгөх цэг = -1;

хувийн давхар ээлж = 0;

хувийн давхар хурдны цэг = 1;

// хурд өөрчлөлтүүд заалтууд in орон зай

private int speedRepaint = 30;

// тарилга дээр аль нь явж байна өөрчлөлтүүд заалтууд сегмент

private int grad = 15;

/** Энэ арга болно дуудсан дараа татаж авах апплет */

public void init()(

// Бид бүтээдэг объектуудТэгээд суулгах анхны үнэт зүйлс.

Хэмжээ бүдэг = getSize();

// Бид бүтээдэгсегмент, асууж байна урт

longSegment = (давхар) Математик. мин(w, h) / 3;

сегмент = шинэ Сегмент(уртХэсэг, уртSegment / 2, зэрэг,

segmentColor, pointColor, fonColor);

bi = (BufferedImage) үүсгэхImage(w, h);

том = bi.createGraphics();

big.setRenderingHint(RenderingHints. ТҮЛХҮҮР_ЭСРҮҮЛЭХ,

RenderingHints. VALUE_ANTIALIAS_ON);

// Бид бүтээдэг урсгал, аль нь болно үе үе залгах аргашинэчлэх.

таймер = шинэ Thread(энэ);

) барих (Үл хамаарах e) (

Систем. гарч.println(e);

) // Төгсгөл үүн дотор

// Энэ арга гүйцэтгэдэг дахин зурах цонх апплет

нийтийн хүчингүй шинэчлэлт (График g) (

// Бид авдаг заагч дээр объектГрафик 2D

Graphics2D g2 = (Graphics2D) g;

// Бид зурдаг дууссан зураг дээр дэлгэц

g2.drawImage(bi, 0, 0, энэ);

) барих (Үл хамаарах алдаа) (

Систем. гарч.println(error.getMessage());

хувийн хүчингүй grawSegment() (

* //Цэвэрлэгээ зураг big.setBackground(Color.BLUE); big.clearRect(0, 0,

// Бид зурдаг Хэсэг

shift += movePoint * speedPoint;

хэрэв (ээлж< -lengthSegment / 2) {

movePoint *= -1;

shift = -lengthSegment / 2;

) if (shift > lengthSegment / 2) (

movePoint *= -1;

шилжилт = урт Сегмент / 2;

segment.setPos(шилж, хурдны цэг);

segment.rotate();

big.drawImage(segment.getSegment(), null, 0, 0);

// Энэ арга гүйцэтгэсэн in тусдаа урсгал(таймер).

// Тэр шалтгаан болдог дахин зурах цонх апплет бүр надад секунд өгөөч.

нийтийн хүчингүй ажиллуулах() (

утас. одоогийн Thread();

утас. унтах(хурд дахин будах);

) барих (Үйл ажиллагааны алдаа) (

// Энэ арга гүйцэтгэсэн хэрэв хэрэглэгч зүүн хуудас

//-аас апплет. Тэр зогсдог урсгал(таймер) ба, тус тус,

// дахин зурах цонхапплет.

public void stop()(

// Хэрэглэгч тухайн хуудсанд буух үед энэ аргыг гүйцэтгэдэг

// апплеттай. Энэ нь зэрэгцээ утас (таймер) эхэлдэг.

нийтийн хүчингүй эхлэл() (

хэрэв (таймер == null) (

таймер = шинэ Thread(энэ);

// Энэ аргыг апплет агуулсан хуудас хаагдсан үед гүйцэтгэнэ.

public void destroy() (

super.destroy();

утас. одоогийн Thread();

// Зэрэгцээ утас (таймер) дуусахыг хүлээнэ үү.

утас. гарц();

) // устгах төгсгөл

) // RotatingSegment нийтийн классыг дуусгах

// сегмент үүсгэх

хувийн статик давхар х = 0;

эцсийн давхар RAD = 10;

хувийн давхар урт;

хувийн BufferedImage сегмент;

хувийн ColorsegmentColor;

хувийн Өнгөний цэгӨнгө;

private Color backGroundColor;

private Rectangle2D.Double r;

хувийн Ellipse2D.Double p;

хувийн давхар эргэлтТэнхлэг;

хувийн Point2D.Double төв;

хувийн давхар ээлж;

// сегментийн байрлал өөрчлөгдөх өнцөг

хувийн интеграц;

Сегмент(давхар урттай, давхар байрлалтайPointRotating, int grad,

Өнгөний сегментӨнгө, Өнгөний цэгӨнгө, Өнгөний дэвсгэр Өнгө)

throwsException(

// параметрүүдийг шалгах

хэрэв (урт<= 0 || posPointRotating < 0 || length < posPointRotating)

шинэ онцгой тохиолдол гаргах(

"Алдаа: ангийн сегмент дэх хүчингүй параметр");

this.grad = grad;

this.segmentColor = segmentColor;

this.pointColor = pointColor;

this.backGroundColor = backGroundColor;

this.length = урт;

// зураг үүсгэх

сегмент = шинэ BufferedImage((int) урт * 3, (int) урт * 3,

BufferedImage. TYPE_INT_ARGB);

төв = шинэ Point2D.Double(урт, 3 * урт / 2);

// сегмент үүсгэх

rotationAxis = center.x + posPointRotating - RAD / 2;

p = шинэ Ellipse2D.Double(rotationAxis, center.y, RAD, RAD);

// сегментийн өнгийг тохируулах

g2.setColor(segmentColor);

// сегмент зурах

// цэгийн өнгийг тохируулах

g2.setColor(pointColor);

// цэг зурах

// эргэх цэгийг шилжүүлнэ

нийтийн хүчингүй багцPos(давхар ээлжX, давхар ээлжY) (

// сегмент үүсгэх

this.shift = shiftX;

center.y = center.y + shiftY * Математик. нүгэл(Математик. Радианууд(градус * х));

r = шинэ Rectangle2D.Double(center.x, center.y, урт, RAD);

p = шинэ Ellipse2D.Double(эргэлтийн тэнхлэг + шилжилт, төв.y, RAD, RAD);

// сегментийг эргүүлнэ

нийтийн хүчингүй эргүүлэх()(

AffineTransform = AffineTransform. getRotateInstance(

Математик. Радианууд(град * (++ х)), эргэлтийн тэнхлэг + RAD / 2 + шилжилт,

// график контекст авах

Graphics2D g2 = segment.createGraphics();

// бүх зүйлийг өгөгдсөн өнгөөр ​​будна

g2.setBackground(backGroundColor);

g2.clearRect(0, 0, (int) (3 * урт), (int) (3 * урт));

g2.setTransform(at);

g2.setColor(segmentColor);

// сегмент зурах

// цэгийн өнгийг тохируулах

g2.setColor(pointColor);

// цэг зурах

// Зураг буцаана

public BufferedImage getSegment() (

3. ХӨТӨЛБӨРИЙН АЖИЛЛАГААНЫ ЖИШЭЭ

Хөтөлбөрийг хэрэгжүүлсний үр дүн:

Зураг 1. Програмын гүйцэтгэлийн үр дүн

Зураг 2. Програмын гүйцэтгэлийн үр дүн

Зураг 3. Програмын гүйцэтгэлийн үр дүн

ДҮГНЭЛТ

Үүгээр бидний Java хэл дээрх графикуудын тухай яриа өндөрлөж байна. Энэ нийтлэлд бид Java хэл дээрх 2D график програмчлалын хэрэгслүүдийн товч тоймыг танилцуулсан. Бид геометрийн хэлбэр, бүтэц ашиглахыг харуулсан програмыг танилцууллаа.

Бид Java-ийн зарим график шинж чанаруудын талаар ярилцсан. Бид координатын систем, график контекст гэх мэт графикийн үндсэн ойлголтуудын товч танилцуулгаас эхэлсэн. Дараа нь бид Java 2D байгууламжийн талаар ярилцлаа. Мөн бид график эффектүүдийг хэрхэн ашиглах талаар товч өгүүлсэн.

Java хэл дээрх график програмчлалын талаархи бидний танилцуулгын хоёрдугаар хагас. Бид java.awt болон javax.swing номын сангийн график интерфэйсийг ашиглан хоёр хэмжээст объектыг тэнхлэгээ тойрон эргүүлдэг энгийн график засварлагчийг бүтээсэн.

НОМ ЗҮЙ

1. H. M. Deitel, P.J. Дейтел, С.И. Suntry - Java програмчлалын технологи, Ном 1 (график, JAVABEANS, хэрэглэгчийн интерфейс)

2. Жуди Бишоп - Java-г үр ашигтайгаар ажиллуулах

3. Жеймс Гослинг, Билл Жой, Гай Стил, Гилад Брача - Жава хэлний тодорхойлолт, Хоёр дахь хэвлэл.

4. Тим Линдхолм, Фрэнк Йеллин - Java виртуал машины техникийн үзүүлэлт, Хоёр дахь хэвлэл.

5. Gosling J., Arnold K. - Java програмчлалын хэл

6. www.ibm.com сайтаас мэдээлэл

7. www.mexmat.sgu.ru сайтын мэдээлэл

8. www.uic.rsu.ru сайтын мэдээлэл

Allbest.ru дээр байршуулсан

...

Үүнтэй төстэй баримт бичиг

    GUI зохион байгуулалтын бүтэц, нэргүй анги ашиглан үйл явдлын сонсогчдыг зарлах, үүсгэх. Хүснэгтийн өгөгдлийн төлөөлөл нь AbstractTableModel анги юм. Хүснэгтийн нүднүүдийн дүрслэл. Java дахь оролт/гаралтын үндсэн хоёр төрөл.

    лекц, 2014.05.01 нэмэгдсэн

    Java програмчлалын хэл болон Java 2D, Java 3D хэрэглээний програмчлалын интерфейсийг ашиглан хоёр хэмжээст болон гурван хэмжээст график зурах график засварлагчийг хөгжүүлэх. 3D Paint график засварлагч үүсгэх. Графикийн хичээлийн үндсэн аргууд.

    2009 оны 11-р сарын 19-нд нэмэгдсэн курсын ажил

    Цэвэр шошны хэрэглээний багцын тодорхойлолт 8.1. Апплетын хэрэглэгчийн интерфейсийг хөгжүүлэх. java.swing номын сангийн фреймүүд дээр тулгуурлан хүрээний цонх үүсгэх. Текстийн өгөгдлийн өнгийг өөрчлөх. Апплетын инфологийн загварыг зохион бүтээх, бүтээх.

    хяналтын ажил, 2016.07.11 нэмэгдсэн

    Програмчлалын хэлнүүдийн сүлжээний боломжууд. Java апплет ашиглахын давуу тал. java.awt номын санд орсон ангиуд. Хэрэглэгчийн интерфейсийг бий болгох. Сервертэй холбох сокет. Java хэл дээрх графикууд. Өнгөний бүрэлдэхүүн хэсгүүдийн үнэ цэнэ.

    2014 оны 11-р сарын 10-нд нэмэгдсэн курсын ажил

    Java сангийн ангиуд, үндсэн ойлголтууд. Анхны Abstract Window Toolkit ангийн шатлал. Хэрэглэгчийн интерфейсийн төлөөлөгчид. JavaBeans дээрх үйл явдлыг зохицуулах. Удирдлага, JText олон мөрийн талбар. TextEditor програмын жагсаалт.

    курсын ажил, 2013 оны 06-р сарын 26-нд нэмэгдсэн

    Java программын гүйцэтгэл. JDK хөтөлбөр, ангиудын багц. Java хэл дээрх объект хандалтат програмчлал. График интерфейсийг бий болгох зарчим. График системийн бүрэлдэхүүн хэсэг ба контейнер. Апплетууд нь хөтөчийн орчинд ажилладаг програмууд юм.

    2011 оны 02-р сарын 8-нд нэмэгдсэн курсын ажил

    Функцийн хүснэгтийн консолын хэрэглээний диаграмм. Консол програм ба программ болон GUI хоёрын ялгаа. JFrame болон JPanel-д зориулсан ангийн диаграм. Java хэл дээр энгийн хүрээ үүсгэх. Хүрээ доторх интерфейсийн элементүүдийн зохион байгуулалт. Үйл явдлын гогцоо.

    лекц, 2014.05.01 нэмэгдсэн

    РНР програмчлалын хэлний тухай ойлголт, ерөнхий шинж чанар, түүний ажиллах зарчим, үе шатууд, синтакс ба холбогдох массивууд. Java хэл дээрх онцгой тохиолдлуудыг зохицуулах. JDBC ашиглан мэдээллийн сантай ажиллах. График интерфейсийг хэрхэн хөгжүүлэх талаар сурах.

    танилцуулга, 2014 оны 06-р сарын 13-нд нэмэгдсэн

    Автомашины үйлдвэрлэлийн мэдээллийн сангийн логик схемийг боловсруулах. Инфологийн системийн загварчлал. Java програмчлалын хэлийг ашиглан мэдээллийн сангийн график хэрэглэгчийн интерфэйсийг бий болгох. Програм хангамжийн туршилт.

    2013 оны 12-р сарын 16-нд нэмэгдсэн курсын ажил

    График хэрэглэгчийн интерфэйсийг ашиглан консол програмуудыг бий болгох. C++ Builder програмын бүрэлдэхүүн хэсгүүдийн агуулга. Объект хандалтат програмчлалын боломжуудыг ашиглах, C++ хэл дээрх код засварлагчийн онцлог, маягтуудыг ашиглах.



Ачааж байна...
Топ