آموزش مدیریت طرح بندی در برنامه نویسی جایتون

3 سال پیش

آموزش مدیریت طرح بندی در برنامه نویسی جایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت طرح بندی در برنامه نویسی جایتون خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پروژه محور پایتون

مدیریت طرح بندی در جاوا کلاسهایی هستند که مدیریت قرار دادن کنترل ها را در اشیا container ظرف مانند Frame ، Dialog یا Panel انجام می دهند. مدیریت چیدمان موقعیت نسبی کنترل ها را در یک فریم حفظ می کنند ، حتی اگر وضوح تغییر کند یا خود فریم تغییر اندازه دهد.

این کلاس ها رابط طرح بندی را پیاده سازی می کنند. مدیریت طرح بندی زیر در کتابخانه AWT تعریف شده اند –

  • BorderLayout
  • FlowLayout
  • GridLayout
  • CardLayout
  • GridBagLayout

مدیریت طرح بندی زیر در کتابخانه Swing تعریف شده اند –

  • BoxLayout
  • GroupLayout
  • ScrollPaneLayout
  • SpringLayout

ما در مثال های زیر از مدیریت طرح بندی AWT و همچنین مدیران طرح بندی نوسان استفاده خواهیم کرد.

  • Absolute Layout
  • Flow Layout
  • Grid Layout
  • Border Layout
  • Box Layout
  • Group Layout

بگذارید اکنون هر یک از اینها را به طور مفصل بحث کنیم.

طرح بندی مطلق

قبل از اینکه همه مدیریت طرح بندی فوق را بررسی کنیم ، باید به موقعیت مطلق کنترل ها در یک ظرف نگاه کنیم. ما باید روش طرح بندی شی frame قاب را روی “None” تنظیم کنیم.

frame.setLayout(None)

 

سپس با فراخوانی متد ()setBounds  کنترل را قرار دهید. چهار آرگومان طول می کشد – موقعیت x ، موقعیت y ، عرض و ارتفاع.

به عنوان مثال – برای قرار دادن یک شی دکمه ای در موقعیت مطلق و با اندازه مطلق.

btn = JButton("Add")
btn.setBounds(60,80,60,20)

 

به همین ترتیب، با تخصیص مناسب موقعیت و اندازه می توان تمام کنترل ها را قرار داد. استفاده از این طرح نسبتاً آسان است اما با تغییر اندازه پنجره یا اجرای برنامه در صورت تغییر وضوح صفحه ، ظاهر خود را حفظ نمی کند.

در اسکریپت جایتون زیر، از سه شی Jlabel به ترتیب برای نمایش متن “phy” ، “maths” و “Total” استفاده شده است. در مقابل این سه مورد – اشیا J JTextField قرار گرفته اند. یک شی دکمه ای در بالای برچسب “Total” قرار گرفته است.

اول از همه پنجره JFrame با یک طرح تنظیم شده بر روی هیچکدام ایجاد می شود.

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setLayout(None)

 

سپس کنترل های مختلف با توجه به موقعیت و اندازه مطلق آنها اضافه می شوند. کد کامل در زیر آورده شده است –

from javax.swing import JFrame, JLabel, JButton, JTextField

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(300,200)
frame.setLayout(None)

lbl1 = JLabel("Phy")
lbl1.setBounds(60,20,40,20)
txt1 = JTextField(10)
txt1.setBounds(120,20,60,20)
lbl2 = JLabel("Maths")
lbl2.setBounds(60,50,40,20)
txt2 = JTextField(10)
txt2.setBounds(120, 50, 60,20)
btn = JButton("Add")
btn.setBounds(60,80,60,20)
lbl3 = JLabel("Total")
lbl3.setBounds(60,110,40,20)
txt3 = JTextField(10)
txt3.setBounds(120, 110, 60,20)

frame.add(lbl1)
frame.add(txt1)
frame.add(lbl2)
frame.add(txt2)
frame.add(btn)
frame.add(lbl3)
frame.add(txt3)
frame.setVisible(True)

 

خروجی به صورت زبر می باشد:

Add

طرح Jython FlowLayout

FlowLayout  پیش فرض کلاسهای کانتینر است. کنترل را از چپ به راست و سپس از جهت به بالا تنظیم می کند.

در مثال زیر، یک شی Jlabel ، یک شی JTextField و یک شی JButton قرار است با استفاده از مدیر FlowLayout در یک JFrame نمایش داده شوند. برای شروع ، اجازه دهید کلاسهای مورد نیاز را از بسته javax.swing و بسته java.awt وارد کنیم.

از javax.swing واردات JFrame ، JLabel ، JButton ، JTextField
از java.awt FlowLayout را وارد کنید
سپس یک شی J JFrame ایجاد کرده و مکان و همچنین مشخصات آن را تنظیم کنید.

from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import FlowLayout

 

مدیر طرح بندی قاب را به صورت FlowLayout تنظیم کنید.

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(200,200)
Set the layout manager for the frame as FlowLayout.
frame.setLayout(FlowLayout())

 

برای نمایش قاب ویژگی قابل مشاهده آن را روی true تنظیم کنید. اسکریپت کامل جایتون و خروجی آن به شرح زیر است –

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(200,200)
Set the layout manager for the frame as FlowLayout.
frame.setLayout(FlowLayout())

 

اکنون اشیا for را برای کلاس های JLabel ، JTextfield و JButton اعلام کنید.

label = JLabel("Welcome to Jython Swing")
txt = JTextField(30)
btn = JButton("ok")

 

در آخر با فراخوانی متد ()add کلاس JFrame، این کنترل ها را در فریم اضافه کنید.

frame.add(label)
frame.add(txt)
frame.add(btn)

 

برای نمایش فریم ویژگی قابل مشاهده آن را روی true تنظیم کنید. اسکریپت کامل جایتون و خروجی آن به شرح زیر است –

from javax.swing import JFrame, JLabel, JButton, JTextField
from java.awt import FlowLayout

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(200,200)

frame.setLayout(FlowLayout())

label = JLabel("Welcome to Jython Swing")
txt = JTextField(30)
btn = JButton("ok")

frame.add(label)
frame.add(txt)
frame.add(btn)
frame.setVisible(True)

Welcome to Jython Swing

 

طرح بندی GridLayout

مدیریت Gridlayout امکان قرار دادن کنترل ها در یک شبکه مستطیلی را فراهم می کند. در هر سلول شبکه یک کنترل قرار می گیرد.

در مثال زیر، GridLayout به یک شی JFrame اعمال می شود و آن را به ۴ ردیف و ۴ ستون تقسیم می کند. قرار است یک شی JButton در هر سلول شبکه قرار گیرد.

اجازه دهید ابتدا کتابخانه های مورد نیاز را وارد کنیم –

from javax.swing import JFrame, JButton
from java.awt import GridLayout

 

سپس ظرف JFrame را ایجاد کنید –

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,400)

 

اکنون ، GridLayout را با تعیین ابعاد آن ۴ در ۴ اعمال کنید.

frame.setLayout(GridLayout(4,4))

 

اکنون باید از دو حلقه FOR استفاده کنیم که هر کدام از ۱ تا ۴ است، بنابراین شانزده شی JButton در سلولهای بعدی قرار می گیرند.

k = 0
frame.setLayout(GridLayout(4,4))
for i in range(1,5):
   for j in range(1,5):
      k = k+1
      frame.add(JButton(str(k)))

 

در آخر قابلیت مشاهده فریم را روی true قرار دهید. کد کامل جایتون در زیر آورده شده است.

from javax.swing import JFrame, JButton
from java.awt import GridLayout

frame = JFrame("Hello")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,400)

frame.setLayout(GridLayout(4,4))

k = 0
for i in range(1,5):
   for j in range(1,5):
      k = k+1
      frame.add(JButton(str(k)))

frame.setVisible(True)

 

خروجی کد فوق به شرح زیر است –

Jython Code
طرح Jython BorderLayout

مدیریت BorderLayout ظرف را در پنج منطقه جغرافیایی و مکانهایی با یک جز در هر منطقه تقسیم می کند. این مناطق با ثابتهای تعریف شده به شرح زیر نشان داده می شوند –

  • BorderLayout.NORTH
  • BorderLayout.SOUTH
  • BorderLayout.EAST
  • BorderLayout.WEST
  • BorderLayout.CENTER

اجازه دهید مثال زیر را در نظر بگیریم –

Jython BorderLayout

طرح بندی Jython BoxLayout

کلاس BoxLayout در بسته javax.swing تعریف شده است. برای چیدمان اجزا در ظرف به صورت عمودی یا افقی استفاده می شود. جهت با ثابتهای زیر تعیین می شود –

  • X_AXIS
  • Y_AXIS
  • LINE_AXIS
  • PAGE_AXIS

ثابت صحیح محوری را مشخص می کند که اجزای ظروف باید طی آن ترسیم شوند. وقتی کانتینر دارای گرایش مولفه پیش فرض باشد ، LINE_AXIS مشخص می کند که مولفه ها از چپ به راست چیده شوند و PAGE_AXIS مشخص می کند که مولفه ها از بالا به پایین چیده شوند.

در مثال زیر، پانل (از کلاس JPanel) در یک شی JFrame اضافه می شود. Vertical BoxLayout به آن اعمال شده و دو صفحه دیگر، بالا و پایین، به آن اضافه می شوند. این دو صفحه داخلی دارای هر دو دکمه هستند که در Boxlayout افقی اضافه شده اند.

اجازه دهید ابتدا پنجره سطح بالا JFrame را ایجاد کنیم.

frame = JFrame()
frame.setTitle("Buttons")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 150)

 

جسم JPanel با داشتن یک BoxLayout عمودی اعلام می شود. آن را در قاب سطح بالا اضافه کنید.

panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
frame.add(panel)

 

در این پنل ، دو صفحه دیگر از بالا و پایین به آن اضافه می شود. هر یک از آنها دو شی JButton دارند که به صورت افقی به آنها اضافه شده است و یک نگهدارنده فضای ۲۵ پیکسل آنها را جدا می کند.

###top panel
top = JPanel()
top.setLayout(BoxLayout(top, BoxLayout.X_AXIS))
b1 = JButton("OK")
b2 = JButton("Close")
top.add(Box.createVerticalGlue())
top.add(b1)
top.add(Box.createRigidArea(Dimension(25, 0)))
top.add(b2)

 

توجه داشته باشید که از تابع ()createRigidArea برای ایجاد فاصله ۲۵ پیکسل بین دو دکمه استفاده می شود. همچنین تابع ()createVerticalGlue فضای اصلی یا انتهایی طرح را اشغال می کند.

برای شروع، پانل های بالا و پایین را اضافه کنید و ویژگی دید قاب را روی true قرار دهید. کد کامل به شرح زیر است –

from java.awt import Dimension
from javax.swing import JButton, JFrame,JPanel,BoxLayout,Box

frame = JFrame()
frame.setTitle("Buttons")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 150)

panel = JPanel()
panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS))
frame.add(panel)

###top panel
top = JPanel()
top.setLayout(BoxLayout(top, BoxLayout.X_AXIS))
b1 = JButton("OK")
b2 = JButton("Close")
top.add(Box.createVerticalGlue())
top.add(b1)
top.add(Box.createRigidArea(Dimension(25, 0)))
top.add(b2)

###bottom panel
bottom = JPanel()
bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS))
b3 = JButton("Open")
b4 = JButton("Save")
bottom.add(b3)
bottom.add(Box.createRigidArea(Dimension(25, 0)))
bottom.add(b4)
bottom.add(Box.createVerticalGlue())

panel.add(bottom)
panel.add(top)
frame.setVisible(True)

Jython BoxLayout

  GroupLayout جایتون

مدیر GroupLayout اجزا را به صورت سلسله مراتبی گروه بندی می کند. گروه بندی توسط دو کلاس SequentialGroup و ParallelGroup انجام می شود که هر دو رابط Group را در جاوا پیاده سازی می کنند.

روش طرح در دو مرحله تقسیم می شود. در یک مرحله ، اجزا همراه با محور افقی و در مرحله دوم در امتداد محور عمودی قرار می گیرند. هر مولفه باید دو بار در طرح تعریف شود.

دو نوع ترتیب، توالی و موازی وجود دارد. در هر دو می توان اجزا را به ترتیب یا موازی ترتیب داد. در آرایش افقی، ردیف گروه دنباله ای و ستون گروه موازی نامیده می شود. از طرف دیگر  در ترتیب موازی، ردیف عنصر یک گروه موازی و یک ستون است که به ترتیب نامیده می شود.

در مثال زیر پنج دکمه به گونه ای مرتب شده اند که سه عدد در ردیف و ستون ظاهر می شوند. برای شروع ، یک شی Jpanel را در یک پنجره JFrame اضافه کنید و طرح آن را به صورت Grouplayout تنظیم کنید.

frame =  JFrame()
panel =  JPanel()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
layout =  GroupLayout(panel)
panel.setLayout(layout)

 

سپس اشیا JButton را بسازید –

buttonD = JButton("D")
buttonR = JButton("R")
buttonY = JButton("Y")
buttonO = JButton("O")
buttonT = JButton("T")

 

در مرحله بعدی، یک SequentialGroup به نام LeftToRight ایجاد می کنیم که به آن buttonD و buttonY اضافه می شود. در بین آنها ، یک ستون ParallelGroup ColumnMiddle (با سه دکمه دیگر که به صورت عمودی اضافه شده اند) قرار داده شده است.

leftToRight = layout.createSequentialGroup()
leftToRight.addComponent(buttonD)
columnMiddle = layout.createParallelGroup()
columnMiddle.addComponent(buttonR)
columnMiddle.addComponent(buttonO)
columnMiddle.addComponent(buttonT)
leftToRight.addGroup(columnMiddle)
leftToRight.addComponent(buttonY)

 

اکنون تعریفی از SequentialGroup عمودی به نام TopToBottom ارائه شده است. یک ردیف از سه دکمه ParallelGroup اضافه کنید و سپس دو دکمه را به صورت عمودی قرار دهید.

topToBottom = layout.createSequentialGroup()
rowTop = layout.createParallelGroup()
rowTop.addComponent(buttonD)
rowTop.addComponent(buttonR)
rowTop.addComponent(buttonY)
topToBottom.addGroup(rowTop)
topToBottom.addComponent(buttonO)
topToBottom.addComponent(buttonT)

 

در آخر ، گروه LeftToRight را به صورت افقی و گروه TopToBottom را به صورت عمودی روی شی طرح قرار دهید. کد کامل در زیر آورده شده است –

from javax.swing import JButton, JFrame,JPanel,GroupLayout

frame = JFrame()
panel = JPanel()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
layout = GroupLayout(panel)
panel.setLayout(layout)

buttonD = JButton("D")
buttonR = JButton("R")
buttonY = JButton("Y")
buttonO = JButton("O")
buttonT = JButton("T")

leftToRight = layout.createSequentialGroup()
leftToRight.addComponent(buttonD)
columnMiddle = layout.createParallelGroup()
columnMiddle.addComponent(buttonR)
columnMiddle.addComponent(buttonO)
columnMiddle.addComponent(buttonT)
leftToRight.addGroup(columnMiddle)
leftToRight.addComponent(buttonY)

topToBottom = layout.createSequentialGroup()
rowTop = layout.createParallelGroup()
rowTop.addComponent(buttonD)
rowTop.addComponent(buttonR)
rowTop.addComponent(buttonY)
topToBottom.addGroup(rowTop)
topToBottom.addComponent(buttonO)
topToBottom.addComponent(buttonT)

layout.setHorizontalGroup(leftToRight)
layout.setVerticalGroup(topToBottom)

frame.add(panel)
frame.pack()
frame.setVisible(True)

 

خروجی کد فوق به شرح زیر است –

Jython GroupLayout

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی جایتون

  1. آموزش برنامه نویسی جایتون
  2.  بررسی اجمالی برنامه نویسی جایتون
  3. آموزش نصب جایتون
  4. آموزش وارد کردن کتابخانه های جاوا در برنامه نویسی جایتون
  5. آموزش متغیرها و انواع داده ها در برنامه نویسی جایتون
  6. آموزش استفاده از انواع مجموعه جاوا در برنامه نویسی جایتون
  7. آموزش کنترل تصمیم گیری در برنامه نویسی جایتون
  8. آموزش حلقه ها در برنامه نویسی جایتون
  9. آموزش توابع در برنامه نویسی جایتون
  10. آموزش ماژول ها در برنامه نویسی جایتون
  11. آموزش پکیج در برنامه نویسی جایتون
  12. آموزش برنامه جاوا در برنامه نویسی جایتون
  13. آموزش پلاگین Eclipse در برنامه نویسی جایتون
  14. آموزش ایجاد پروژه در Eclipse در برنامه نویسی جایتون
  15. آموزش افزونه و پروژه NetBeans در برنامه نویسی جایتون
  16. آموزش servlet در برنامه نویسی جایتون
  17. آموزش JDBC در برنامه نویسی جایتون
  18. آموزش استفاده از کتابخانه Swing GUI در برنامه نویسی جایتون
  19. آموزش مدیریت طرح بندی در برنامه نویسی جایتون
  20. آموزش منوها در برنامه نویسی جایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه