📄 gridcontroller.java
字号:
}
// Receive DataStatusChanged info from MTab
m_mTab.addDataStatusListener(this);
// Receive vetoableChange info from MTable when saving
m_mTab.getTableModel().addVetoableChangeListener(this);
// Selection Listener -> valueChanged
vTable.getSelectionModel().addListSelectionListener(this);
// Navigation (RowChanged)
m_mTab.addPropertyChangeListener(vTable);
// Update UI
vTable.autoSize(true);
setTabLevel(m_mTab.getTabLevel());
// Set initial presentation
if (onlyMultiRow || !m_mTab.isSingleRow())
switchMultiRow();
else
switchSingleRow();
// log.config( "GridController.dynInit (" + mTab.toString() + ") - fini");
return true;
} // initGrid
/**
* Include Tab
* @param gc grod controller to add
* @return true if included
*/
public boolean includeTab (GridController gc)
{
MTab imcludedMTab = gc.getMTab();
if (m_mTab.getIncluded_Tab_ID () != imcludedMTab.getAD_Tab_ID())
return false;
//
vIncludedGC = gc;
vIncludedGC.switchMultiRow();
//
Dimension size = getPreferredSize();
srPane.setResizeWeight(.75); // top part gets 75%
srPane.add(vIncludedGC, JSplitPane.BOTTOM);
srPane.setBottomComponent(vIncludedGC);
srPane.setDividerSize (5);
//
int height = 150;
vIncludedGC.setPreferredSize(new Dimension(600, height));
setPreferredSize(new Dimension(size.width, size.height+height));
srPane.setDividerLocation (size.height);
//
imcludedMTab.setIncluded (true);
imcludedMTab.query (false, 0);
//
JRootPane rt = SwingUtilities.getRootPane(this);
if (rt == null)
System.out.println("Root pane null");
else
{
System.out.println("Root=" + rt);
rt.addMouseListener(vIncludedGC);
Component gp = rt.getGlassPane();
if (gp == null)
System.out.println("No Glass Pane");
else
{
System.out.println("Glass=" + gp);
gp.addMouseListener(vIncludedGC);
}
}
vIncludedGC.addMouseListener(vIncludedGC);
vIncludedGC.enableEvents(AWTEvent.HIERARCHY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
/**
vIncludedGC.splitPane.addMouseListener(vIncludedGC);
vIncludedGC.cardPanel.addMouseListener(vIncludedGC);
vIncludedGC.mrPane.addMouseListener(vIncludedGC);
vIncludedGC.vTable.addMouseListener(vIncludedGC);
**/
return true;
} // IncludeTab
/**
* Get Title
* @return title
*/
public String getTitle ()
{
return m_mTab.getName();
} // getTitle
/**
* Setup Multi-Row Table (add fields)
* @param aPanel Panel
* @param mTab Model Tab
* @param table JTable
* @return size
*/
private int setupVTable (APanel aPanel, MTab mTab, VTable table)
{
if (!mTab.isDisplayed())
return 0;
int size = mTab.getFieldCount ();
TableColumnModel tcm = table.getColumnModel();
if (size != tcm.getColumnCount())
throw new IllegalStateException("TableColumn Size <> TableModel");
for (int i = 0; i < size; i++)
{
MField mField = mTab.getField (i);
TableColumn tc = tcm.getColumn(i);
tc.setMinWidth(30);
//
if (mField.getColumnName().equals(tc.getIdentifier().toString()))
{
if (mField.getDisplayType () == DisplayType.RowID)
{
tc.setCellRenderer (new VRowIDRenderer (false));
tc.setCellEditor (new VRowIDEditor (false));
tc.setHeaderValue ("");
tc.setMaxWidth (2);
}
else
{
// need to set CellEditor explicitly as default editor based on class causes problem (YesNo-> Boolean)
if (mField.isDisplayed ())
{
tc.setCellRenderer (new VCellRenderer (mField));
VCellEditor ce = new VCellEditor (mField);
tc.setCellEditor (ce);
//
tc.setHeaderValue (mField.getHeader ());
tc.setPreferredWidth (Math.max (mField.getDisplayLength (), 30));
tc.setHeaderRenderer (new VHeaderRenderer (mField.getDisplayType ()));
// Enable Button actions in grid
if (mField.getDisplayType () == DisplayType.Button)
{
VEditor button = ce.getEditor ();
if (button != null && aPanel != null)
((JButton)button).addActionListener (aPanel);
}
}
else // column not displayed
{
TableCellNone tcn = new TableCellNone(mField.getColumnName());
tc.setCellRenderer (tcn);
tc.setCellEditor (tcn);
tc.setHeaderValue (null);
tc.setMinWidth (0);
tc.setMaxWidth (0);
tc.setPreferredWidth (0);
}
}
// System.out.println ("TableColumnID " + tc.getIdentifier ()
// + " Renderer=" + tc.getCellRenderer ()
// + mField.getHeader ());
} // found field
else
log.log(Level.SEVERE, "TableColumn " + tc.getIdentifier ()
+ " <> MField " + mField.getColumnName() + mField.getHeader());
} // for all fields
return size;
} // setupVTable
/**
* Activate Grid Controller.
* Called by APanel when GridController is displayed (foreground)
*/
public void activate ()
{
// Tree to be initiated on second/.. tab
if (m_mTab.isTreeTab() && m_mTab.getTabNo() != 0)
{
int AD_Tree_ID = Env.getContextAsInt (Env.getCtx(), m_WindowNo, "AD_Tree_ID");
if (AD_Tree_ID == 0)
AD_Tree_ID = MTree.getDefaultAD_Tree_ID (
Env.getAD_Client_ID(Env.getCtx()), m_mTab.getKeyColumnName());
m_tree.initTree (AD_Tree_ID);
}
} // activate
/**
* Register ESC Actions
* - overwrite VTable's Keystroks assigment for ESC
* @param aIgnore ignore
*/
public void registerESCAction (AppsAction aIgnore)
{
int c = VTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT;
vTable.getInputMap(c).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), aIgnore.getName());
vTable.getActionMap().put(aIgnore.getName(), aIgnore);
// AEnv.printActionInputMap(vTable);
} // registerESCAction
/**
* Query Tab and resize Table
* (called from APanel)
* @param onlyCurrentRows only current rows
* @param onlyCurrentDays how many days back
*/
public void query (boolean onlyCurrentRows, int onlyCurrentDays)
{
// start loading while building screen
m_mTab.query(onlyCurrentRows, onlyCurrentDays);
// Update UI
if (!isSingleRow())
vTable.autoSize(true);
} // query
/**************************************************************************
* Switch from single to multi & vice versa
*/
public void switchRowPresentation()
{
stopEditor(true);
if (m_singleRow)
switchMultiRow();
else
switchSingleRow();
} // switchRowPresentation
/**
* Switch to SingleRow Presentation
*/
public void switchSingleRow()
{
if (m_onlyMultiRow)
return;
cardLayout.first(cardPanel);
m_singleRow = true;
dynamicDisplay(0);
// vPanel.requestFocus();
} // switchSingleRow
/**
* Switch to MultiRow Presentation
*/
public void switchMultiRow()
{
cardLayout.last(cardPanel);
m_singleRow = false;
vTable.autoSize(true); // resizes
// vTable.requestFocus();
} // switchSingleRow
/**
* Is Single Row presentation
* @return true if Single Row is displayed
*/
public boolean isSingleRow()
{
return m_singleRow;
} // isSingleRow
/**************************************************************************
* Remove Listener - pass on to MTab
* @param l listener
*/
public synchronized void removeDataStatusListener(DataStatusListener l)
{
m_mTab.removeDataStatusListener(l);
} // removeDataStatusListener
/**
* Add Data Status Listener - pass on to MTab
* @param l listener
*/
public synchronized void addDataStatusListener(DataStatusListener l)
{
m_mTab.addDataStatusListener(l);
}
/**
* Data Status Listener - for MTab events.
* <p>
* Callouts are processed here for GUI changes
* - same as in MTab.setValue for batch changes
* <p>
* calls dynamicDisplay
* @param e event
*/
public void dataStatusChanged(DataStatusEvent e)
{
// if (e.getChangedColumn() == 0)
// return;
int col = e.getChangedColumn();
log.config("(" + m_mTab + ") Col=" + col + ": " + e.toString());
// Process Callout only for specific columns
if (col != 0)
{
MField mField = m_mTab.getField(col);
if (mField != null && mField.getCallout().length() > 0)
{
String msg = m_mTab.processFieldChange(mField); // Dependencies & Callout
if (msg.length() > 0)
ADialog.error(m_WindowNo, this, msg);
}
}
dynamicDisplay(col);
} // dataStatusChanged
/**************************************************************************
* List Selection Listener (VTable) - row changed
* @param e event
*/
public void valueChanged(ListSelectionEvent e)
{
// nothing or initiated by mouse (wait for "real" one)
if (e.getValueIsAdjusting())
return;
// no rows
if (m_mTab.getRowCount() == 0)
return;
// vTable.stopEditor(graphPanel);
int rowTable = vTable.getSelectedRow();
int rowCurrent = m_mTab.getCurrentRow();
log.config("(" + m_mTab.toString() + ") Row in Table=" + rowTable + ", in Model=" + rowCurrent);
if (rowTable == -1) // nothing selected
{
if (rowCurrent >= 0)
{
vTable.setRowSelectionInterval(rowCurrent, rowCurrent); // causes this method to be called again
return;
}
}
else
{
if (rowTable != rowCurrent)
m_mTab.navigate(rowTable);
dynamicDisplay(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -