SeasarDI Container with AOP

Example 3

それでは、次のExample 3を見てみましょう。Launcher画面のExample 3を押すと下記画面が表示されます。


一番上の行をクリックして見て下さい。下記の様に、右のItemNo欄に「00010」と表示されます。




それでは、StockNoに「11」と入力して、Tabを押して下さい。



Validatorにより、Errorとなりますね。
それでは、StockNOは、「1122」として、次にDate欄に「07/1/1」といれて、「tab」を押して下さい。



「2007/01/01」に自動的に変換されましたね。それでは、2行目をクリックしてみましょう。



右側の表示が、2行目に連動しましたね。
ここで、「このバタンを・・・・」を押すと、必須Checkがかかり、以下の画面が表示されます。


この様に、Tableと連動するJTextFieldが簡単にできます。
なお、Qty欄は、LongFieldという、Golfのコンポーネントで、整数しか受け付けません。
数字、+-の記号以外を入れても、無視されます。
また、initBindingで、右寄せになるよう設定してあります。
浮動小数をあつかう、DoubleFieldも用意してあります。
多桁の数字を扱うため、近いうちに、BigDecimalも用意しようと思います。
なおNetBeansでは、自作のコンポーネントも簡単にパレットに追加できます。
メニューからもできますが、ソースを右クリックして、「ツール」「パレットに追加」
が簡単です。ソースから直接編集画面のDrag and DropしてもOKです。これは感動もの。
それでは、Programをみてみましょう。
public class Example3Frame extends javax.swing.JFrame  implements GolfFormInterface {
    private FormManager formManager = null;
    private GolfTableModel golfTableModel = new GolfTableModel();
    private TableBindHandler table1BindHandler = null;
    
    /** Creates new form Example1Frame */
    public Example3Frame() {
        initComponents();
    }
    public void initBinding(HashMap params) {
        formManager = new FormManager(this);
        formManager.init();
        formManager.createReportList(jScrollPane1);
        formManager.setValidationFromCsvResource("Example3_bind.csv");
        formManager.setBindFromCsvResource("Example3_bind2.csv");
        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        formManager.setTableColumnFromCsvResource(
    			jTable1, "Test Table", golfTableModel, "Example3_table1.csv");
        for (int i=0; i < 5; i++) {
            addNewRow();
        }
        TableUtil.SetPreferedColumnWIdth(jTable1, new int[]{15,40,60,150,40,80 });
        table1BindHandler = GolfBindingUtil.createTableBindHandler (golfTableModel);
        GolfBindingUtil.bindTableRowColumn(table1BindHandler, golfTableModel,"jTextField1","ItemNo");
        GolfBindingUtil.bindTableRowColumn(table1BindHandler, golfTableModel,"jTextField2","StockNo");
        GolfBindingUtil.bindTableRowColumn(table1BindHandler, golfTableModel,"longField1","Qty");
        GolfBindingUtil.bindTableRowColumn(table1BindHandler, golfTableModel,"jTextField4","Date");    
        longField1.setHorizontalAlignment(JTextField.RIGHT);
    }
 
    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        addNewRowWhenCursorLastRow(); 
    }                                    

    private void jTable1KeyReleased(java.awt.event.KeyEvent evt) {                                    
        if (TableUtil.checkRowDownEvent(evt)) {
        addNewRowWhenCursorLastRow();            
        }

    }                                   
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         formManager.getFormValidationManager().Validate(true);
    }                                        
    
    public FormManager getFormManager() {
        return formManager;
    }

    public JMenuBar getMenu() {
        return null;
    }

    public JPanel getContentPanel() {
                return null;
    }
    private void addNewRow() {
                 TableUtil.addNewRowWithItemNo (golfTableModel,1,10,5);
    }
                                  

    private void addNewRowWhenCursorLastRow() {
        if (jTable1.getSelectedRow() == jTable1.getRowCount() -1) {
            addNewRow();
        }
    }

    public void processAction(HashMap params) {
    }
    public void setFormManger(FormManager formManager) {
        this.formManager = formManager;
    }

赤字の所が、Example2に追加した所です。
TableBindHandlerが新たに追加になり、これがTableとJTextFieldのBindingを管理しています。
Validatorは、基本的にTableの項目に設定します。JTextFieldにも設定しても構いませんが、
エラーが2重に表示されてしまいます。ただし、ShortDateやLognDateのFormatterとして、機能
させるため、DateValidatorは、JTextFildにも設定した方が良いと思います。
それでは、次のExampleで、画面の一部のみを置き換える機能を見ていきましょう。

リンク

Example 4へのリンク
GOLF HOMEへのリンク