Hướng dẫn cách sử dụng Panel trong Openbravo
Như chúng ta đã biết viết các phương thức cho class (xem ở bài Viết các phương thức cho class)
Cụ thể bài này có nói:
“Class này phải được kế thừa (extends) từ Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor“
Vậy tại sao trong class VaitrochucnangPanel lại chỉ có:
Để lý giải cho điều này ta tiến hành tìm hiểu cách sử dụng Panel trong Openbravo
Cụ thể bài này có nói:
“Class này phải được kế thừa (extends) từ Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor“
Vậy tại sao trong class VaitrochucnangPanel lại chỉ có:
Để lý giải cho điều này ta tiến hành tìm hiểu cách sử dụng Panel trong Openbravo
Cách sử dụng Panel trong Openbravo
Trong Openbravo đã viết hỗ trợ rất nhiều về Panel, các class viết sẵn này nằm trong package com.openbravo.pos.panels.
Bao gồm: JPanelTable, JPanelTable2 .v.v..
Các Panel này đã làm hộ mình việc Extends Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor như bài Viết các phương thức cho class đã viết.
Do đó trong VaitrochucnangPanel chỉ extends JPanelTable là vì:
Thằng JPanelTable đã được Openbravo viết hộ dẫn đến JPanelTable được Extends Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor như đã nói ở trên. Vậy class VaitrochucnangPanel extends JPanelTable cũng chính là :
VaitrochucnangPanel Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor (đúng theo Viết các phương thức cho class).
Cụ thể nó thể hiện theo sơ đồ sau:
Bao gồm: JPanelTable, JPanelTable2 .v.v..
Các Panel này đã làm hộ mình việc Extends Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor như bài Viết các phương thức cho class đã viết.
Do đó trong VaitrochucnangPanel chỉ extends JPanelTable là vì:
Thằng JPanelTable đã được Openbravo viết hộ dẫn đến JPanelTable được Extends Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor như đã nói ở trên. Vậy class VaitrochucnangPanel extends JPanelTable cũng chính là :
VaitrochucnangPanel Jpanel và implemets từ JPanelView, BeanFactoryApp, TicketsEditor (đúng theo Viết các phương thức cho class).
Cụ thể nó thể hiện theo sơ đồ sau:
Thành phần cơ bản của Panel trong Openbravo
Panel sẽ quy định về khung giao diện hiển thị, các hiện thị sẽ được chứa trong thành phần container.
Ví dụ trong JPanelTable:
Như vậy với JPanelTable này thì ngoài những gì được jeditor lấy ra từ VaitrochucnangView thể hiện trong VaitrochucnangPanel được đem vào container trong JPanelTable thì container trong JPanelTable còn được thêm vào toolbar (Hình trên đã ghi chú).
Và khi đó JPanelTable này hiển thị sẽ có 2 phần như hình:
Ví dụ trong JPanelTable:
Như vậy với JPanelTable này thì ngoài những gì được jeditor lấy ra từ VaitrochucnangView thể hiện trong VaitrochucnangPanel được đem vào container trong JPanelTable thì container trong JPanelTable còn được thêm vào toolbar (Hình trên đã ghi chú).
Và khi đó JPanelTable này hiển thị sẽ có 2 phần như hình:
Ví dụ về Panel trong Openbravo
Để hiểu hơn về Panel ta tiến hanh một ví dụ với Panel mới là JPanelTest.
Ta quay lại bài Xây dựng lớp View
Theo bài này ta đã tạo ra một menu chức năng mới.
Class để hiển thị là VaitrochucnangPanelMoi việc hiển thị của class này như bài xây dựng lớp view sẽ cử ra VaitrochucnangMoiView để chuyển hiển thị nội dung.
Tuy nhiên ở đây ta không xét tới hiển thị đó, mà ta xét tới hiển thị bao gồm hiển thị view đó.
Cụ thể ta đã biết Panel sẽ quy định hiển thị đó, và Panel được sử dụng ở đây là JPanelTest được class VaitrochucnangPanelMoi extends vào qua câu lệnh:
JPanelTest có cấu trúc tương tự như JPanelTable, nhưng yêu cầu của chức năng này chỉ cần hiển thị nội dung trong view (jeditor gọi ra) mà không cần hiển thị Thanh công cụ (trong toolbar). Do đó container của JPanelTest sẽ phải cắt bỏ phần toolbar đi.
.
Như vậy các bạn đã nắm được hoạt động của Panel trong Openbravo roi đó :)
Chúc các bạn thành công!
Source: http://viet-cntt.com/He-dieu-hanh/Unit-Linux/viet-hoa-openbravo-25-erp.html
Ta quay lại bài Xây dựng lớp View
Theo bài này ta đã tạo ra một menu chức năng mới.
Class để hiển thị là VaitrochucnangPanelMoi việc hiển thị của class này như bài xây dựng lớp view sẽ cử ra VaitrochucnangMoiView để chuyển hiển thị nội dung.
Tuy nhiên ở đây ta không xét tới hiển thị đó, mà ta xét tới hiển thị bao gồm hiển thị view đó.
Cụ thể ta đã biết Panel sẽ quy định hiển thị đó, và Panel được sử dụng ở đây là JPanelTest được class VaitrochucnangPanelMoi extends vào qua câu lệnh:
public class VaitrochucnangPanelMoi extends JPanelTest {Chi tiết của JPanelTest này như sau:
JPanelTest có cấu trúc tương tự như JPanelTable, nhưng yêu cầu của chức năng này chỉ cần hiển thị nội dung trong view (jeditor gọi ra) mà không cần hiển thị Thanh công cụ (trong toolbar). Do đó container của JPanelTest sẽ phải cắt bỏ phần toolbar đi.
public abstract class JPanelTest extends JPanel implements JPanelView, BeanFactoryApp { protected BrowsableEditableData bd; protected DirtyManager dirty; protected AppView app; /** Creates new form JPanelTableEditor */ public JPanelTest() {
initComponents(); } public void init(AppView app) throws BeanFactoryException { this.app = app; dirty = new DirtyManager(); bd = null; init(); }
public Object getBean() { return this; } protected void startNavigation() { if (bd == null) { // init browsable editable data bd = new BrowsableEditableData(getListProvider(), getSaveProvider(), getEditor(), dirty);
// Add the filter panel Component c = getFilter(); if (c != null) { c.applyComponentOrientation(getComponentOrientation()); add(c, BorderLayout.NORTH); }
// Add the editor c = getEditor().getComponent(); if (c != null) { c.applyComponentOrientation(getComponentOrientation()); container.add(c, BorderLayout.CENTER); }
// el panel este ListCellRenderer cr = getListCellRenderer(); if (cr != null) { JListNavigator nl = new JListNavigator(bd); nl.applyComponentOrientation(getComponentOrientation()); if (cr != null) nl.setCellRenderer(cr); container.add(nl, java.awt.BorderLayout.LINE_START); }
// add toolbar extras c = getToolbarExtras(); if (c != null) { c.applyComponentOrientation(getComponentOrientation()); //toolbar.add(c); }
// La Toolbar c = new JLabelDirty(dirty); c.applyComponentOrientation(getComponentOrientation()); //toolbar.add(c); c = new JCounter(bd); c.applyComponentOrientation(getComponentOrientation()); //toolbar.add(c); c = new JNavigator(bd, getVectorer(), getComparatorCreator()); c.applyComponentOrientation(getComponentOrientation()); //toolbar.add(c); c = new JSaver(bd); c.applyComponentOrientation(getComponentOrientation()); //toolbar.add(c); } } public Component getToolbarExtras() { return null; }
public Component getFilter() { return null; } protected abstract void init(); public abstract EditorRecord getEditor(); public abstract ListProvider getListProvider(); public abstract SaveProvider getSaveProvider(); public Vectorer getVectorer() { return null; } public ComparatorCreator getComparatorCreator() { return null; } public ListCellRenderer getListCellRenderer() { return null; }
public JComponent getComponent() { return this; }
public void activate() throws BasicException { startNavigation(); bd.actionLoad(); } public boolean deactivate() {
try { return bd.actionClosingForm(this); } catch (BasicException eD) { MessageInf msg = new MessageInf(MessageInf.SGN_NOTICE, AppLocal.getIntString("message.CannotMove"), eD); msg.show(this); return false; } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() {
container = new javax.swing.JPanel(); //toolbar = new javax.swing.JPanel();
setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5)); setLayout(new java.awt.BorderLayout());
container.setLayout(new java.awt.BorderLayout()); //container.add(toolbar, java.awt.BorderLayout.NORTH);
add(container, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel container; //private javax.swing.JPanel toolbar; // End of variables declaration//GEN-END:variables }Từ code trên ta thấy container của JPanelTest đã không chứa toolbar, các khai báo và thêm toolbar đã được coment:
//container.add(toolbar, java.awt.BorderLayout.NORTH);Do đó kết quả hiển thị ra của chức năng này không có phần hiển thị của toolbar trong container như hình:
.
Như vậy các bạn đã nắm được hoạt động của Panel trong Openbravo roi đó :)
Chúc các bạn thành công!
Source: http://viet-cntt.com/He-dieu-hanh/Unit-Linux/viet-hoa-openbravo-25-erp.html