Problems on deleting rows in UIX pages
Hi,
I am new on using BC4J, Struts and uiXML and I am having some problems on it. I have tried to make a simple create/update/delete web application.
First, I have created a DataAction which PageForward displays a table with data from a view object. This page allows the user to select a row and request its deletion by clicking on a submit button.
The event triggered by the submit button calls a DataAction that displays another PageForward, composed by a read-only form, that asks for confirmation. If the user confirms, a DataAction that performs the Delete method from the view is called and the deletion is successful.
A problem occurs when I change the readonly property of the fields of the confirmation form: the row deleted is not the selected, but a random one.
I would like to know why the readonly property of the fields change the Delete method behavior. Also, an example of a simple create/update/delete struts page flow would be appreciated.
Thanks in advance.
Verner.
Verner,
Are you using JDeveloper 10g Preview or JDeveloper 9i v9.0.3?
I'm not sure what problem you are having, but I just tried to reproduce your application by doing the following in JDeveloper 10g Preview:
1) Created new business components.
2) Created a new struts-config.xml.
3) Added to the Struts config (using the page flow modeler):
3.a) Browse data action and page forward to browse.uix
3.b) Confirm data action and page forward to confirm.uix
3.c) Delete data action.
3.d) Link from browse action to confirm action for outcome "delete".
3.e) Link from confirm action to delete action for outcome "delete".
3.f) Link from confirm action to browse action for outcome "cancel".
3.g) Link from delete action to browse action for outcome "success".
4) Then I made the delete action do the deletion by dragging the Delete operation from my data control onto the Delete data action in the page flow.
5) Then I created my UI pages.
browse.uix just has a read-only table created via the Data Control palette and then a delete button that fires the "delete" event when clicked. The delete handler returns the delete outcome.
confirm.uix has a read-only form also dragged from the Data Control palette for the same data control. There's a delete and a cancel button, each of which fire an event of the same name that returns an outcome of the same name.
When I run browseDataAction, I see my table. When I click "Delete", I see the read-only form with the details for the selected row. Clicking "Delete" from the confirmation page removes the same row I saw in the confirmation page, then goes back to the browse page showing the same range but with the given row removed.
If you continue to see a problem, what exactly is wrong? It should be the case that (A) the row selected in the table, (B) the row whose details are shown in the confirmation page, and (C) the row that gets deleted are the same row. If it's not the case that A = B = C, please give more details about what values of these three rows you are seeing. Is A=B but not =C? Or is B=C but not =A?
Hope this helps,
-brian
UIX Team
Similar Messages
-
Problem in deleting Rows of JTable after sorting it
Hi all,
I'm getting problems in Removing Row(s) after sorting a JTable.
Please find the code snippets at this URL. Thanks for your time...
http://forum.java.sun.com/thread.jsp?forum=31&thread=459736&start=15&range=15&hilite=false&q=Hi Abhijeet,
I tried it the way you said using
wdContext.nodeBirhtday_List().nodeItab().moveFirst();
// loop backwards to avoid index troubles
for (int i = n - 1; i >= 0; --i)
current_date = wdContext.nodeBirhtday_List().nodeItab().currentItabElement().getGbdat().getDate();
current_month = wdContext.nodeBirhtday_List().nodeItab().currentItabElement().getGbdat().getMonth();
if (( current_date != date_today ) && ( current_month != month_today ))
wdContext.nodeBirhtday_List().nodeItab().removeElement(wdContext.nodeBirhtday_List().nodeItab().
getElementAt(i));
wdContext.nodeBirhtday_List().nodeItab().moveNext();
It adds records...
According to Valerys Solution, the IPrivate<CustomController> doesnt show me the required nodes. and gives me 'Unable to resolve' error.
Can you please suggest where I am going wrong
Regards
Abdullah -
Javascript problems using HttpUnit while testing UIX pages
Hello JDeveloper Team
Need urgent help about testing my web pages written in UIX. I tried to use HttpUnit but I got Javascript errors. What is wrong with it ?
I also used HtmlUnit. It works well but writing code to check the html page that is produced from a UIX is a stomachache. I mean all the ids , names of components are so absurd words. A submit button for example is a link with an image inside it but has no name or id. So there is no way to reach it with a method of HtmlUnit library.
Can you please advice me a methodology to test my uix pages? Or is there any tool or application for this purpose ? It could be licensed . My company needs such a tool. I also tried AppPerfect but it does not support UIX.
I need your valuable opinions. An answer that is quick would be appreciated.
Thanksif you want an ID in the html, you can set it in the UIX file and it will appear
in the html -
Problem in deleting row from database in table component
Hi,
I have a table component that its content change by diffrent links.
in this table i have a hyperlink in each row to deleting that row from dataBase.
so i must get the current row .
i do it like this:
define a rowset in the page that have a delete query :
delete from response where responseID=?
in action of delete hyperlink ,i have:
Integer responseId=(Integer)responseDataProvider.
getValue("#{currentRow.value['responseID']}") ;
getSessionBean1().getResponseRowSet().setObject(1,responseId);
getSessionBean1().getResponseRowSet().execute();
but in first line occure a exception:
illigalArgument #{currentRow.value['responseID']}
thanks.by using data table
first you should get current record (row that recived action)
then delete it by using data provider.
I do not think that you could execute delete statement using rowSets because they just can provide Select statements.
btw , following code will retrive clicked row from data table and
delete that row
try {
RowKey rk = getTableRowGroup1().getRowKey();
if (rk != null) {
testDataProvider.removeRow(rk);
testDataProvider.commitChanges();
} catch (Exception ex) {
log("ErrorDescription", ex);
error(ex.getMessage());
hth
masoud -
Facing problem While deleting rows and adding rows
Hi,
In my form i have pass values to table rows by selecting values from Dropdown list.
i have taken 3 hidden obj and passing the dropdown values to hidden objects and then from hidden objects to table rows.
h1,h2,h2 are hidden obj
EMPNO,EMPNAME, DESIGNATION are drop downlist
i have add button with the following code
if(form1.P1.ItemSet.EMPNO.rawValue != null){
form1.P1.ItemSet.instanceManager.addInstance();
form1.P1.execInitialize();
var dynamicArray = form1.P1.resolveNode("ItemSet[" + arrayIncri + "]");
dynamicArray .EMPNO.rawValue = form1.P1.hidden.h1.rawValue;
dynamicArray .EMPNAME.rawValue = form1.P1.hidden.h2.rawValue;
dynamicArray .DESIGNATION.rawValue = form1.P1.hidden.h3.rawValue;
arrayIncri++;
form1.P1.SF1.EmpID.rawValue = null;
form1.P1.SF1.EmpName.rawValue = null;
form1.P1.SF1.Designation.rawValue = null;
My delete button code is
_ItemSet.removeInstance(this.parent.index);
form1.P1.execInitialize();
My problem is adding is happening while click and deleting is happening to the perticular row but once i delete paricular row then again if i want to add new row then it is taking null values . and agian if i click add then the values are passing to the next row
means i am getting null row if i do add funtionality after delete funtionality....
Please help me out in this..
Subba reddyHi,
I got the answer for this query, but when i do download and upload of the files from R/3 to GRC. Still it is not showing me the new transactions which were developed in R/3.
it means when i try to add the transaction in a function, under search mode with respective of the r/3 system, it is not showing me the search results.
What i did was, i run the reports /VIRSA/ZCC_DOWNLOAD_DESC & /VIRSA/ZCC_DOWNLOAD_SAPOBJ and uploaded them as below in GRC.
Text Objects - /VIRSA/ZCC_DOWNLOAD_DESC
permissions - /VIRSA/ZCC_DOWNLOAD_SAPOBJ
For each of the download i get 2 files for each and i tried to upload both of them but no luck.
Please suggest me, as am missing anything in this process
SV -
Hi,
i want to delete all rows in a table which will be automaticlly updatet in a thread. the problem is that i get somtimes the message 9>=9 or 8>=3. did somebody know what that means ?!?it means the row index that you are trying to remove doesnt exist.
9>=9 means that you are trying to remove row index 9 in a table that has only 9 itmes (remember its zero based)
there's probably something dodgy with you remove code.
off the top of my head try looping through with (rowcount - 1) -
Hai To All,
Iam using PL 05 i have enable DeleteRow option. If i click the deleterow the row is deleted but after saving the entry there is null value in database. for example if i have 2 row in the matrix if i delete last row the content is deleted after that iam saving the matrix. In the database i have 2 rows one with content and other with null value..
Whts the soultion of this....
Does anyone have idea reply me....
Regards,
AnithaHi Anitha,
For the delete option, you need to right a small function if its going to be ur own form.
Try using the following code...
Private Sub DeleteRow()
Dim oDBDSource As SAPbouiCOM.DBDataSource
Dim Count As Integer
Dim oMatrix As SAPbouiCOM.Matrix
Try
oDBDSource = objForm.DataSources.DBDataSources.Item("@TableName")
oMatrix = objForm.Items.Item("3").Specific
oMatrix.FlushToDataSource()
oMatrix.DeleteRow(strRow)
objForm.Update()
'objForm.DataSources.DBDataSources.Item("@TableName").RemoveRecord(strRow - 1)
oDBDSource.Clear()
oMatrix.FlushToDataSource()
oMatrix.LoadFromDataSource()
For Count = 1 To oDBDSource.Size - 1
oDBDSource.SetValue("Code", Count - 1, Count)
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Hope this helps.
Satish. -
Hi experts,
in the following method. I am deleting the records from the BAPI output table where the date and month do not correspond to todays date and current month.
When I execute the BAPI for one employee it gives me the correct output. ie one record. But when I execute it for all the employees and when I use the following code. It gives me a blank output.
public void wdDoInit()
//@@begin wdDoInit()
int date_today, current_date;
int month_today, current_month;
char date_satisfied, month_satisfied;
Date date = new Date(System.currentTimeMillis());
date_today = date.getDate();
month_today = date.getMonth();
int n = wdContext.nodeBirhtday_List().nodeItab().size();
int leadSelected = wdContext.nodeBirhtday_List().nodeItab().getLeadSelection();
// loop backwards to avoid index troubles
for (int i = n - 1; i >= 0; --i) {
current_date = wdContext.nodeBirhtday_List().nodeItab().currentItabElement().getGbdat().getDate();
current_month = wdContext.nodeBirhtday_List().nodeItab().currentItabElement().getGbdat().getMonth();
if (( current_date != date_today ) && ( current_month != month_today ))
wdContext.nodeBirhtday_List().nodeItab().removeElement(wdContext.nodeBirhtday_List().nodeItab().
getElementAt(i));
//@@end
can anybody please suggest me the solution
Regards
AbdullahHi Abhijeet,
I tried it the way you said using
wdContext.nodeBirhtday_List().nodeItab().moveFirst();
// loop backwards to avoid index troubles
for (int i = n - 1; i >= 0; --i)
current_date = wdContext.nodeBirhtday_List().nodeItab().currentItabElement().getGbdat().getDate();
current_month = wdContext.nodeBirhtday_List().nodeItab().currentItabElement().getGbdat().getMonth();
if (( current_date != date_today ) && ( current_month != month_today ))
wdContext.nodeBirhtday_List().nodeItab().removeElement(wdContext.nodeBirhtday_List().nodeItab().
getElementAt(i));
wdContext.nodeBirhtday_List().nodeItab().moveNext();
It adds records...
According to Valerys Solution, the IPrivate<CustomController> doesnt show me the required nodes. and gives me 'Unable to resolve' error.
Can you please suggest where I am going wrong
Regards
Abdullah -
Problem with UIX Pages in sub folders
I want to group my UIX pages into sub folders to maked definition of security constraints more convenient.
The New UIX Page wizard doesn't allow creation into a sub folder so I have created a blank page and then renamed it into a subfolder using File>>Rename menu option. However, now when I drag Data Control bindings onto the page they fail to bind properly. (No data appears when I run the page.)
Is there a fundamental problem with placing UIX pages into sub folders? Is it something I shouldn't do? Requiring a flat file structure seems an onerous restriction!
Thanks
Matthewyes. this is a known problem when you are running UIX pages and not struts dataactions.
For the model bindings to work, you currently have to keep
all your uix pages in the top level directory.
However, if you use the struts-pageflow with UIX pages, then you can keep you UIX pages where ever you want. -
Does anybody know how to explicitly for an refresh on a UIX page.
The problem that I have now is that only after I some where did a rollback, the page is displayed correctly.
Before the rollback, the page shows one table updated and one table still in the former state, which was before I added an extra row.
Thanks in advance,
GideonSo again I want to bring this to your attention, because I believe I am not the only one with this problem.
I have a UIX page with two tables. I created the funtionality to add a row from table2 to table1.
The problem is that after I did a Commit and the row has been added to table1 and removed from table2, only table1 is updated and table2 is still in the former state.
At least it is in the former state on the screen.
In the database the change has already been made.
Only after I did a "rollback" somewhere, will the UIX page display correctly.
Does anybody know how to solve this problem and do a proper refresh of the tables in UIX?
Any help appreciated,
Gideon -
Javascript Error with UIX Page
Hi all,
I am using JHeadstart 10.1.2.2.32 with JDeveloper 10.1.2.1.0 to develop UIX pages. I have run into the following problem with one of my UIX pages. We have a page with a table view which uses sortable headers. In certain situations when using the sortable headers in IE 6.0.2900.2180, a javascript error appears. This does not occur using Firefox.
It says:
Line: 2894
Char: 1
Error: 'type' is null or not an object
Code: 0
URL: (the URL of the page)
I have figured out that the error is occuring in the Common2_2_20.js file on the following line, which is part of the function _multivalidate:
var a7 = a6.type; The error only occurs in the following situation. If the user has just logged into the system and certain rows in the table are read-only and others are editable. If you click on any of the sortable headers, it will sort fine the first time. However, if you click on the sortable header again, the javascript error appears. It only happens if you click on the sortable headers twice in a row.
I have tried taking out the line of code, but then I can not sort the headers at all.
I read in the forum that the error can occur because of the way IE handles the compression of javascript files. We changed the setting on the app server to not compress javascript files. I then undeployed and redeployed the application. However the same error is still occuring.
If you need any more information, please let me know. Thanks in advance.
SusanWe found out that we had a custom script on the page that was interfering with script in the Common2_2_20.js. By moving the script to the end of our page, it solved our problem.
Susan -
How to delete row by row comparing to first collumn?
Hello!
I have a problem - I need to delete row by row , but the problem is, that I know that first COLUMN of any table is a PK.
To retrieve COLUMN NAME I use:
SELECT column_name, table_name FROM USER_TAB_COLUMNS WHERE column_id = 1 and table_name = c1.tmp_table_name;
But this somehow doesn't work.
Below you can see my script (not worked for now):
declare
xxx varchar2(100);
begin
for c1 in (select table_name, tmp_table_name from tmp_tables) loop
EXECUTE IMMEDIATE
' SELECT column_name into '|| xxx ||' FROM USER_TAB_COLUMNS WHERE column_id = 1 and table_name = ' ||''''||c1.tmp_table_name||'''';
execute immediate
'begin
for c2 in (select * from '|| c1.tmp_table_name || ') loop begin
insert into '|| c1.table_name || ' values c2; delete from '|| c1.tmp_table_name || ' where ' || xxx ||' = c2.'||xxx ||'; exception when others then null; end; end loop; end;';
end loop;
end;
P.S. Inserts work perfect. I have a problem with delete rows that are in c1.table_name, from c1.tmp_table_name (this two tables have the same structure, PK, always), because I have different column names in another tables tables that are PK. (for example: K, ID, NS and so on) please help me to write correct script.
For example for first fetched row it will be like:
begin
for c1 in (select table_name, tmp_table_name from tmp_tables) loop
execute immediate
'begin for c2 in (select * from '|| c1.tmp_table_name || ') loop begin
insert into '|| c1.table_name || ' values c2; delete from '|| c1.tmp_table_name ||' where K = c2.K; exception when others then null; end; end loop; end;';
end loop;
end;
That script works perfect. But I have many others tables with different PK - not K.Solution with error-logging table
-- create the error-logging table
CREATE TABLE tbl_MergeErrors (
Stamp TIMESTAMP(3),
TableName VARCHAR2(30),
KeyColumn VARCHAR2(30),
KeyValue VARCHAR2(4000),
ErrorCode NUMBER(5),
ErrorMsg VARCHAR2(4000),
CONSTRAINT pk_MergeErrors
PRIMARY KEY (TableName, Stamp)
USING INDEX
-- procedure to insert errors
CREATE OR REPLACE
PROCEDURE LogMergeError (pTableName IN VARCHAR2,
pKeyColumn IN VARCHAR2,
pKeyValue IN VARCHAR2)
IS PRAGMA AUTONOMOUS_TRANSACTION;
-- you couldn't insert SQLCODE or SQLERRM directly into a table (ORA-00984)
nSQLCODE NUMBER(5) := SQLCODE;
vcSQLERRM VARCHAR2(4000) := SQLERRM;
BEGIN
INSERT INTO tbl_MergeErrors
(Stamp, TableName, KeyColumn, KeyValue, ErrorCode, ErrorMsg)
VALUES (SYSTIMESTAMP, RTrim( SubStr( pTableName, 1, 30)),
RTrim( SubStr( pKeyColumn, 1, 30)), SubStr( pKeyValue, 1, 4000),
nSQLCODE, vcSQLERRM);
COMMIT WORK;
-- if an error occured here, then just roll back the autonomous transaction
EXCEPTION
WHEN OTHERS THEN ROLLBACK WORK;
END LogMergeError;
-- create the tables and insert test-data
CREATE TABLE TMP_TABLES (
TABLE_NAME VARCHAR2(200),
TMP_TABLE_NAME VARCHAR2(200),
CONSTRAINT TMP_TABLES_X PRIMARY KEY (TABLE_NAME)
CREATE TABLE TMP_KL002 (
K VARCHAR2(40),
N VARCHAR2(200)
CREATE TABLE TMP_TABLE1 (
NS VARCHAR2(40),
N VARCHAR2(200)
CREATE TABLE KL002 (
K VARCHAR2(40),
N VARCHAR2(200),
CONSTRAINT PK_KL002 PRIMARY KEY (K)
CREATE TABLE TABLE1 (
NS VARCHAR2(40),
N VARCHAR2(200),
CONSTRAINT PK_TABLE1 PRIMARY KEY (NS)
INSERT INTO TMP_TABLES (TABLE_NAME, TMP_TABLE_NAME) VALUES ('kl002','tmp_kl002');
INSERT INTO TMP_TABLES (TABLE_NAME, TMP_TABLE_NAME) VALUES ('table1','tmp_table1');
INSERT INTO tmp_KL002 (K, N) VALUES ('00', 'none');
INSERT INTO tmp_KL002 (K, N) VALUES ('07', 'exists');
INSERT INTO tmp_KL002 (K, N) VALUES ('08', 'not assigned');
INSERT INTO tmp_table1 (NS, N) VALUES ('2000', 'basic');
INSERT INTO tmp_table1 (NS, N) VALUES ('3000', 'advanced');
INSERT INTO tmp_table1 (NS, N) VALUES ('4000', 'custom');
COMMIT WORK;
-- to test, if it works correct when primary key values exists before
INSERT INTO KL002 VALUES ('07', 'exists before');
COMMIT WORK;
-- check the data before execution
SELECT * FROM TMP_KL002 ORDER BY K;
SELECT * FROM KL002 ORDER BY K;
SELECT * FROM TMP_TABLE1 ORDER BY NS;
SELECT * FROM TABLE1 ORDER BY NS;
-- empty the error-logging table
TRUNCATE TABLE tbl_MergeErrors DROP STORAGE;
-- a solution
DECLARE
PLSQL_BLOCK CONSTANT VARCHAR2(256) := '
BEGIN
FOR rec IN (SELECT * FROM <0>) LOOP
BEGIN
INSERT INTO <1> VALUES rec;
DELETE FROM <0> t WHERE (t.<2> = rec.<2>);
EXCEPTION
WHEN OTHERS THEN
LogMergeError( ''<1>'', ''<2>'', rec.<2>);
END;
END LOOP;
END;';
BEGIN
FOR tabcol IN (SELECT t.Tmp_Table_Name, t.Table_Name, c.Column_Name
FROM Tmp_Tables t,
User_Tab_Columns c
WHERE (c.Table_Name = Upper( t.Tmp_Table_Name))
AND (c.Column_ID = 1)
) LOOP
EXECUTE IMMEDIATE Replace( Replace( Replace( PLSQL_BLOCK,
'<0>', tabcol.Tmp_Table_Name),
'<1>', tabcol.Table_Name),
'<2>', tabcol.Column_Name);
END LOOP;
END;
-- check the data after execution ...
SELECT * FROM TMP_KL002 ORDER BY K;
SELECT * FROM KL002 ORDER BY K;
SELECT * FROM TMP_TABLE1 ORDER BY NS;
SELECT * FROM TABLE1 ORDER BY NS;
-- ... and also the error-logging table
SELECT * FROM tbl_MergeErrors ORDER BY Stamp, TableName;
-- of couse you must issue an COMMIT (the ROLLBACK is only for testing
ROLLBACK WORK;
-- drop the test-tables
DROP TABLE TABLE1 PURGE;
DROP TABLE KL002 PURGE;
DROP TABLE TMP_TABLE1 PURGE;
DROP TABLE TMP_KL002 PURGE;
DROP TABLE TMP_TABLES PURGE;
-- you shouldn't drop the error-logging table, but I use it to free up my db
DROP TABLE tbl_MergeErrors PURGE;Greetings, Niels -
Hi, I'm new in apex and I tried to build master detail report on some view. Everything is cool but "delete checked" doesn't work.
"ORA-20001: Error in multi row delete operation: row= , ORA-06502: PL/SQL: numeric or value error: NULL index table key value,"
the problem is that I don't know what is wrong :), I have a special trigger "instead of delete on MY_VIEW", but in this error problem is not explained.
Anybody knows what can be wrong? It is probably a problem with trigger or multi row doesn't work with views? I couldn't find how MRD knows what kind of statement use to delete rows so I don't know if the statement that program used is correct. In debug it lokks that:
0.32: ...Do not run process "ApplyMRU", process point=AFTER_SUBMIT, condition type=REQUEST_IN_CONDITION, when button pressed=
0.32: ...Process "ApplyMRD": MULTI_ROW_DELETE (AFTER_SUBMIT) #OWNER#:MY_VIEW:ITEM1:ITEM2
0.33: Show ERROR page...
0.33: Performing rollback...
thanks for any help
//sorry for english mistakes
edit: it doesn't matter if I use in trigger delete from ... where item1=:OLD.item1 ; or if I use item1=:P4_item1 (which actually saves correct values)
Edited by: user5931224 on 2009-06-13 08:55I realised that this is not a problem with trigger, I changed trigger to "NULL;" and problem is the same. Maybe sb used master detail on view not only on tables and know what can be wrong in this situation?
-
hi,
I have a table with set of values. added three buttons below that in table. add row, delete row, save.
if I delete the row and save and if i come again to that application still that deleted row remains. what might be the problem?you can use flag in your internal table,
when you press delete button after selecting the particular row, set the flag for this entry in itab.
now in save event loop through the table checking flag, and delete enteries. now bind the table again by the itab.
you can do the same thing in delete button event also,
if not solved, please explain more
Yogesh N -
Problem of deletion of rows in jtable, table refreshing too
Hi,
I have a table with empty rows in the beginning with some custom properties( columns have fixed width...), later user would be adding to the rows to this table and can delete, I've a problem while deleting the rows from table,
When a selected row is deleted the model is also deleting the data but the table(view) is not refreshed.
Actually i'm selecting a cell of a row, then hitting the delete button.
So the model is deleting the information, but i'm not able to c the fresh data in table( especially when the last cell of last row is selectd and hit the delete button, i am getting lots of exception)
Kindly copy the below code and execute it, and let me know,
* AuditPanel.java
* Created on August 30, 2002, 3:05 AM
import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.Vector;
* @author yaman
public class AuditPanel extends javax.swing.JPanel {
// These are the combobox values
private String[] acceptenceOptions;
private Vector colNames;
private Color rowSelectionBackground = Color.yellow;
private int rowHeight = 20;
private int column0Width =70;
private int column1Width =96;
private int column2Width =327;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
/** Creates new form AuditPanel */
public AuditPanel() {
public void renderPanel(){
initComponents();
public String[] getAcceptenceOptions(){
return acceptenceOptions;
public void setAcceptenceOptions(String[] acceptenceOptions){
this.acceptenceOptions = acceptenceOptions;
public Vector getColumnNames(){
return colNames;
public void setColumnNames(Vector colNames){
this.colNames = colNames;
public Vector getData(){
Vector dataVector = new Vector();
/*dataVector.add(null);
dataVector.add(null);
dataVector.add(null);
return dataVector;
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jPanel2 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jTable1 = new javax.swing.JTable();
setLayout(new java.awt.GridBagLayout());
setBorder(new javax.swing.border.EmptyBorder(0,0,0,0));
jPanel2.setLayout(new java.awt.GridBagLayout());
jPanel2.setBorder(new javax.swing.border.EmptyBorder(0,0,0,0));
jButton1.setText("Add");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 8;
gridBagConstraints.insets = new java.awt.Insets(0, 1, 5, 0);
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
jPanel2.add(jButton1, gridBagConstraints);
jButton2.setText("Delete");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
jPanel2.add(jButton2, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0);
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
add(jPanel2, gridBagConstraints);
jPanel1.setLayout(new java.awt.GridBagLayout());
jPanel1.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.LOWERED, Color.black, Color.gray) );
jTable1.setModel(new javax.swing.table.DefaultTableModel(getData(), getColumnNames()));
// get all the columns and set the column required properties
java.util.Enumeration enum = jTable1.getColumnModel().getColumns();
while (enum.hasMoreElements()) {
TableColumn column = (TableColumn)enum.nextElement();
if( column.getModelIndex() == 0 ) {
column.setPreferredWidth(column0Width);
column.setCellEditor( new ValidateCellDataEditor(true) );
if( column.getModelIndex() == 1) {
column.setPreferredWidth(column1Width);
column.setCellEditor(new AcceptenceComboBoxEditor(getAcceptenceOptions()));
// If the cell should appear like a combobox in its
// non-editing state, also set the combobox renderer
//column.setCellRenderer(new AcceptenceComboBoxRenderer(getAcceptenceOptions()));
if( column.getModelIndex() == 2 ) {
column.setPreferredWidth(column2Width); // width of column
column.setCellEditor( new ValidateCellDataEditor(false) );
jScrollPane1 = new javax.swing.JScrollPane(jTable1);
jScrollPane1.setPreferredSize(new java.awt.Dimension(480, 280));
jTable1.setMinimumSize(new java.awt.Dimension(60, 70));
//jTable1.setPreferredSize(new java.awt.Dimension(300, 70));
//jScrollPane1.setViewportView(jTable1);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
jPanel1.add(jScrollPane1, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
add(jPanel1, gridBagConstraints);
// set the row height
jTable1.setRowHeight(rowHeight);
// set selection color
jTable1.setSelectionBackground(rowSelectionBackground);
// set the single selection
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// avoid table header to resize/ rearrange
jTable1.getTableHeader().setReorderingAllowed(false);
jTable1.getTableHeader().setResizingAllowed(false);
// Table header font
jTable1.getTableHeader().setFont( new Font( jTable1.getFont().getName(),Font.BOLD,jTable1.getFont().getSize() ) );
jButton1.setMnemonic(KeyEvent.VK_A);
// action of add button
jButton1.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent actionEvent){
// If a button press is the trigger to leave a JTable cell and save the data in model
if(jTable1.isEditing() ){
//System.out.println("table is edition ");
String text=((javax.swing.text.JTextComponent)jTable1.getEditorComponent()).getText();
jTable1.setValueAt(text,jTable1.getSelectedRow(),jTable1.getSelectedColumn()) ;
jTable1.getCellEditor().cancelCellEditing();
// find out total available rows
int totalRows = jTable1.getRowCount();
int cols = jTable1.getModel().getColumnCount();
if( jTable1.getModel() instanceof DefaultTableModel ) {
((DefaultTableModel)jTable1.getModel()).addRow(new Object[cols]);
int newRowCount = jTable1.getRowCount();
// select the first row
jTable1.getSelectionModel().setSelectionInterval(newRowCount-1,newRowCount-1);
jButton2.setMnemonic(KeyEvent.VK_D);
// action of Delete button
jButton2.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent actionEvent){
int totalRows = jTable1.getRowCount();
// If there are more than one row in table then delete it
if( totalRows > 0){
int selectedOption = JOptionPane.showConfirmDialog(null,"Are you sure you want to delete this audit row?","Coeus", JOptionPane.YES_NO_OPTION);
// if Yes then selectedOption is 0
// if No then selectedOption is 1
if(0 == selectedOption ){
// get the selected row
int selectedRow = jTable1.getSelectedRow();
System.out.println("Selected Row "+selectedRow);
if( selectedRow != -1 ){
DefaultTableModel dm= (DefaultTableModel)jTable1.getModel();
java.util.Vector v1=dm.getDataVector();
System.out.println("BEFOE "+v1);
v1.remove(selectedRow);
jTable1.removeRowSelectionInterval(selectedRow,selectedRow);
System.out.println("After "+v1);
}else{
// show the error message
JOptionPane.showMessageDialog(null, "Please Select an audit Row", "Coeus", JOptionPane.ERROR_MESSAGE);
} // end of initcomponents
class AcceptenceComboBoxRenderer extends JComboBox implements TableCellRenderer {
public AcceptenceComboBoxRenderer(String[] items) {
super(items);
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(rowSelectionBackground);
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
// Select the current value
setSelectedItem(value);
return this;
class AcceptenceComboBoxEditor extends DefaultCellEditor {
public AcceptenceComboBoxEditor(String[] items) {
super(new JComboBox(items));
} // end editor class
public class ValidateCellDataEditor extends AbstractCellEditor implements TableCellEditor {
// This is the component that will handle the editing of the
// cell value
JComponent component = new JTextField();
boolean validate;
public ValidateCellDataEditor(boolean validate){
this.validate = validate;
// This method is called when a cell value is edited by the user.
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int rowIndex, int vColIndex) {
if (isSelected) {
component.setBackground(rowSelectionBackground);
// Configure the component with the specified value
JTextField tfield =(JTextField)component;
// if any vaidations to be done for this cell
if(validate){
//tfield.setDocument(new JTextFieldFilter(JTextFieldFilter.NUMERIC,4));
tfield.setText( ((String)value));
// Return the configured component
return component;
// This method is called when editing is completed.
// It must return the new value to be stored in the cell.
public Object getCellEditorValue() {
return ((JTextField)component).getText();
// This method is called just before the cell value
// is saved. If the value is not valid, false should be returned.
public boolean stopCellEditing() {
String s = (String)getCellEditorValue();
return super.stopCellEditing();
public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}//end of ValidateCellDataEditor class
public static void main(String args[]){
JFrame frame = new JFrame();
AuditPanel auditPanel = new AuditPanel();
frame.getContentPane().add(auditPanel);
auditPanel.setAcceptenceOptions(new String[]{"Accepted", "Rejected", "Requested"} );
java.util.Vector colVector = new java.util.Vector();
colVector.add("Fiscal Year");
colVector.add("Audit Accepted");
colVector.add("Comment" );
auditPanel.setColumnNames( colVector);
auditPanel.renderPanel();
frame.pack();
frame.show();Hi,
I've got the solution for it. As when the cursor is in cell of
a row and hit the delete button, the data in that cell is not saved,
So i'm trying to save the data first into the model then firing the action event by doing this ..
jButton2.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent actionEvent){
// If a button press is the trigger to leave a JTable cell and save the data in model
if(jTable1.isEditing() ){
String text=((javax.swing.text.JTextComponent)jTable1.getEditorComponent()).getText();
jTable1.setValueAt(text,jTable1.getSelectedRow(),jTable1.getSelectedColumn()) ;
jTable1.getCellEditor().cancelCellEditing();
// HERE DO THE DELETE ROW OPERATION
<yaman/>
Maybe you are looking for
-
SAP disp+work.exe started but then stopped
i am attaching 2 files .. dev_disp, dev_w0 SAP stops running after few seconds please help me with that regards Thanks in Advance trc file: "dev_w0", trc level: 1, release: "720" * ACTIVE TRACE LEVEL 1 * ACTIVE TRACE COMPONENTS all,
-
My Environment is Weblogic 6.1 SP2 on WIN2K. I have an HTTP client sending an HTTP request with Content-Type=application/x-www-form-urlencoded the data in HTTP request is in UTF-8. Note that HTTP client does not specify charset=UTF-8 as part of the C
-
Is it possible to spin a picture or clip over time in iMovie 11
Hiya all, I know you can rotate but I would like to spin a pic over time? Is this possible
-
Exchange User Mailbox Database Group Lookup Reconciliation-parameters
Hi everyone, I want to execute Exchange User Mailbox Database Group Lookup Reconciliation. Parameters : Code Key Attribute : __NAME__ (default) Decode Attribute : __NAME__ (default) IT Resource Name : Exchange IT Resource Lookup Name : Lookup.Exchang
-
How to use the visible property
Hi all, Im trying to implement the page(view)which has 3 trays. Once the page is loaded ,I want to make only the first tray visible and other 2 trays should be invisible. Based on the users input on the 1 st tray, the 2nd or 3rd tray shud get enabled