package demo3;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import org.openswing.swing.client.*;
import org.openswing.swing.lookup.client.*;
import org.openswing.swing.message.receive.java.*;
import org.openswing.swing.table.client.*;
import org.openswing.swing.table.columns.client.*;
import org.openswing.swing.table.java.*;
import java.text.ParseException;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Grid Frame</p>
* <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
* <p> </p>
* @author Mauro Carniel
* @version 1.0
*/
public class GridFrame extends JFrame {
GridControl grid = new GridControl();
JPanel buttonsPanel = new JPanel();
ReloadButton reloadButton = new ReloadButton();
DeleteButton deleteButton = new DeleteButton();
FlowLayout flowLayout1 = new FlowLayout();
TextColumn colText = new TextColumn();
DecimalColumn colDecimal = new DecimalColumn();
CurrencyColumn colCurrency = new CurrencyColumn();
DateColumn colDate = new DateColumn();
ComboColumn colCombo = new ComboColumn();
CodLookupColumn colLookup = new CodLookupColumn();
TextColumn textColumn1 = new TextColumn();
CheckBoxColumn colCheck = new CheckBoxColumn();
InsertButton insertButton = new InsertButton();
private Connection conn = null;
EditButton editButton = new EditButton();
SaveButton saveButton = new SaveButton();
CopyButton copyButton = new CopyButton();
ExportButton exportButton = new ExportButton();
ButtonColumn colButton = new ButtonColumn();
NavigatorBar navigatorBar1 = new NavigatorBar();
FormattedTextColumn colFormattedText = new FormattedTextColumn();
IntegerColumn colInt = new IntegerColumn();
MultiLineTextColumn colMultiLine = new MultiLineTextColumn();
FilterButton filterButton = new FilterButton();
SpinnerNumberColumn colSpinnerNumber = new SpinnerNumberColumn();
SpinnerListColumn colSpinnerList = new SpinnerListColumn();
public GridFrame(Connection conn,GridFrameController controller) {
this.conn = conn;
try {
super.setDefaultCloseOperation(super.EXIT_ON_CLOSE);
jbInit();
setSize(750,600);
grid.setController(controller);
grid.setGridDataLocator(controller);
LookupController lookupController = new DemoLookupController(conn);
colLookup.setLookupController(lookupController);
lookupController.setVisibleStatusPanel(true);
// set top grid content, i.e. the first row...
grid.setTopGridDataLocator(new GridDataLocator() {
public Response loadData(
int action,
int startIndex,
Map filteredColumns,
ArrayList currentSortedColumns,
ArrayList currentSortedVersusColumns,
Class valueObjectType,
Map otherGridParams) {
ArrayList rows = new ArrayList();
TestVO vo = new TestVO();
vo.setDateValue(new java.sql.Date(System.currentTimeMillis()));
vo.setStringValue("This is a locked row");
rows.add(vo);
return new VOListResponse(rows,false,rows.size());
}
});
// set bottom grid content, i.e. the last two rows...
grid.setBottomGridDataLocator(new GridDataLocator() {
public Response loadData(
int action,
int startIndex,
Map filteredColumns,
ArrayList currentSortedColumns,
ArrayList currentSortedVersusColumns,
Class valueObjectType,
Map otherGridParams) {
ArrayList rows = getTotals();
return new VOListResponse(rows,false,rows.size());
}
});
grid.setBottomGridController(new GridController() {
/**
* Method used to define the background color for each cell of the grid.
* @param rowNumber selected row index
* @param attributedName attribute name related to the column currently selected
* @param value object contained in the selected cell
* @return background color of the selected cell
*/
public Color getBackgroundColor(int row,String attributedName,Object value) {
return new Color(220,220,220);
}
/**
* Method used to define the font to use for each cell of the grid.
* @param rowNumber selected row index
* @param attributeName attribute name related to the column currently selected
* @param value object contained in the selected cell
* @param defaultFont default font currently in used with this column
* @return font to use for the current cell; null means default font usage; default value: null
*/
public Font getFont(int row,String attributeName,Object value,Font defaultFont) {
if (attributeName.equals("currencyValue") || attributeName.equals("numericValue"))
return new Font(defaultFont.getFontName(),Font.BOLD,defaultFont.getSize());
else
return null;
}
});
setVisible(true);
}
catch(Exception e) {
e.printStackTrace();
}
}
/**
* @return calculate totals for numeric and currency colums and return one row having those totals.
*/
private ArrayList getTotals() {
ArrayList rows = new ArrayList();
TestVO vo = new TestVO();
vo.setDateValue(new java.sql.Date(System.currentTimeMillis()));
vo.setStringValue("Total currencies");
BigDecimal tot = new BigDecimal(0);
float tot2 = 0;
TestVO testVO = null;
for(int i=0;i<grid.getVOListTableModel().getRowCount();i++) {
testVO = (TestVO)grid.getVOListTableModel().getObjectForRow(i);
if (testVO.getCurrencyValue()!=null)
tot = tot.add(testVO.getCurrencyValue());
if (testVO.getNumericValue()!=null)
tot2 = tot2 + testVO.getNumericValue().floatValue();
}
vo.setCurrencyValue(tot);
vo.setNumericValue(new Float(tot2));
rows.add(vo);
return rows;
}
public void reloadData() {
grid.reloadData();
}
private void jbInit() throws Exception {
grid.setFunctionId("F1");
grid.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
buttonsPanel.setLayout(flowLayout1);
flowLayout1.setAlignment(FlowLayout.LEFT);
grid.setCopyButton(copyButton);
grid.setDeleteButton(deleteButton);
grid.setEditButton(editButton);
grid.setExportButton(exportButton);
grid.setInsertButton(insertButton);
grid.setNavBar(navigatorBar1);
grid.setReloadButton(reloadButton);
grid.setFilterButton(filterButton);
grid.setRowHeight(40);
grid.setSaveButton(saveButton);
grid.setLockedColumns(2);
grid.setLockedRowsOnTop(1);
//colButton.setBorder(BorderFactory.createEmptyBorder());
grid.setLockedRowsOnBottom(1);
grid.setValueObjectClassName("demo3.TestVO");
colText.setColumnName("stringValue");
colText.setColumnSortable(true);
colText.setEditableOnInsert(true);
colText.setSortVersus(org.openswing.swing.util.java.Consts.ASC_SORTED);
colText.setMaxCharacters(5);
colText.setTrimText(true);
colText.setUpperCase(true);
colDecimal.setDecimals(2);
colDecimal.setColumnDuplicable(true);
colDecimal.setColumnName("numericValue");
colDecimal.setColumnRequired(false);
colDecimal.setEditableOnEdit(true);
colDecimal.setEditableOnInsert(true);
colCurrency.setColumnDuplicable(true);
colCurrency.setColumnName("currencyValue");
colCurrency.setColumnRequired(false);
colCurrency.setDecimals(3);
colCurrency.setEditableOnEdit(true);
colCurrency.setEditableOnInsert(true);
colCurrency.setGrouping(true);
colDate.setColumnDuplicable(true);
colDate.setColumnFilterable(true);
colDate.setColumnName("dateValue");
colDate.setColumnRequired(false);
colDate.setEditableOnEdit(true);
colDate.setEditableOnInsert(true);
Calendar cal = Calendar.getInstance();
cal.set(cal.YEAR,1983);
cal.set(cal.MONTH,1);
cal.set(cal.DAY_OF_MONTH,24);
colDate.setDefaultDate(cal);
colCombo.setDomainId("ORDERSTATE");
colCombo.setColumnDuplicable(true);
colCombo.setColumnName("comboValue");
colCombo.setColumnRequired(false);
colCombo.setEditableOnEdit(true);
colCombo.setEditableOnInsert(true);
colCombo.setColumnFilterable(true);
colLookup.setColumnDuplicable(true);
colLookup.setColumnName("lookupValue");
colLookup.setEditableOnEdit(true);
colLookup.setEditableOnInsert(true);
colLookup.setMaxCharacters(5);
textColumn1.setColumnDuplicable(true);
textColumn1.setColumnName("descrLookupValue");
textColumn1.setColumnRequired(false);
textColumn1.setPreferredWidth(150);
colCheck.setColumnDuplicable(true);
colCheck.setPositiveValue("Y");
colCheck.setNegativeValue("N");
colCheck.setColumnFilterable(true);
colCheck.setColumnName("checkValue");
colCheck.setColumnRequired(false);
colCheck.setEditableOnEdit(true);
colCheck.setEditableOnInsert(true);
colCheck.setAllowNullValue(true);
colCheck.setEnableInReadOnlyMode(true);
insertButton.setText("insertButton1");
editButton.setText("editButton1");
saveButton.setText("saveButton1");
colButton.setColumnName("button");
colButton.setEditableOnEdit(true);
colButton.setHeaderColumnName("button");
colButton.setPreferredWidth(50);
colFormattedText.setColumnRequired(false);
colFormattedText.setColumnFilterable(true);
colFormattedText.setColumnName("formattedTextValue");
colFormattedText.setColumnSortable(false);
colFormattedText.setEditableOnEdit(true);
colFormattedText.setEditableOnInsert(true);
// MaskFormatter formatter = new MaskFormatter("(##)####.####");
// formatter.setValidCharacters("1234567890(.");
// MaskFormatter formatter = new MaskFormatter("###-##-####");
// formatter.setValidCharacters("0123456789-");
JFormattedTextField.AbstractFormatter formatter = new JFormattedTextField.AbstractFormatter() {
public Object stringToValue(String text) throws ParseException {
if (text==null || text.equals(""))
return null;
String t = "";
for(int i=0;i<text.length();i++)
if (Character.isDigit(text.charAt(i)))
t += text.charAt(i);
else
if (!( text.charAt(i)=='-' && (i==3 || i==6) ))
throw new ParseException("Invalid pattern!",i);
return new BigDecimal(t);
}
public String valueToString(Object value) throws ParseException {
if (value==null)
return null;
String t = value.toString();
if (t.length()!=9)
throw new ParseException("Invalid pattern!",t.length()-1);
t = t.substring(0,3)+"-"+t.substring(3,5)+"-"+t.substring(5);
return t;
}
};
colFormattedText.setFormatter(formatter);
colInt.setColumnFilterable(false);
colInt.setColumnName("intValue");
colInt.setColumnSortable(false);
colInt.setEditableOnEdit(true);
colInt.setEditableOnInsert(true);
colMultiLine.setColumnName("multiLineTextValue");
colMultiLine.setEditableOnEdit(true);
colMultiLine.setEditableOnInsert(true);
colMultiLine.setPreferredWidth(150);
//colMultiLine.setMaxCharacters(3);
colSpinnerNumber.setColumnName("year");
colSpinnerNumber.setInitialValue(new Double(2010.0));
colSpinnerNumber.setMinValue(new Double(2010.0));
colSpinnerNumber.setMaxValue(new Double(2015.0));
colSpinnerNumber.setEditableOnEdit(true);
colSpinnerList.setColumnName("comboValue");
colSpinnerList.setDomainId("ORDERSTATE");
colSpinnerList.setAdditionalHeaderColumnName("");
colSpinnerList.setEditableOnEdit(true);
colSpinnerList.setHeaderColumnName("spinnerValue");
this.getContentPane().add(grid, BorderLayout.CENTER);
this.getContentPane().add(buttonsPanel, BorderLayout.NORTH);
buttonsPanel.add(insertButton, null);
buttonsPanel.add(copyButton, null);
buttonsPanel.add(editButton, null);
buttonsPanel.add(reloadButton, null);
buttonsPanel.add(saveButton, null);
buttonsPanel.add(exportButton, null);
buttonsPanel.add(deleteButton, null);
buttonsPanel.add(filterButton,null);
buttonsPanel.add(navigatorBar1, null);
grid.getColumnContainer().add(colText, null);
grid.getColumnContainer().add(colDecimal, null);
grid.getColumnContainer().add(colMultiLine, null);
grid.getColumnContainer().add(colInt, null);
grid.getColumnContainer().add(colSpinnerNumber, null);
grid.getColumnContainer().add(colCurrency, null);
grid.getColumnContainer().add(colSpinnerList, null);
grid.getColumnContainer().add(colFormattedText, null);
grid.getColumnContainer().add(colDate, null);
grid.getColumnContainer().add(colCombo, null);
grid.getColumnContainer().add(colButton, null);
grid.getColumnContainer().add(colLookup, null);
grid.getColumnContainer().add(textColumn1, null);
grid.getColumnContainer().add(colCheck, null);
colButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
}
public GridControl getGrid() {
return grid;
}
}