📄 info.java
字号:
if (!m_ok) // did not press OK
{
m_results.clear();
m_table.removeAll();
m_table = null;
return;
}
// Multi Selection
if (m_multiSelection)
{
}
else // singleSelection
{
Object data = getSelectedRowKey();
if (data != null)
m_results.add(data);
}
Log.trace(Log.l4_Data, "SQL= " + getSelectedSQL());
// Save Settings of detail info screens
saveSelectionDetail();
// Cleanup
m_table.removeAll();
m_table = null;
} // saveSelection
/**
* Get the key of currently selected row
* @return selected key
*/
protected Integer getSelectedRowKey()
{
int row = m_table.getSelectedRow();
if (row != -1 && m_keyColumnIndex != -1)
{
Object data = m_table.getModel().getValueAt(row, m_keyColumnIndex);
if (data instanceof IDColumn)
data = ((IDColumn)data).getRecord_ID();
if (data instanceof Integer)
return (Integer)data;
}
return null;
} // getSelectedRowKey
/**
* Get selected Keys
* @return selected keys (Integers)
*/
public Object[] getSelectedKeys()
{
if (!m_ok || m_results.size() == 0)
return null;
return m_results.toArray();
} // getSelectedKeys;
/**
* Get (first) selected Key
* @return selected key
*/
public Object getSelectedKey()
{
if (!m_ok || m_results.size() == 0)
return null;
return m_results.get(0);
} // getSelectedKey
/**
* Is cancelled?
* - if pressed Cancel = true
* - if pressed OK or window closed = false
* @return true if cancelled
*/
public boolean isCancelled()
{
return m_cancel;
} // isCancelled
/**
* Get where clause for (first) selected key
* @return WHERE Clause
*/
public String getSelectedSQL()
{
// No results
Object[] keys = getSelectedKeys();
if (keys == null || keys.length == 0)
{
Log.trace(Log.l3_Util, "Info.getSelectedSQL - no Results - OK=" + m_ok + ", Cancel=" + m_cancel);
return "";
}
//
StringBuffer sb = new StringBuffer(getKeyColumn());
if (keys.length > 1)
sb.append(" IN (");
else
sb.append("=");
// Add elements
for (int i = 0; i < keys.length; i++)
{
if (getKeyColumn().endsWith("_ID"))
sb.append(keys[i].toString()).append(",");
else
sb.append("'").append(keys[i].toString()).append("',");
}
sb.replace(sb.length()-1, sb.length(), "");
if (keys.length > 1)
sb.append(")");
return sb.toString();
} // getSelectedSQL;
/**
* (Button) Action Listener & Popup Menu
* @param e event
*/
public void actionPerformed(ActionEvent e)
{
// Popup => Calculator
if (e.getSource().equals(calcMenu))
{
BigDecimal number = null;
Object data = m_table.getSelectedValue();
try
{
if (data != null)
{
if (data instanceof BigDecimal)
number = (BigDecimal)data;
else
number = new BigDecimal(data.toString());
}
}
catch (Exception ex) {}
Calculator c = new Calculator(null, number);
c.setVisible(true);
return;
} // popup
// Confirm Panel
String cmd = e.getActionCommand();
if (cmd.equals(ConfirmPanel.A_OK))
{
m_ok = true;
dispose();
}
else if (cmd.equals(ConfirmPanel.A_CANCEL))
{
m_cancel = true;
dispose();
}
//
else if (cmd.equals(ConfirmPanel.A_HISTORY))
showHistory();
else if (cmd.equals(ConfirmPanel.A_CUSTOMIZE))
customize();
else if (cmd.equals(ConfirmPanel.A_ZOOM))
zoom();
// Default
else
executeQuery();
} // actionPerformed
/**
* Zoom to target
* @param AD_Window_ID window id
* @param zoomQuery zoom query
*/
void zoom (int AD_Window_ID, MQuery zoomQuery)
{
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
AWindow frame = new AWindow();
if (!frame.initWindow(AD_Window_ID, zoomQuery, false)) // !IsSOTrx
return;
AEnv.showCenterScreen(frame);
if (this.isModal())
{
this.setModal(false); // remove modal option has no effect
this.dispose();
}
frame = null;
setCursor(Cursor.getDefaultCursor());
} // zoom
/**
* dispose
*/
public void dispose()
{
Log.trace(Log.l3_Util, "Info.dispose");
// End Worker
if (m_worker != null)
{
// worker continues, but it does not block UI
if (m_worker.isAlive())
m_worker.interrupt();
Log.trace(Log.l4_Data, "Info.dispose - Worker alive=" + m_worker.isAlive());
}
m_worker = null;
//
saveSelection();
removeAll();
super.dispose();
} // dispose
/**
* Get Table name Synonym
* @return table name
*/
String getTableName()
{
return m_tableName;
} // getTableName
/**
* Get Key Column Name
* @return column name
*/
String getKeyColumn()
{
return m_keyColumn;
} // getKeyColumn
/*************************************************************************/
/**
* Table Selection Changed
* @param e event
*/
public void valueChanged(ListSelectionEvent e)
{
if (e.getValueIsAdjusting())
return;
enableButtons();
} // calueChanged
/**
* Enable OK, History, Zoom if row selected
*/
private void enableButtons ()
{
boolean enable = m_table.getSelectedRow() != -1;
confirmPanel.getOKButton().setEnabled(enable);
if (hasHistory())
confirmPanel.getHistoryButton().setEnabled(enable);
if (hasZoom())
confirmPanel.getZoomButton().setEnabled(enable);
} // enableButtons
/*************************************************************************/
/**
* Get dynamic WHERE part of SQL
* To be overwritten by concrete classes
* @return WHERE clause
*/
abstract String getSQLWhere();
/**
* Set Parameters for Query
* To be overwritten by concrete classes
* @param pstmt statement
* @throws SQLException
*/
abstract void setParameters(PreparedStatement pstmt) throws SQLException;
/**
* History dialog
* To be overwritten by concrete classes
*/
void showHistory() {}
/**
* Has History (false)
* To be overwritten by concrete classes
* @return true if it has history (default false)
*/
boolean hasHistory() {return false;}
/**
* Customize dialog
* To be overwritten by concrete classes
*/
void customize() {}
/**
* Has Customize (false)
* To be overwritten by concrete classes
* @return true if it has customize (default false)
*/
boolean hasCustomize() {return false;}
/**
* Zoom action
* To be overwritten by concrete classes
*/
void zoom() {}
/**
* Has Zoom (false)
* To be overwritten by concrete classes
* @return true if it has zoom (default false)
*/
boolean hasZoom() {return false;}
/**
* Save Selection Details
* To be overwritten by concrete classes
*/
void saveSelectionDetail() {}
/*************************************************************************/
/**
* Mouse Clicked
* @param e event
*/
public void mouseClicked(MouseEvent e)
{
// Log.trace(Log.l6_Database, "Info.mouseClicked",
// "ClickCount=" + e.getClickCount() + ", Right=" + SwingUtilities.isRightMouseButton(e)
// + ", r=" + m_table.getSelectedRow() + ", c=" + m_table.getSelectedColumn());
// Double click with selected row => exit
if (e.getClickCount() > 1 && m_table.getSelectedRow() != -1)
{
m_ok = true; // double_click same as OK
dispose();
}
// Right Click => start Calculator
else if (SwingUtilities.isRightMouseButton(e))
{
popup.show(e.getComponent(), e.getX(), e.getY());
}
} // mouseClicked
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
/**
* Worker
*/
class Worker extends Thread
{
/**
* Do Work
*/
public void run()
{
Log.trace(Log.l3_Util, "Info.Worker.run");
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
setStatusLine(Msg.getMsg(Env.getCtx(), "StartSearch"), false);
// Clear Table
m_table.setRowCount(0);
//
StringBuffer sql = new StringBuffer (m_sqlMain);
String dynWhere = getSQLWhere();
if (dynWhere.length() > 0)
sql.append(dynWhere); // includes first AND
sql.append(m_sqlAdd);
String xSql = Access.addROAccessSQL(Env.getCtx(), sql.toString(), getTableName(), true);
try
{
PreparedStatement pstmt = DB.prepareStatement(xSql);
Log.trace(Log.l4_Data, "SQL=" + xSql);
setParameters (pstmt);
// Log.trace(Log.l6_Database, "Info.Worker.run - start query");
ResultSet rs = pstmt.executeQuery();
// Log.trace(Log.l6_Database, "Info.Worker.run - end query");
while (!isInterrupted() & rs.next())
{
int row = m_table.getRowCount();
m_table.setRowCount(row+1);
int colOffset = 1; // columns start with 1
for (int col = 0; col < m_layout.length; col++)
{
Object data = null;
Class c = m_layout[col].getColClass();
int colIndex = col + colOffset;
if (c == IDColumn.class)
data = new IDColumn(rs.getInt(colIndex));
else if (c == Boolean.class)
data = new Boolean(rs.getString(colIndex).equals("Y"));
else if (c == Timestamp.class)
data = rs.getTimestamp(colIndex);
else if (c == BigDecimal.class)
data = rs.getBigDecimal(colIndex);
else if (c == Double.class)
data = new Double(rs.getDouble(colIndex));
else if (c == Integer.class)
data = new Integer(rs.getInt(colIndex));
else if (c == KeyNamePair.class)
{
String display = rs.getString(colIndex);
int key = rs.getInt(colIndex+1);
data = new KeyNamePair(key, display);
colOffset++;
}
else
data = rs.getString(colIndex);
// store
m_table.setValueAt(data, row, col);
// Log.trace(Log.l6_Database, "r=" + row + ", c=" + col + " " + m_layout[col].getColHeader(),
// "data=" + data.toString() + " " + data.getClass().getName() + " * " + m_table.getCellRenderer(row, col));
}
}
Log.trace(Log.l4_Data, "Info.Worker.run - interrupted=" + isInterrupted());
rs.close();
pstmt.close();
}
catch (SQLException e)
{
Log.error("Info.Worker.run - " + xSql, e);
}
m_table.autoSize();
//
setCursor(Cursor.getDefaultCursor());
int no = m_table.getRowCount();
setStatusLine(Integer.toString(no) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false);
setStatusDB(Integer.toString(no));
} // run
} // Worker
} // Info
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -