Article View: borland.public.jbuilder.java.swing
Article #11472Using the SwingWorker Class for GUI responsiveness
From: John Blalock
Date: Mon, 24 May 1999 00:00
Date: Mon, 24 May 1999 00:00
196 lines
8242 bytes
8242 bytes
I am using the SwingWorker class to allow the GUI to remain responsive while
a database load occurs in the Borland GridControl.
However, when I take the menu option off my main frame window, the JInternal
frame pops up with an empty grid control and then later the data is
populated. However, the menu and GUI is frozen until the data is populated.
If I take the menu option again, the JInternalFrame is not even displayed
until the data is populated. I am using the JBuilder 2.01, build
002.010.210.000 and the Swing components which came with that release. I am
using the Oracle 7 JDBC OCI driver. What am I doing wrong? I placed the
SwingWorker code originally in the "internalFrameOpened" event. However, it
looks like the opened event is not even being triggered even though the
JinternalFrame is opening. So I moved the code to the JBInit method.
Below is a listing of the code for the JInternalFrame. Thanks for your
reply. I have bothered with this for several days now.
package PositionManager;
import java.awt.*;
import java.awt.event.*;
import java.awt.Dimension;
import java.sql.*;
import java.text.*;
import com.sun.java.swing.*;
import borland.sql.dataset.*;
import borland.jbcl.dataset.*;
import borland.jbcl.control.*;
import com.sun.java.swing.event.*;
public class MainFrame_ReconReviewList extends JInternalFrame
{
// reference to MainFrame object
MainFrame frmMain;
public MainFrame_ReconReviewList frmReconReviewList;
// dataset for query
QueryDataSet qdsReconReviewList = new QueryDataSet();
// grid control to display query
GridControl gridReconReviewList = new GridControl();
// holds parameters for query
ParameterRow parmReconDate = new ParameterRow();
public String szReconDate;
// Column to hold reconciliaton date parameter
Column colReconDate = new Column();
Column colRCRVW = new Column();
Column colACFAN = new Column();
Column colIPCUS = new Column();
Column colR_SHORT_DESCRIPTION = new Column();
Column colN_SHORT_DESCRIPTION = new Column();
Column colS_SHORT_DESCRIPTION = new Column();
Column colC_PRIMARY_VARIANCE = new Column();
Column colC_FUND_VARIANCE = new Column();
Column colC_SECONDARY_VARIANCE = new Column();
Column colADID = new Column();
// SQL to get reconciliation review list
public static final String GET_RECON_REVIEW_LIST =
"SELECT RCRVW, ACFAN, IPCUS, R_SHORT_DESCRIPTION, " +
"N_SHORT_DESCRIPTION, S_SHORT_DESCRIPTION, " +
"C_PRIMARY_VARIANCE, C_FUND_VARIANCE, C_SECONDARY_VARIANCE, " +
"ADID FROM FVPOSREC_RASSELECT WHERE RCRDTE = :RECON_DATE";
/**
* Constructor
*/
public MainFrame_ReconReviewList(String szTitle,
boolean bResizable, boolean bClosable, boolean bMaximizable,
boolean bIconifiable, Frame parent)
{
super(szTitle, bResizable, bClosable, bMaximizable, bIconifiable);
try
{
// get reference to MainFrame object
frmMain = (MainFrame)parent;
frmReconReviewList = this;
jbInit();
pack();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* Initialize components
* @param None
* @return None
*/
private void jbInit() throws Exception
{
gridReconReviewList.setAutoEdit(false);
gridReconReviewList.setAutoInsert(false);
gridReconReviewList.setSortOnHeaderClick(true);
gridReconReviewList.setReadOnly(true);
gridReconReviewList.setSelectRow(true);
gridReconReviewList.setShowPopup(false);
// add the grid to the window
getContentPane().add(gridReconReviewList);
// create new SwingWorker Thread to get reconciliation data
final SwingWorker worker = new SwingWorker()
{
public Object construct()
{
Object objNull = null;
try
{
// get the reconciliation date from the
// combobox on the MainFrame window
szReconDate = frmMain.getReconDate();
// set reconciliation date parameter
colReconDate.setColumnName("RECON_DATE");
colReconDate.setDataType(borland.jbcl.util.Variant.DATE);
parmReconDate.addColumn("RECON_DATE",borland.jbcl.util.Variant.DATE);
// convert string date to a real date
parmReconDate.setDate("RECON_DATE",
java.sql.Date.valueOf(szReconDate));
// set query dataset properties
qdsReconReviewList.setResolvable(false);
qdsReconReviewList.setEditable(false);
qdsReconReviewList.setEnableUpdate(false);
qdsReconReviewList.setEnableInsert(false);
qdsReconReviewList.setEnableDelete(false);
qdsReconReviewList.setReadOnly(true);
// sets the SQL for the query dataset
qdsReconReviewList.setQuery(
new borland.sql.dataset.QueryDescriptor(
frmMain.db, GET_RECON_REVIEW_LIST,
parmReconDate, true, Load.ALL));
// creates column information
colRCRVW.setCaption("Reviewed");
colRCRVW.setColumnName("RCRVW");
colRCRVW.setWidth(1);
colACFAN.setCaption("Customer Account");
colACFAN.setColumnName("ACFAN");
colACFAN.setWidth(20);
colIPCUS.setCaption("CUSIP");
colIPCUS.setColumnName("IPCUS");
colIPCUS.setWidth(12);
colR_SHORT_DESCRIPTION.setCaption("Primary");
colR_SHORT_DESCRIPTION.setColumnName("R_SHORT_DESCRIPTION");
colR_SHORT_DESCRIPTION.setWidth(6);
colN_SHORT_DESCRIPTION.setCaption("Fund");
colN_SHORT_DESCRIPTION.setColumnName("N_SHORT_DESCRIPTION");
colN_SHORT_DESCRIPTION.setWidth(6);
colS_SHORT_DESCRIPTION.setCaption("Secondary");
colS_SHORT_DESCRIPTION.setColumnName("S_SHORT_DESCRIPTION");
colS_SHORT_DESCRIPTION.setWidth(6);
colC_PRIMARY_VARIANCE.setCaption("Primary Variance");
colC_PRIMARY_VARIANCE.setColumnName("C_PRIMARY_VARIANCE");
colC_PRIMARY_VARIANCE.setDisplayMask("##.######;##.######-");
colC_FUND_VARIANCE.setCaption("Fund Variance");
colC_FUND_VARIANCE.setColumnName("C_FUND_VARIANCE");
colC_FUND_VARIANCE.setDisplayMask("##.######;##.######-");
colC_SECONDARY_VARIANCE.setCaption("Secondary Variance");
colC_SECONDARY_VARIANCE.setColumnName("C_SECONDARY_VARIANCE");
colC_SECONDARY_VARIANCE.setDisplayMask("##.######;##.######-");
colADID.setCaption("Administrator");
colADID.setColumnName("ADID");
colADID.setWidth(15);
// sets the columns in the query
qdsReconReviewList.setColumns(new Column[] {
colRCRVW, colACFAN, colIPCUS, colR_SHORT_DESCRIPTION,
colN_SHORT_DESCRIPTION, colS_SHORT_DESCRIPTION,
colC_PRIMARY_VARIANCE, colC_FUND_VARIANCE,
colC_SECONDARY_VARIANCE, colADID});
}
catch (borland.jbcl.dataset.DataSetException dse)
{
}
finally
{
return objNull;
}
}
// update the grid with the reconciliation data
public void finished()
{
// attaches the dataset data to the grid
gridReconReviewList.setDataSet(qdsReconReviewList);
setTitle(szReconDate + " - Recon Analysis Review");
frmReconReviewList.invalidate();
}
};
}
}
blalockj@mindspring.com
Technical Details
Message-ID:
<7icb7g$r124@forums.borland.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 111d45,b15a82ec982225c8,start X-Google-Attributes: gid111d45,public From: "John Blalock" <blalockj@mindspring.com> Subject: Using the SwingWorker Class for GUI responsiveness Date: 1999/05/24 Message-ID: <7icb7g$r124@forums.borland.com> X-Deja-AN: 481625082 Organization: Another Netscape Collabra Server User Reply-To: "John Blalock" <NOSPAMblalockj@mindspring.com> Newsgroups: borland.public.jbuilder.java.swing X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3