javaswing

Java Swing-02 Menyular va uskunalar

Java Swing da menyular va (Toolbar) uskunalar o’rinlari
Menyu bu menyu o’rniga joylashtirilgan buyruqlar guruhi. Uskunalar o’rni esa o’zida dasturning umumiy buyruqlarini ishlatuvchi tugmalarni o’ziga joylashtiradi.

ODDIY MENYU
dastlab oddiy menyuga misol yozaylik.
***********************************************[highlighter]

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
public class OddiyMenyugaMisol extends JFrame {
 public OddiyMenyugaMisol() {
 initUI();
 }
private void initUI() {
 JMenuBar menyuOrni = new JMenuBar();
 ImageIcon icon = new ImageIcon("chiqish.png");
JMenu faylMenyu = new JMenu("Fayl");
 faylMenyu.setMnemonic(KeyEvent.VK_F);
JMenuItem menyuQismi = new JMenuItem("Chiqish", icon);
 menyuQismi.setMnemonic(KeyEvent.VK_C);
 menyuQismi.setToolTipText("Dasturdan chiqish");
 menyuQismi.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 System.exit(0);
 }
 });
faylMenyu.add(menyuQismi);
menyuOrni.add(faylMenyu);
setJMenuBar(menyuOrni);
setTitle("Oddiy Menyu");
 setSize(300, 200);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 OddiyMenyugaMisol misol = new OddiyMenyugaMisol();
 misol.setVisible(true);
 }
 });
 }
 }

Bizning misolimiz bitta qismdan tarkib topgan menyuni ekranga chiqaradi. Chiqish menyu qismi tanlanganda dastur o’z ishini yaunlaydi.

JMenuBar menyuOrni = new JMenuBar();

Bu yerda biz menyu joylashtirish uchun joy tayorlab oldik.

ImageIcon icon = new ImageIcon(“chiqish.png”);
Menyuda ikonka chiqarmoqchi bo’lganimiz uchun bu qatorni yozdik.

JMenu faylMenyu = new JMenu("Fayl");
faylMenyu.setMnemonic(KeyEvent.VK_F);

Menyu ob’ektini yasadik. Menyularga klaviatura orqali ham murojaat qilish mumkin. Menyuni klaviaturadagi biror bir tugmaga bog’lash uchun setMnemonic() metodidan foydalanamiz. Bizning misolimizda, menyuni ALT+F tugmalari yordamida ochish mumkin.

JMenuItem menyuQismi = new JMenuItem("Chiqish", icon);
menyuQismi.setMnemonic(KeyEvent.VK_C);

Bu ikki qator kod orqali quyi menyuning ‘Chiqish’ qismini yasab, unga avval yasab olgan ikonkamizni o’rnatdik. Hamda bu yasab olan menyu qismimizga “C” klavishalasi yordamida aloqaga chiqishni ta’minladik.

menyuQismi.setToolTipText("Dasturdan chiqish");

Bu qatordagi kod menyu qismi uchun tooltip tayinlaydi.

menyuQismi.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 System.exit(0);
 }
 });

Menyu qismiga harakat tinglovchisi tayinlab, menyu tanlangan vaqtda dasturda chiqishni ta’minladik.

[highlighter]faylMenyu.add(menyuQismi);

Avval yasab olgan “Fayl” menyumizga menyu qismini qo’shdik. Hozir guvohi bo’lganingizdek, menyuQismi ning sarlavhasi “Chiqish” va harakati daasturdan chiqishni ta’minlaydi.

[highlighter]menyu O'rni.add(faylMenyu);

Menyuni joylashtirish uchun tayorlab olgan o’rnimizga faylMenyu ni joylashtirdik.

[highlighter]setJMenuBar(menyuO'rni);

O’ziga faylMenyu ni joylashtirgan menyuOrni ob’ektini freymga (ya’ni oynaga) o’rnatdik.

[highlighter]setTitle("Oddiy Menyu");

Frame ga “Oddiy Menyu” dab sarlavha qo’ydik.

[highlighter]setSize(300, 200);

Freymning o’lchamlarini tayinladik.

[highlighter]setLocationRelativeTo(null);

Freymni ekran markazida chiqadigan holatga keltirdik.

setDefaultCloseOperation(EXIT_ON_CLOSE);

Sarlavha qatoridagi “Yopish” tugmachasini bosganda, dasturdan chiqadigan holatga olib keldik.

SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 OddiyMenyugaMisol misol = new OddiyMenyugaMisol();
 misol.setVisible(true);
 }
 });

Biz o’zimiz yozgan misolimizdagi koddan ob’ekt olib uni ekranda ko’rinadiga holatga keltiryapmiz. invokeLater() metodi avval ham aytilganidek, dasturni Swing Hodisalar Ketma-ketligiga joylashtiradi. Bu narsa foydalanuvchi muhitining barcha hodisalari paralellikka-bardoshliligini ta’minlash uchun kerak. Boshqacha qilib aytadigan bo’lsak, bu FGMning ba’zi hollarda osilib qolishini oldini oladi. Bu aslida juda murakkab mavzu, shu sababli ham ayni vaqtda bunga e’tibor qaratishimiz shart emas.

QISM MENYU
Har bir menyu yana boshqa qism menyularga ega bo’lishi mumkin. Bu yo’l bilan o’xshash buyruqlar bir guruhga birlashtiriladi. Misol uchun shaxsiy uskunalar, manzillar uskunalari va statusni ko’rsatib turuvchi qatorni ko’rsatish yoki yashirishni bitta uskunalar menyu qism ichiga joylashtirisak maqsadga muvofiq bo’ladi. Menyu ichida biz buyruqlarni bir-birlaridan farqlash uchun “seperator” ya’ni ajratuvchi ham ishlatsak bo’ladi. “Ajratuvchi” aslida oddiy chiziq. Odatda menyudagi ‘Yangi’, ‘Ochish’ va ‘Saqlash’ qismlari ‘Nashr qilish’, ‘Nashrni ko’rish’ kabi menyu qismlaridan chiziq bilan ajratiladi. Menyu qismlari klaviatura orqali ham ishga tushirilishi mumkin, buning uchun menyu qismlari tezlatgichlaridan foydalanamiz.
******************************************************************[highlighter]

 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import javax.swing.ImageIcon;
 import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.JMenuItem;
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
public class QismMenyugaMisol extends JFrame {
 public QismMenyugaMisol() {
 initFM();
 }
private void initFM() {
 JMenuBar menyuOrni = new JMenuBar();
 ImageIcon ikonYangi = new ImageIcon("yangi.png");
 ImageIcon ikonOchish = new ImageIcon("ochish.png");
 ImageIcon ikonSaqlash = new ImageIcon("saqlash.png");
 ImageIcon ikonChiqish = new ImageIcon("chiqish.png");
JMenu fayl = new JMenu("Fayl");
 fayl.setMnemonic(KeyEvent.VK_F);
JMenu imp = new JMenu("Import");
 imp.setMnemonic(KeyEvent.VK_M);
JMenuItem yangiliklarRoyhati = new JMenuItem("Yangiliklar ro'yhati...");
 JMenuItem bukmarklar = new JMenuItem("Bukmarklar...");
 JMenuItem pochta = new JMenuItem("Pochta...");
imp.add(yangiliklarRoyhati);
 imp.add(bukmarklar);
 imp.add(pochta);
JMenuItem faylYangi = new JMenuItem("Yangi", ikonYangi);
 faylYangi.setMnemonic(KeyEvent.VK_Y);
JMenuItem faylOchish = new JMenuItem("Ochish", ikonOchish);
 faylOchish.setMnemonic(KeyEvent.VK_O);
JMenuItem faylSaqlash = new JMenuItem("Saqlash", ikonSaqlash);
 faylSaqlash.setMnemonic(KeyEvent.VK_S);
JMenuItem faylChiqish = new JMenuItem("Chiqish", ikonChiqish);
 faylChiqish.setMnemonic(KeyEvent.VK_C);
 faylChiqish.setToolTipText("Dasturdan Chiish");
 faylChiqish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
 ActionEvent.CTRL_MASK));
faylChiqish.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 System.exit(0);
 }
 });
fayl.add(faylYangi);
 fayl.add(faylOchish);
 fayl.add(faylSaqlash);
 fayl.addSeparator();
 fayl.add(imp);
 fayl.addSeparator();
 fayl.add(faylChiqish);
menyuOrni.add(fayl);
 setJMenuBar(menyuOrni);
setTitle("Qism Menyu");
 setSize(360, 250);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 QismMenyugaMisol misol = new QismMenyugaMisol();
 misol.setVisible(true);
 }
 });
 }
 }

Ushbu misolimizda yozilgan kodni ko’p qismi sizlar uchun tushunarli deb o’ylayman. Sababi kodning aksariyat qismi avvalgi misolimizdagi kodga o’xshab ketadi, mohiyat bir hil. Shu sababli hozir, kodning faqat sizlar uchun yangilik bo’lgan qislariga to’htalish bilan chegaralanamiz.

JMenu imp = new JMenu("Import")
 ...
 imp.add(yangiliklarRoyhati);
 imp.add(bukmarklar);
 imp.add(pochta);
 ...
 fayl.add(imp);

Qism menyu yasash ham oddiy menyu yasashga o’xshab ketadi. E’tibor bersangiz “Import” qism menyusining yasalish tartibi “Fayl” menyusiniki bilan aynan bir hil. Lekin “Import” menyusi menyuO’rni (JMenuBar) ga emas, “Fayl” menyusiga qo’shilgan.

faylChiqish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
 ActionEvent.CTRL_MASK));

Tezlatgich tugmalar kombinatsiyasi menyu qismini ishga tushiradi. Bizning misolimizda CTRL+W ni bosish orqali dasturimizdan chiqyapmiz.

fayl.addSeparator();

Seperator oddiy gorizontal chiqiz bo’lib, bir qarashda menyu qismlarini bir-birlaridan ajratishni osonlashtirish uchun kerak. Ajratuvchi chiziqlar yordamida bir hil mantiqqa most tushuvchi menyu qismlarini guruhlarga ajratishimiz mumkin.

CheckBox LIK MENYU QISMI
JCheckBoxMenuItem tanlanganligi to’g’risidagi belgini qo’yish/olish mumkin bo’lgan menyu qismidir. Agar tanlansa menyu qismining yonida tanlanglik belgisi ko’rinadi, aksincha bo’lsa tanlanganlik belgisi ko’rinmaydi. Odatdagi menyu qismlari kabi, CheckBox menyu qismida ham ikonka va matn bo’lishi mumkin.
*************************************************[highlighter]

 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import javax.swing.BorderFactory;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.SwingUtilities;
 import javax.swing.border.EtchedBorder;
public class CheckBoxlikMenyugaMisol extends JFrame {
private JLabel statusbar;
public CheckBoxlikMenyugaMisol() {
 initFM();
 }
private void initFM() {
 JMenuBar menyuOrni = new JMenuBar();
 JMenu fayl = new JMenu("Fayl");
 fayl.setMnemonic(KeyEvent.VK_F);
JMenu korinish = new JMenu("Ko'rinish");
 korinish.setMnemonic(KeyEvent.VK_K);
JCheckBoxMenuItem sbar = new JCheckBoxMenuItem("Status Bar ni ko'rsatish");
 sbar.setMnemonic(KeyEvent.VK_S);
 sbar.setState(true);
sbar.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 if (statusbar.isVisible()) {
 statusbar.setVisible(false);
 } else {
 statusbar.setVisible(true);
 }
 }
});
korinish.add(sbar);
menyuOrni.add(fayl);
 menyuOrni.add(korinish);
setJMenuBar(menyuOrni);
statusbar = new JLabel("Statusbar");
 statusbar.setBorder(BorderFactory.createEtchedBorder(
 EtchedBorder.RAISED));
 add(statusbar, BorderLayout.SOUTH);
setTitle("'CheckBox'lik menyu qismi");
 setSize(360, 250);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 CheckBoxlikMenyugaMisol misol = new CheckBoxlikMenyugaMisol();
 misol.setVisible(true);
 }
 });
 }
 }

 


Bu misolda JCheckBoxMenuItem dan foydalanildi. Meyu qismini tanlash orqali statusbar ko’rinish holatini o’zgartirishimiz mumkin.

JCheckBoxMenuItem sbar = new JCheckBoxMenuItem("Status Bar ni ko'rsatish");
 sbar.setState(true);

JCheckBoxMenuItem yasab, uni tanlanga holatga keltirdik. Dastlabki holatda statusbar ko’rinib turadi.

if (statusbar.isVisible()) {
 statusbar.setVisible(false);
 } else {
 statusbar.setVisible(true);
 }

Bu yerda status bar ko’rinish holatini o’zgartirgandik. Avval tekshiradi, ko’rinib turgan bo’lsa ko’rinmaydigan, ko’rinmay turgan bo’lsa, ko’rinadigan holatga keltiradi.

statusbar = new JLabel("Statusbar");
 statusbar.setBorder(BorderFactory.createEtchedBorder(
 EtchedBorder.RAISED));

statusbar bu oddiy JLabel komponent. Biz labelni atrofini bo’rtib turadigan qilib yasadik, shuning uchun bu bo’rtib ko’rinyapti.

O’NG TOMONDAGI MENYU
Ba’zi dasturlarda o’ng tomonda joylashgan menyu(lar) ham bo’lishi mumkin. Odatda, ‘Yordam’ menyusi o’ng tomonga joylashtiriladi.
****************************************************[highlighter]

 import javax.swing.Box;
 import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
 import javax.swing.SwingUtilities;
public class OngTomonMenyugaMisol extends JFrame {
public OngTomonMenyugaMisol() {
 initFM();
 }
private void initFM() {
 JMenuBar menyuOrni = new JMenuBar();
 JMenu faylMenyu = new JMenu("Fayl");
 JMenu korinishMenyu = new JMenu("Ko'rinish");
 JMenu uskunalarMenyu = new JMenu("Uskunalar");
 JMenu yordamMenyu = new JMenu("Yordam");
 menyuOrni.add(faylMenyu);
 menyuOrni.add(korinishMenyu);
 menyuOrni.add(uskunalarMenyu);
 menyuOrni.add(Box.createHorizontalGlue());
 menyuOrni.add(yordamMenyu);
 setJMenuBar(menyuOrni);
 setTitle("Ong tomondagi menyu");
 setSize(300, 200);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 OngTomonMenyugaMisol misol = new OngTomonMenyugaMisol();
 misol.setVisible(true);
 }
 });
 }
 }

Bu misolda 3 ta menyu chap, bitta menyu o’ng tomonda joylashgan.

 JMenuBar menyuOrni = new JMenuBar();
 JMenu faylMenyu = new JMenu("Fayl");
 JMenu korinishMenyu = new JMenu("Ko'rinish");
 JMenu uskunalarMenyu = new JMenu("Uskunalar");
 JMenu yordamMenyu = new JMenu("Yordam");

Menyu o’rni va to’rtta menyu yasaldi.

 menyuOrni.add(faylMenyu);
 menyuOrni.add(korinishMenyu);
 menyuOrni.add(uskunalarMenyu);
 menyuOrni.add(Box.createHorizontalGlue());
 menyuOrni.add(yordamMenyu);

Uchta menyu qo’shilgandan keyin, menyuO’rni ga “HorizontalGlue” qo’shdik. Glue (kley) mavjud bo’lgan barcha joyni shimib oladi. Bu esa, “Yordam” menyusi menyuO’rnining o’ng tomonga yopishishiga sabab bo’ladi.

QALQIB CHIQUVCHI (POPUP) MENYU
Menyu turlaridan yana biri qalqib chiquvchi menyudir. Bu kabi menyularni yasashda Java Swing ning JPopupMenu klasidan foydalaniladi. Bu menyu sichqonchaning o’ng tugmasi bosilganda paydo bo’ladi. Ba’zida qalqib chiquvchi menyular kontekst menyu deb ham yuritiladi. Bu turdagi menyudan asosiy maqsad, faqat kursor turgan maydonga taluqli buyruqlarni jamlab ko’rsatishdir. Aytaylik bizda rasm bor, sichqonchani rasm ustiga olib kelib o’ng tomonini bosgan vaqtimizda “Saqlash”, “O’lchamni o’zgartirish”, “Siljitish” va h.k. buyruqlardan tarkib topgan oynani chiqarsak, shu kontekst, qalqib chiquvchi menyuga misol bo’ladi.
****************************************************************[highlighter]

 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import javax.swing.JFrame;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 import javax.swing.SwingUtilities;
public class QalquvchiMenyugaMisol extends JFrame {
private JPopupMenu qalquvchiMenyu;
public QalquvchiMenyugaMisol() {
 initFM();
 }
private void initFM() {
 qalquvchiMenyu = new JPopupMenu();
 JMenuItem kattQism = new JMenuItem("Kattalashtirish");
 kattQism.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 setExtendedState(JFrame.MAXIMIZED_BOTH);
 }
 });
qalquvchiMenyu.add(kattQism);
JMenuItem chiqishQism = new JMenuItem("Chiqish");
chiqishQism.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent hodisa) {
System.exit(0);
 }
 });
qalquvchiMenyu.add(chiqishQism);
addMouseListener(new MouseAdapter() {
 public void mouseReleased(MouseEvent hodisa) {
 if (hodisa.getButton() == MouseEvent.BUTTON3) {
 qalquvchiMenyu.show(hodisa.getComponent(), hodisa.getX(), hodisa.getY());
 }
 }
 });
 setTitle("Qalqib chiquvchi (kontekst) menyu");
 setSize(350, 250);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 QalquvchiMenyugaMisol qalquvchiMenyu = new QalquvchiMenyugaMisol();
 qalquvchiMenyu.setVisible(true);
 }
 });
 }
 }

Bu misol ikkita buyruqdan tarkib topgan Qalquvchi menyuli oynani ishga tushiradi. Birinchi buyruq oyna o’lchamlarini mumikn qadar kattalashtiradi, ikkinchisi dastur ishini yakunlaydi.

qalquvchiMenyu = new JPopupMenu();

Qalquvchi menyu yasash uchun JPopupMenu klasidan foydalanamiz.

JMenuItem kattQism = new JMenuItem("Kattalashtirish");
kattQism.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 setExtendedState(JFrame.MAXIMIZED_BOTH);
 }
 });

Qalquvchi menyu ‘JMenuItem’ lardan tarkib topadi. Bu kod freym o’lchamini eng katta holatga keltiradi.

addMouseListener(new MouseAdapter() {
 public void mouseReleased(MouseEvent hodisa) {
 if (hodisa.getButton() == MouseEvent.BUTTON3) {
 qalquvchiMenyu.show(hodisa.getComponent(), hodisa.getX(), hodisa.getY());
 }
 }
 });

Qalquvchi menyu biz sichqoncha tugmasini bosgan joyimizdan chiqadi. MouseEvent.BUTTON3 konstanti qalquvchi menyuni sichqonchaning o’ng tugmasini bosgan vaqtimizda chiqadigan qilish uchun ishlatilgan.

USKUNALAR O’RNI (Toolbar)
Menyular dasturimizda ishlatiladigan buyruqlarni guruhlash uchun ishlatiladi. Toolbar (Uskunalar) esa eng ko’p ishlatiladigan buyruqlar bilan aloqaga chiqishni osonlashtirish uchun kerak. Java Swing da JToolbar klasidan dasturlarimizga uskunalar o’rnini ochishda foydalanamiz.
*************************************** [highlighter]

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JToolBar; 
import javax.swing.SwingUtilities; 
 
 
public class ToolbargaMisol extends JFrame { 
 
 public ToolbargaMisol() { 
  initFM(); 
 } 
 
 private void initFM() { 
  JMenuBar menyuOrni = new JMenuBar(); 
  JMenu faylMenyu = new JMenu("Fayl"); 
  menyuOrni.add(faylMenyu); 
  setJMenuBar(menyuOrni); 
 
  JToolBar uskunalarOrni = new JToolBar(); 
 
  ImageIcon ikonka = new ImageIcon("chiqish.png"); 
 
  JButton chiqishTugmasi = new JButton(ikonka); 
  uskunalarOrni.add(chiqishTugmasi); 
   
  chiqishTugmasi.addActionListener(new ActionListener() { 
   public void actionPerformed(ActionEvent hodisa) { 
    System.exit(0); 
   } 
  }); 
 
  add(uskunalarOrni, BorderLayout.NORTH); 
 
  setTitle("Oddiy uskunalar o'rni (toolbar)"); 
  setSize(350, 200); 
  setLocationRelativeTo(null); 
  setDefaultCloseOperation(EXIT_ON_CLOSE); 
 } 
 
 public static void main(String[] args) { 
  SwingUtilities.invokeLater(new Runnable() { 
   public void run() { 
    ToolbargaMisol misol = new ToolbargaMisol(); 
    misol.setVisible(true); 
   } 
  }); 
 } 
}

***************************************
Bu misol bitta chiqish tugmasi mavjud bo’lgan toolbar (uskunalarO’rni) yasaydi.

JToolBar uskunalarOrni = new JToolBar();

Bu JToolbar konstruktori.

JButton chiqishTugmasi = new JButton(ikonka);
uskunalarOrni.add(chiqishTugmasi);

Biz tugma yasab uni uskunalarOrni (JToolbar klasidan olingan ob’ekt) ga qo’shdik.

add(uskunalarOrni, BorderLayout.NORTH);

uskunalarOrni BorderLayout ning shimoliy (ustki, tepa) qismiga joylashtirildi.

USKUNALAR O’RINLARI (“Toolbar”lar)
Aytalik, biz ikkita uskuna o’rinlari yasashni istaymiz. Navbatdagi misolda uni qanday qilish ko’rsatilgan.
*************************************************[highlighter]

 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import javax.swing.BoxLayout;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import javax.swing.JToolBar;
 import javax.swing.SwingUtilities;
public class UskunalarOrinlarigaMisol extends JFrame {
public UskunalarOrinlarigaMisol() {
 initFM();
 }
public final void initFM() {
 JToolBar uskunalarOrni1 = new JToolBar();
 JToolBar uskunalarOrni2 = new JToolBar();
JPanel panel = new JPanel();
 panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
ImageIcon yangiIkonka = new ImageIcon("yangi.png");
 ImageIcon ochishIkonka = new ImageIcon("ochish.png");
 ImageIcon saqlashIkonka = new ImageIcon("saqlash.png");
 ImageIcon chiqishIkonka = new ImageIcon("chiqish.png");
JButton yangiTugma = new JButton(yangiIkonka);
 JButton ochishTugma = new JButton(ochishIkonka);
 JButton saqlashTugma = new JButton(saqlashIkonka);
uskunalarOrni1.add(yangiTugma);
 uskunalarOrni1.add(ochishTugma);
 uskunalarOrni1.add(saqlashTugma);
 uskunalarOrni1.setAlignmentX(0);
JButton chiqishTugma = new JButton(chiqishIkonka);
 uskunalarOrni2.add(chiqishTugma);
 uskunalarOrni2.setAlignmentX(0);
chiqishTugma.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent hodisa) {
 System.exit(0);
 }
 });
panel.add(uskunalarOrni1);
 panel.add(uskunalarOrni2);
add(panel, BorderLayout.NORTH);
setTitle(" Uskunalar o'rinlari" );
 setSize(360, 250);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 UskunalarOrinlarigaMisol misol = new UskunalarOrinlarigaMisol();
 misol.setVisible(true);
 }
 });
 }
 }

Biz iuskunalar o’rinlarini yasashning faqat bitta yo’li bilan tanishdik. Lekin aslida buni yo’llari ko’p. Biz BorderLayout ning shimoliy (tepa) qismiga JPanel joyladik. Panel o’z navbatida vertikal BoxLayout ga ega. Biz ikkita uskunalar o’rnini shu panelga joyladik.

JToolBar uskunalarOrni1 = new JToolBar();
JToolBar uskunalarOrni2 = new JToolBar();

Ikkita uskunalar o’rni (Toolbar) ob’ektlari yasaldi.

JPanel panel = new JPanel();
 panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
 vertikal "BoxLayout"lik panel yasaldi.
uskunalarOrni1.setAlignmentX(0);
 uskunalarOrni chapdan boshlab tartiblandi.
panel.add(uskunalarOrni1);
 panel.add(uskunalarOrni2);
 add(panel, BorderLayout.NORTH);

Biz uskunalar o’rinlarini panelga qo’shdik. Panelning o’zini freym (ramka, oyna)ning shimoliy (tepa) qismiga joyladik.

(351 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: