Updating a JPanel with new data, using CardLayout
Hi,
I'm using a CardLayout to change between JPanels.
I have 2 JPanels: panel1, panel2; 2 JButtons: backButton, nextButton;
I also have 1 JTable - table1 - which get it's info from a database.
I add nextButton and table1 to panel1, and add backButton to panel2.
I add panel1 and panel2 to the CardLayout, and of course I add the Cardlayout to the JFrame and so on.
When I start the application I get the panel1 with a table filled up from the DB. I then press the nextButton and get the panel2 visible.
Problem:
My problem now is how to do when I press the backButton so that the application checks the DB and updates the table1.
I make a ActionListener to the backButton, which makes the panel1 visible again, but it does not update the table1 from the DB.
How do I do that??
Thx. for all answers!!
/bogger
of course it will be the same - you must call the database again.
if you just copy and paste the code, that fills your database with data where you make the panel visible again, it'll work
(of course it will be better to create a method to update the table, not just paste the code)
Similar Messages
-
How do i update a JTable with new data?
Hey
I have a JTable where the data of some football players are shown. Name, club, matches and goals. What i want is to change the data in
the JTable when i click a button. For example each team in a league has its own button, so when i click the teams button, JTable has
data of that teams players.
Here is the code i have atm, there isnt anything on how to change the data, because i dont know where to start, plz point me in somekind of direction:
* To change this template, choose Tools | Templates
* and open the template in the editor.
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
* @author Jesper
public class Main extends JFrame implements ActionListener {
private Players players;
private JTextArea output;
private JScrollPane scrollPane2;
private JButton button1, button2;
private String newline = "\n";
private int club = 1;
public Main(){
players = new Players();
public JMenuBar createMenuBar(){
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("File");
menu.setMnemonic(KeyEvent.VK_A);
menu.getAccessibleContext().setAccessibleDescription("The only menu in this program that has menu items");
menuBar.add(menu);
// add menuitems/buttons
JMenuItem menuItemNew = new JMenuItem("new");
menuItemNew.setActionCommand("1");
menuItemNew.addActionListener(this);
JMenuItem menuItemOpen = new JMenuItem("Open");
JMenuItem menuItemQuit = new JMenuItem("Quit");
menuItemQuit.setActionCommand("2");
menuItemQuit.addActionListener(this);
// add to menu
menu.add(menuItemNew);
menu.add(menuItemOpen);
menu.add(menuItemQuit);
return menuBar;
public void actionPerformed(ActionEvent e){
String s;
if ("Silkeborg IF".equals(e.getActionCommand())){
club = 1;
s = e.getActionCommand();
output.append(s + newline);
button1.setEnabled(false);
button2.setEnabled(true);
} else{
club = 2;
s = e.getActionCommand();
output.append(s + newline);
button1.setEnabled(true);
button2.setEnabled(false);
//Quit the application.
protected void quit() {
System.exit(0);
public Container createContent(){
JPanel contentPane = new JPanel(new GridLayout(3,1));
ImageIcon icon = createImageIcon("middle.gif", "a pretty but meaningless splat");
JTable table = new JTable(players.showPlayers(club));
//Create the first label.
button1 = new JButton("Silkeborg IF");
button1.setToolTipText("Klik her for at se Silkeborg IF");
button1.addActionListener(this);
button1.setActionCommand("Silkeborg IF");
//Create the second label.
button2 = new JButton("FC Midtjylland");
button2.setToolTipText("Klik her for at se FC Midtjylland");
button2.addActionListener(this);
button2.setActionCommand("FC Midtjylland");
//Create a scrolled text area.
output = new JTextArea(5, 30);
output.setEditable(false);
scrollPane2 = new JScrollPane(output);
//Add stuff to contentPane.
contentPane.add(button1);
contentPane.add(button2);
contentPane.add(table);
contentPane.add(scrollPane2, BorderLayout.CENTER);
return contentPane;
protected static ImageIcon createImageIcon(String path,
String description) {
java.net.URL imgURL = Main.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
} else {
System.err.println("Couldn't find file: " + path);
return null;
public static void createGUI(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Main main = new Main();
frame.setJMenuBar(main.createMenuBar());
frame.setContentPane(main.createContent());
frame.setSize(500, 500);
frame.setVisible(true);
* @param args the command line arguments
public static void main(String[] args) {
createGUI();
}ooohh sorry... i posted the wrong code :S
Here is the correct code:
* To change this template, choose Tools | Templates
* and open the template in the editor.
package test;
import java.util.HashMap;
import java.util.Set;
import javax.swing.table.*;
* @author Jesper
public class Players {
HashMap<Player, Stats> players;
public Players(){
players = new HashMap<Player, Stats>();
addPlayer();
public void addPlayer(){
//Silkeborg IF
players.put(new Player("Martin ?rnskov", 1), new Stats(19, 3, 1));
players.put(new Player("Thomas Raun", 1), new Stats(23, 6, 0));
players.put(new Player("Jimmy Mayasi", 1), new Stats(26, 26, 3));
players.put(new Player("Lasse J?rgensen", 1), new Stats(33, 0, 0));
//FC Midtjylland
players.put(new Player("Frank Kristensen", 2), new Stats(19, 3, 1));
players.put(new Player("Thomas R?ll", 2), new Stats(23, 6, 0));
players.put(new Player("Simon Poulsen", 2), new Stats(26, 26, 3));
players.put(new Player("Magnus Troels", 2), new Stats(33, 0, 0));
public DefaultTableModel showPlayers(int club){
String[] columNames = {"Spiller", "Klub", "Kampe", "M?l", "R?de kort"};
//Object[][] data = {{"Martin ?rnskov", 19, 3, 1}, {"Thomas Raun", 23, 6, 0}};
Set<Player> keys = players.keySet();
Object[][] data = new Object[keys.size()][columNames.length];
int i = 0;
for(Player player : keys){
if(player.getClub() == club){
data[0] = player.getName();
data[i][1] = player.getClub();
data[i][2] = players.get(player).getMatches();
data[i][3] = players.get(player).getGoals();
data[i][4] = players.get(player).getRedCards();
i++;
DefaultTableModel table = new DefaultTableModel(data, columNames);
return table; -
I have a problem updating my graphs with new data in Illustrator. When I update them with new data each month the y and x-axis tend to change font and size.
What can be the problem? Please help me!Hi Rajasekar
You can purchase the enterprise toolkit fron NI, it includes a "database connectivity toolkit".
As regards the design pattern to do you you describe, it will depends on the refresh rate you need and the rate at which you want to write your data to the database.
I would have 2 loops :
- one acquiring the data and putting it in a queue,
- and a second that get the data from the queue, logging data to database and refreshing the graph.
If the write time to database is too long and slows down the graph refresh you place it in another loop.
Hope this helps
When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!" -
A serious problem with JTable to update with new data.
I am customizing a JTable. In the table 3 rows and row wise same data presents. After every 30 sec table will be update with new data. But a exception is coming like: ArrayIndexOutofBound 4>=0. Exception is not coming so frequently some time it comes within 1 min or after 1 hour of program running and each time *4>=0* is varies with different number.
Here is the model i am using and to update table i am calling setTableData( ) with updated vector as a argument.
public class MyModel extends AbstractTableModel {
protected Vector m_vector;
public MyModel(Vector m_vector) { this.m_vector = m_vector; }
public int getColumnCount() {
return m_vector==null ? 0 : m_vector.size();
public int getRowCount() { return 3; }
public String getColumnName(int col) { return null; }
public Object getValueAt(int row, int col) {
if (col < 0 || col>=getColumnCount())
return null;
try{
MyData column = (MyData)m_vector.elementAt(col);
switch (row) {
case 0: return column.gate;
case 1: return column.time;
case 2: return column.status;
}}catch(Exception e){
System.out.println("Error is here");
e.printStackTrace();
return null;
public Class getColumnClass(int c) {return getValueAt(0, c).getClass(); }
public boolean isCellEditable(int row, int col) {
if (row == 1) { return false; } else { return true; }
public void setTableData( Vector mData)
this.m_vector = new Vector(mData);
fireTableStructureChanged();
}Please help me out.This is the exception:
java.lang.ArrayIndexOutOfBoundsException: 4 >= 3
at java.util.Vector.elementAt(Vector.java:431)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1047)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:974)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
at javax.swing.JComponent.paintComponent(JComponent.java:541)
at javax.swing.JComponent.paint(JComponent.java:808)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JViewport.paint(JViewport.java:722)
at javax.swing.JComponent.paintChildren(JComponent.java:647)
at javax.swing.JComponent.paint(JComponent.java:817)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4787)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4740)
at javax.swing.JComponent._paintImmediately(JComponent.java:4685)
at javax.swing.JComponent.paintImmediately(JComponent.java:4488)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)and Column may increase/decrease depending upon data retrieved. -
I want to update iCloud account with new apple id but don't know password for old apple id. Plus can no longer receive email at old apple id. How can I delete the current iCloud account on my iPhone if the previously stated conditions exist?
If the old ID is yours, and if it is an earlier version of your current ID, go to https://appleid.apple.com, click Manage my Apple ID and sign in with your current iCloud ID. Click edit next to the primary email account, change it back to your old email address and save the change. Then edit the name of the account to change it back to your old email address. You can now use your current password to turn off Find My iDevice, even though it prompts you for the password for your old account ID. Then save any photo stream photos that you wish to keep to your camera roll. When finished go to Settings>iCloud, tap Delete Account and choose Delete from My iDevice when prompted (your iCloud data will still be in iCloud). Next, go back to https://appleid.apple.com and change your primary email address and iCloud ID name back to the way it was. Now you can go to Settings>iCloud and sign in with your current iCloud ID and password.
-
Revision: 13083
Revision: 13083
Author: [email protected]
Date: 2009-12-17 16:10:05 -0800 (Thu, 17 Dec 2009)
Log Message:
Updated MASTAdapter class with new trait names and events.
Modified Paths:
osmf/trunk/plugins/MASTPlugin/org/osmf/mast/adapter/MASTAdapter.as
osmf/trunk/plugins/MASTPluginIntegrationTest/src/org/osmf/test/mast/TestMASTPluginInfo.as
osmf/trunk/plugins/MASTPluginIntegrationTest/src/org/osmf/test/mast/adapter/TestMASTAdapt er.asSilviu!
I'm really sorry, but as all the office is trying to fix the problem, someone replaced the url content with the stuff that was pointing to the local machine.
I've fix it, and the video player is available here again: http://pp.player.webtv.flumotion.com/params/apiKey/5PzLR2ULL3z2rumJ/videoId/60
If there are other references to the localhost, please do not bother with them, as they do not affect player functionality.
The stream that it uses is an RTMPE, so i'm afraid it will only works with this player. Anyway, the stream url is as follows: rtmpe://87.248.205.81/a4349/e2/veo7/ondemandrtmpe/mp4/med/first-person-mario-4d8741aa.mp4
I really appreciate your help!
Thank you! -
Problem with updating oracle DB with java date thru resultset.updateDate()
URGENT Please
I am facing problem in updating oracle database with java date through resultset.updateDate() method. Can anybody help me please
following code is saving wrong date value (dec 4, 2006 instead of java date jul 4, 2007) in database:
ResultSet rs = stmt.executeQuery("SELECT myDate FROM myTable");
rs.first();
SimpleDateFormat sqlFormat = new SimpleDateFormat("yyyy-mm-dd");
java.util.Date myDate = new Date();
rs.updateDate("myDate", java.sql.Date.valueOf(sqlFormat.format(myDate)));
rs.updateRow();I believe you should use yyyy-MM-dd instead of yyyy-mm-dd. I think MM stands for month while mm stands for minute as per
http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html
(If this works, after spending so much of your time trying to solve it, don't hit yourself in the head too hard. I find running out of the room laughing hysterically feels better).
Here is a more standard(?) way of updating:
String sqlStatement=
"update myTable set myDate=? where personID=?"
PreparedStatement p1= connection.prepareStatement(sqlStatement);
p1.setDate(1,new java.sqlDate());
p1.setInt(2, personID);
p1.executeUpdate(); -
HT1311 How can I get updates for apps with new Apple ID
How can I get updates for apps with new Apple ID. I have apps that I got for free, and some that I have purchased. I had to create a new Apple ID because I don't have a credit card now.
Apps will always be tied to the ID in which they were purchased or downloaded under. You can not change this unless you buy or download the free app using the new ID.
-
I have updated my Iphone5 with new IOS6 - now the screen/display does not react to my taps on screen as in i cant tap in my pin to startup???
I have updated my Iphone5 with new IOS6 - now the screen/display does not react to my taps on screen as in i cant tap in my pin to startup???
-
XML generation with SAP data using XML schema - Reg
Hello experts,
My requirement is , SAP( ztable data ) data has to be transferred to third party software folder.Third party using XML so they requires output from SAP in XML format.
For that third party software guys told me that they will give their own XML schema to me.I have to generate XML file with SAP data using their XML schema.
Generating XML file with their Schema should be underlined.
I studied that call transformation statement helps for this.
Even then i don't have clear idea about this topic.
Please brief me about how to use their XML schema to generate XML with my own sap data.
Thanks in advance experts.
Kumarplease try this same program and see it ....
*& Report z_xit_xml_check
REPORT z_xit_xml_check.
TYPE-POOLS: ixml.
TYPES: BEGIN OF t_xml_line,
data(256) TYPE x,
END OF t_xml_line.
DATA: l_ixml TYPE REF TO if_ixml,
l_streamfactory TYPE REF TO if_ixml_stream_factory,
l_parser TYPE REF TO if_ixml_parser,
l_istream TYPE REF TO if_ixml_istream,
l_document TYPE REF TO if_ixml_document,
l_node TYPE REF TO if_ixml_node,
l_xmldata TYPE string.
DATA: l_elem TYPE REF TO if_ixml_element,
l_root_node TYPE REF TO if_ixml_node,
l_next_node TYPE REF TO if_ixml_node,
l_name TYPE string,
l_iterator TYPE REF TO if_ixml_node_iterator.
DATA: l_xml_table TYPE TABLE OF t_xml_line,
l_xml_line TYPE t_xml_line,
l_xml_table_size TYPE i.
DATA: l_filename TYPE string.
PARAMETERS: pa_file TYPE char1024 DEFAULT 'c:temporders_dtd.xml'.
* Validation of XML file: Only DTD included in xml document is supported
PARAMETERS: pa_val TYPE char1 AS CHECKBOX.
START-OF-SELECTION.
* Creating the main iXML factory
l_ixml = cl_ixml=>create( ).
* Creating a stream factory
l_streamfactory = l_ixml->create_stream_factory( ).
PERFORM get_xml_table CHANGING l_xml_table_size l_xml_table.
* wrap the table containing the file into a stream
l_istream = l_streamfactory->create_istream_itable( table = l_xml_table
size = l_xml_table_size ).
* Creating a document
l_document = l_ixml->create_document( ).
* Create a Parser
l_parser = l_ixml->create_parser( stream_factory = l_streamfactory
istream = l_istream
document = l_document ).
* Validate a document
IF pa_val EQ 'X'.
l_parser->set_validating( mode = if_ixml_parser=>co_validate ).
ENDIF.
* Parse the stream
IF l_parser->parse( ) NE 0.
IF l_parser->num_errors( ) NE 0.
DATA: parseerror TYPE REF TO if_ixml_parse_error,
str TYPE string,
i TYPE i,
count TYPE i,
index TYPE i.
count = l_parser->num_errors( ).
WRITE: count, ' parse errors have occured:'.
index = 0.
WHILE index < count.
parseerror = l_parser->get_error( index = index ).
i = parseerror->get_line( ).
WRITE: 'line: ', i.
i = parseerror->get_column( ).
WRITE: 'column: ', i.
str = parseerror->get_reason( ).
WRITE: str.
index = index + 1.
ENDWHILE.
ENDIF.
ENDIF.
* Process the document
IF l_parser->is_dom_generating( ) EQ 'X'.
PERFORM process_dom USING l_document.
ENDIF.
*& Form get_xml_table
FORM get_xml_table CHANGING l_xml_table_size TYPE i
l_xml_table TYPE STANDARD TABLE.
* Local variable declaration
DATA: l_len TYPE i,
l_len2 TYPE i,
l_tab TYPE tsfixml,
l_content TYPE string,
l_str1 TYPE string,
c_conv TYPE REF TO cl_abap_conv_in_ce,
l_itab TYPE TABLE OF string.
l_filename = pa_file.
* upload a file from the client's workstation
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_filename
filetype = 'BIN'
IMPORTING
filelength = l_xml_table_size
CHANGING
data_tab = l_xml_table
EXCEPTIONS
OTHERS = 19.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Writing the XML document to the screen
CLEAR l_str1.
LOOP AT l_xml_table INTO l_xml_line.
c_conv = cl_abap_conv_in_ce=>create( input = l_xml_line-data replacement = space ).
c_conv->read( IMPORTING data = l_content len = l_len ).
CONCATENATE l_str1 l_content INTO l_str1.
ENDLOOP.
l_str1 = l_str1+0(l_xml_table_size).
SPLIT l_str1 AT cl_abap_char_utilities=>cr_lf INTO TABLE l_itab.
WRITE: /.
WRITE: /' XML File'.
WRITE: /.
LOOP AT l_itab INTO l_str1.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN
l_str1 WITH space.
WRITE: / l_str1.
ENDLOOP.
WRITE: /.
ENDFORM. "get_xml_table
*& Form process_dom
FORM process_dom USING document TYPE REF TO if_ixml_document.
DATA: node TYPE REF TO if_ixml_node,
iterator TYPE REF TO if_ixml_node_iterator,
nodemap TYPE REF TO if_ixml_named_node_map,
attr TYPE REF TO if_ixml_node,
name TYPE string,
prefix TYPE string,
value TYPE string,
indent TYPE i,
count TYPE i,
index TYPE i.
node ?= document.
CHECK NOT node IS INITIAL.
ULINE.
WRITE: /.
WRITE: /' DOM-TREE'.
WRITE: /.
IF node IS INITIAL. EXIT. ENDIF.
* create a node iterator
iterator = node->create_iterator( ).
* get current node
node = iterator->get_next( ).
* loop over all nodes
WHILE NOT node IS INITIAL.
indent = node->get_height( ) * 2.
indent = indent + 20.
CASE node->get_type( ).
WHEN if_ixml_node=>co_node_element.
* element node
name = node->get_name( ).
nodemap = node->get_attributes( ).
WRITE: / 'ELEMENT :'.
WRITE: AT indent name COLOR COL_POSITIVE INVERSE.
IF NOT nodemap IS INITIAL.
* attributes
count = nodemap->get_length( ).
DO count TIMES.
index = sy-index - 1.
attr = nodemap->get_item( index ).
name = attr->get_name( ).
prefix = attr->get_namespace_prefix( ).
value = attr->get_value( ).
WRITE: / 'ATTRIBUTE:'.
WRITE: AT indent name COLOR COL_HEADING INVERSE, '=',
value COLOR COL_TOTAL INVERSE.
ENDDO.
ENDIF.
WHEN if_ixml_node=>co_node_text OR
if_ixml_node=>co_node_cdata_section.
* text node
value = node->get_value( ).
WRITE: / 'VALUE :'.
WRITE: AT indent value COLOR COL_GROUP INVERSE.
ENDCASE.
* advance to next node
node = iterator->get_next( ).
ENDWHILE.
ENDFORM. "process_dom
reward points if it is use fulll ....
Girish -
When updating my iphone with new software it came up on screen with the cable and itunes sign (which is what I should get when restoration has been completed) yet it is still saying restore. I have tried 3 times and the screen won't change. HELP!
If the sign does not go away it has not completed the restore. So you are incorrect when you say it "keeps completing the restore" if that message is still displayed.
Do you get an error message? If so, what is the error number? -
Updated iPhone 4 with ios 5 using new MacBook!
Ive had a MacBook as my laptop broke. So set it all up
& decided to plug my iPhone 4 in for iOS 5 update. The following is what I done:
1. Backed up my iPhone to iTunes before going out. Took ages!!!!
2. Started to download iOS 5 to iTunes & went out.
3. Next morning updated iOS 5 to my iPhone 4
4. Restored my phone
Conclusion :
Phone has only some of my apps (most recent arent there), all of my photos, videos,
texts, call history, notes, bookmarks. But no contacts!!! So basically my phone is exactly
the same apart from no contacts & half apps missing.
Can someone explain what is going on??
The texts & phone history dont show no names just numbers as if I never had contacts.
Seen a lot of people mention check iCloud settings etc. Am I not right in saying I didn't have
iCloud until I updated to ios 5??
This is very frustrated please someone with knowledge & know apples complications (which is
everything) reply with their views on this.You can only sync an iPhone to ONE computer.
So if you plugged it into a new computer and did an update, then yes all your data is lost.
If you still have your old computer, or it's harddrive, you can plug the iphone into it and restore from the last back up.
There is a warning on the screen of new computers telling you that all data will be lost if you sync your iPhone.
So users have to accept this window to continue. -
Updating a document with category metadata using updateDocument(): error!
I have studied the sample code and the API docs, and I feel pretty sure I am coding it according to the docs, but I cannot successfully update a document with category metadata. I always get a MetaDataSchemaInvalid exception.
My process goes like this:
1. Upload a new file, creating a new document publicobject.
2. Create a CATEGORY_DEFINITION with all the metadata name/value pairs I wish to write.
3. Call FileManager.updateDocument() with this CATEGORY_DEFINITION.
My process differs from the docs in that I am first uploading the document, and then adding the metadata as a second step. I want to get it working this way to make my system more modular. I do not want to make my upload method dependent upon metadata attributes, and vice versa.
Step 1 is working fine. The document is being uploaded to the right folder. Good to go.
Step 3 is where I get the error. If the error is my fault, then it must be a result of what I do in step 2. The structure of my CATEGORY_DEFINITION must be messed up.
Here is my code for creating the CATEGORY_DEFINITION. The Document class is my own entity that encapsulates the binary data for a document, as well as the metadata attributes that are to be assigned to the document once it is uploaded into Content Services. We don't need to worry about where the data comes from. Just assume the raw data is correct.
public NamedValue[] newCategoryAttributeDefinition(Document document, String categoryDisplayName) throws WebserviceClientException {
/* Get the category attribute name-value pairs as a 2-D array. */
Map metadataMap = document.getMetadataParser().getAttributeNameMapping();
List categoryDefinitionAttributeList = new ArrayList();
for(Iterator i = metadataMap.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Map.Entry)i.next();
String name = "CUSTOM_" + (String)entry.getKey();
Object value = entry.getValue();
if(value != null) {
categoryDefinitionAttributeList.add(new Object[] { name, value });
Object[][] categoryDefinitionAttributeArray = new Object[categoryDefinitionAttributeList.size()][];
int index = 0;
for(Iterator i = categoryDefinitionAttributeList.iterator(); i.hasNext();) {
Object[] value = (Object[])i.next();
categoryDefinitionAttributeArray[index++] = value;
/* Create the NamedValue tree that describes this category's attribute values. */
Long categoryId = new Long(getCategoryClassId(categoryDisplayName));
NamedValue[] categoryAttributeDefinition = WebserviceUtils.newNamedValueArray(new Object[][] {
{ Options.CATEGORY_ID, categoryId },
{ Options.CATEGORY_DEFINITION_ATTRIBUTES, WebserviceUtils.newNamedValueArray(categoryDefinitionAttributeArray) }
NamedValue[] categoryDefinition = WebserviceUtils.newNamedValueArray(Options.CATEGORY_DEFINITION, categoryAttributeDefinition);
return categoryDefinition;
And below is the resulting CATEGORY_DEFINITION, as seen in a jdb debugger.
-- The OPT.CATEGORY_ID value is equal to the ID column in ODMV_SCHEMACATEGORY, otherwise known as the category class id.
-- My OPT.CATEGORY_DEFINITION_ATTRIBUTES tree for this document has the 4 attributes that I want to set. The category has more than these 4 attributes; I am not populating every attribute. None of the attributes are required, and all are editable. I don't need to include every attribute in my CATEGORY_DEFINITION, even if the values are null, do I? Also, all the attribute names start with "CUSTOM_", which I believe is necessary - right?
-- I am setting only the OPT.CATEGORY_ID and OPT.CATEGORY_DEFINITION_ATTRIBUTES. Am I missing some other required attribute?
http-8888-Processor5[1] http-8888-Processor5[1] dump categoryDefinition
categoryDefinition = {
instance of oracle.ifs.fdk.NamedValue(id=2562)
http-8888-Processor5[1] dump categoryDefinition[0]
categoryDefinition[0] = {
name: "OPT.CATEGORY_DEFINITION"
value: instance of oracle.ifs.fdk.NamedValue[2] (id=2559)
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
http-8888-Processor5[1] dump categoryDefinition[0].value[0]
categoryDefinition[0].value[0] = {
name: "OPT.CATEGORY_ID"
value: instance of java.lang.Long(id=2558)
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
http-8888-Processor5[1] dump categoryDefinition[0].value[0].value.toString()
categoryDefinition[0].value[0].value.toString() = "60068"
http-8888-Processor5[1] dump categoryDefinition[0].value[1]
categoryDefinition[0].value[1] = {
name: "OPT.CATEGORY_DEFINITION_ATTRIBUTES"
value: instance of oracle.ifs.fdk.NamedValue[4] (id=2570)
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
http-8888-Processor5[1] dump categoryDefinition[0].value[1].value[0]
categoryDefinition[0].value[1].value[0] = {
name: "CUSTOM_From"
value: "SA"
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
http-8888-Processor5[1] dump categoryDefinition[0].value[1].value[1]
categoryDefinition[0].value[1].value[1] = {
name: "CUSTOM_Footer Number"
value: "PRM 34-318"
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
http-8888-Processor5[1] dump categoryDefinition[0].value[1].value[2]
categoryDefinition[0].value[1].value[2] = {
name: "CUSTOM_To"
value: "PROJECT TEAM"
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
http-8888-Processor5[1] dump categoryDefinition[0].value[1].value[3]
categoryDefinition[0].value[1].value[3] = {
name: "CUSTOM_Subject"
value: "Riverside Energy Resource Center Meeting Minutes-Internal"
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2564)
class$oracle$ifs$fdk$NamedValue: instance of java.lang.Class(reflected class=oracle.ifs.fdk.NamedValue, id=1975)
After building this CATEGORY_DEFINITION, I go on to attempt an update to the document with this information. Here is the method I call. I always fall into the catch(), and the error dump follows the code snippet. Unfortunately, the error doesn't tell me a lot about what's wrong. That's why I am asking for help in spotting any conspicuous errors in my CATEGORY_DEFINITION.
public Item addCategoryToDocument(Item documentItem,
NamedValue[] categoryDefinition)
throws WebserviceClientException {
FileManager fileManager = getWebserviceClient().getFileManager();
Item documentItemWithCategory = null;
try {
documentItemWithCategory = fileManager.updateDocument(documentItem.getId(), categoryDefinition, null);
} catch(Exception e) {
throw new WebserviceClientException("Could not update document with category definition.", e);
return documentItemWithCategory;
http-8888-Processor4[1] http-8888-Processor4[1] dump e
e = {
detailedErrorCode: "ORACLE.FDK.AggregateError"
errorCode: "ORACLE.FDK.AggregateError"
exceptionEntries: instance of oracle.ifs.fdk.FdkExceptionEntry[1] (id=2691)
info: null
serverStackTraceId: ""
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2694)
class$oracle$ifs$fdk$FdkException: instance of java.lang.Class(reflected class=oracle.ifs.fdk.FdkException, id=1972)
org.apache.axis.AxisFault.log: instance of org.apache.commons.logging.impl.Log4JLogger(id=2695)
org.apache.axis.AxisFault.faultCode: instance of javax.xml.namespace.QName(id=2696)
org.apache.axis.AxisFault.faultSubCode: null
org.apache.axis.AxisFault.faultString: "ORACLE.FDK.AggregateError:ORACLE.FDK.AggregateError"
org.apache.axis.AxisFault.faultActor: null
org.apache.axis.AxisFault.faultDetails: instance of java.util.Vector(id=2698)
org.apache.axis.AxisFault.faultNode: null
org.apache.axis.AxisFault.faultHeaders: null
org.apache.axis.AxisFault.class$org$apache$axis$AxisFault: instance of java.lang.Class(reflected class=org.apache.axis.AxisFault, id=1928)
java.rmi.RemoteException.serialVersionUID: -5148567311918794206
java.rmi.RemoteException.detail: null
java.lang.Exception.serialVersionUID: -3387516993124229948
java.lang.Throwable.serialVersionUID: -3042686055658047285
java.lang.Throwable.detailMessage: null
java.lang.Throwable.cause: null
java.lang.Throwable.stackTrace: instance of java.lang.StackTraceElement[76] (id=2699)
http-8888-Processor4[1] dump e.exceptionEntries[0]
e.exceptionEntries[0] = {
detailedErrorCode: "ORACLE.FDK.MetadataSchemaInvalid"
errorCode: "ORACLE.FDK.MetaDataError"
id: 348018
info: null
serverStackTraceId: ""
__equalsCalc: null
__hashCodeCalc: false
typeDesc: instance of org.apache.axis.description.TypeDesc(id=2705)
class$oracle$ifs$fdk$FdkExceptionEntry: instance of java.lang.Class(reflected class=oracle.ifs.fdk.FdkExceptionEntry, id=1973)
}1 – For an existing document, how do I determine what category instances have been applied to it and their attribute values
FdkSession session = …;
// Consider we have an existing item myDoc of type document
Item myDoc = …;
CommonManager cm = Managers.getCommonManager(session);
AttributeRequest[] requestedAttributes = new AttributeRequest[]
// The Categories associated with this Document, if any
new AttributeRequest(Attributes.CATEGORIES,
// sub attributerequest
new AttributeRequest[] {
// the actual attributes name/values for the category instance – returns a namedvalue array
new AttributeRequest(Attributes.CUSTOM_ALL,null),
// the actual category class for the category instance – returns an item
new AttributeRequest(Attributes.CATEGORY_CLASS_OBJECT,null)
myDoc = cm.getItem(myDoc.getId(), requestedAttributes);
log(myDoc); /* output could look like:
(Item) 14385 DOCUMENT sample3.doc
requested attributes ...
CATEGORIES (Item[])=
(Item) 14387 CATEGORY
requested attributes ...
CUSTOM_ALL (NamedValue[])=
CUSTOM_14352=true (Boolean)
CUSTOM_14353=Internal Only Pending Review (String)
CATEGORY_CLASS_OBJECT (Item)=
(Item) 14354 CATEGORY_CLASS 5044-14351
This means, that for document sample3.doc, we have 1 instance of a category object applied to it.
The category object instance has id 14387. The instance is of a category class object type 14354. The instance has two attributes with internal names CUSTOM_14352, and CUSTOM_15353. The values of these attributes are of type Boolean and String respectively.
2 - How do I update an attribute value of an existing category instance applied to an item
FdkSession session = …;
// Consider we have an existing item myDoc of type document
Item myDoc = …;
.. perform code along the lines of that shown in step1 above to determine existing category instance info on the document ..
FileManager fm = Managers.getFileManager(session);
NamedValue[] categoryInstanceAttributes = new NamedValue[] {
// use the internal attribute name for all attributes
new NamedValue("CUSTOM_14352", Boolean.FALSE),
new NamedValue("CUSTOM_14352", "Company Confidential")
NamedValue[] categoryDef = new NamedValue[] {
// the category instance that we are updating
new NamedValue(Options.UPDATE_CATEGORY_ID,new Long(14387)),
// the updated values of the category instance
new NamedValue(Options.CATEGORY_DEFINITION_ATTRIBUTES, categoryInstanceAttributes)
NamedValue[] documentDef = new NamedValue[] {
new NamedValue(Options.CATEGORY_DEFINITION, categoryDef)
requestedAttributes = ...
myDoc = fm.updateDocument(myDoc.getId(),documentDef,requestedAttributes) ;
3 – For a document item X, what is the associated category configuration which could include
a) what are the category objects I can apply on it (either explicitly restricted by way of ALLOWED_CATEGORIES on the folder configuration, or any site/domain category by way of ALLOW_ALL_CATEGORIES)
b) is there any attribute overrides
c) is there any enforced categories
FdkSession session = …;
// Consider we have an existing item myDoc of type document
Item myDoc = …;
CommonManager cm = Managers.getCommonManager(session);
AttributeRequest[] categoryObjectAttributes = new AttributeRequest[]
// What is the category object class name
new AttributeRequest(Attributes.CLASS_NAME,null),
// What is the category classobject display name
new AttributeRequest(Attributes.DISPLAY_NAME,null),
// get attributes inherited and introduced by category object
new AttributeRequest(Attributes.METADATA_ATTRIBUTES,
new AttributeRequest[]
// Attribute internal name
new AttributeRequest(Attributes.ATTRIBUTE_NAME,null),
// Attribute display name
new AttributeRequest(Attributes.DISPLAY_NAME,null),
new AttributeRequest(Attributes.ATTRIBUTE_TYPE,null),
new AttributeRequest(Attributes.ATTRIBUTE_DEFAULT,null),
new AttributeRequest(Attributes.ATTRIBUTE_ENUMERATION,null),
new AttributeRequest(Attributes.ATTRIBUTE_REQUIRED,null),
new AttributeRequest(Attributes.ATTRIBUTE_SETTABLE,null),
new AttributeRequest(Attributes.ATTRIBUTE_UPDATEABLE,null),
new AttributeRequest(Attributes.ATTRIBUTE_HIDDEN,null),
new AttributeRequest(Attributes.ATTRIBUTE_PROMPTED,null),
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDEABLE,null),
AttributeRequest[] overrideAttributes = new AttributeRequest[]
// id of the attribute to be overridden
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_ATTRIBUTE,null),
// id of the category class object to which this attribute override applies
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_CATEGORY_CLASS,null),
// new default value
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_DEFAULT,null),
// should attribute now be prompted
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_PROMPT,null),
// is the attribute now required
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_REQUIRED,null),
// can instances of this attribute have there value updated
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDE_SETTABLE,null),
AttributeRequest[] requestedAttributes = new AttributeRequest[]
// what is the category configuration for the item
new AttributeRequest(Attributes.CATEGORY_CONFIGURATION,
new AttributeRequest[]
// Is the category configuration enabled
new AttributeRequest(Attributes.CONFIGURATION_ENABLED,null),
// Can the category configuration be overridden or is it final
new AttributeRequest(Attributes.CONFIGURATION_FINAL,null),
// What are the required categories for the category configuration and associated attribute information
new AttributeRequest(Attributes.REQUIRED_CATEGORIES,categoryObjectAttributes),
// Can any categories in the site be utilized
new AttributeRequest(Attributes.ALLOW_ALL_CATEGORIES,null),
// or .. are we restricting the categories to only the following
new AttributeRequest(Attributes.ALLOWED_CATEGORIES,categoryObjectAttributes),
// are there any attribute overrides on category object attributes for this category config?
new AttributeRequest(Attributes.ATTRIBUTE_OVERRIDES,overrideAttributes)
log(cm.getItem(myDoc.getId(), requestedAttributes); /*
If ALLOW_ALL_CATEGORIES is set to true, any category in the domain can be utilized that is not abstract. To determine these, the domain item has a property CATEGORY_CLASSES that returns all category objects in the domain. It also has a property ROOT_CATEGORY_CLASSES which returns just the top level categories (those that have no custom category superclass). You would create a sub AttributeRequest[] checking for CLASS_ABSTRACT when requesting the appropriate categories attribute from the domain.
If ALLOW_ALL_CATEGORIES is set to false, the applicable categories objects that can be utilized on items contained in the folder is determined by the items contained in the ALLOWED_CATEGORIES attribute of the category configuration.
Finally, the REQUIRED_CATEGORIES attribute list the category items that must be applied to all new items added to the folder.
4 – How do I manually apply an instance of a category to an existing item
FdkSession session = …;
// Consider we have an existing item myDoc of type document
Item myDoc = …;
.. use techniques in step3 above to determine what category objects that you planning to apply to the document ..
.. if the category configuration on the item has ALLOW_ALL_CATEGORIES set to true, you can use any category in the system
.. otherwise, you must use a category defined in the allowed categories list
.. the code here is essentially the same as step2 above
.. you must utilize internal attribute names, and specify the id of the category class object
FileManager fm = Managers.getFileManager(session);
NamedValue[] categoryInstanceAttributes = new NamedValue[] {
// use the internal attribute name for all attributes
new NamedValue("CUSTOM_14352", Boolean.FALSE),
new NamedValue("CUSTOM_14352", "Company Confidential")
NamedValue[] categoryDef = new NamedValue[] {
// the id of the category object class for which this new category will be an instance of
new NamedValue(Options.CATEGORY_CLASS_ID,new Long(14354)),
// the updated values of the category instance
new NamedValue(Options.CATEGORY_DEFINITION_ATTRIBUTES, categoryInstanceAttributes)
NamedValue[] documentDef = new NamedValue[] {
new NamedValue(Options.CATEGORY_DEFINITION, categoryDef)
requestedAttributes = ...
myDoc = fm.updateDocument(myDoc.getId(),documentDef,requestedAttributes);
// Note – it is possible for one to peform creation, updating, and deletion of various category instances for an existing item in the fileManager updateDocument call!
// you simply supply multiple Options.CATEGORY_DEFINITIONs to the fm.updateDocument call along with any Options.REMOVE_CATEGORY_IDs 5 – How do I specify a category instance when creating a new item
FdkSession session = …;
.. use techniques in step3 above to determine what category objects that you planning to apply to the new document ..
.. you get the category configuration information from the destination folder!!!
Item destinationFolder = …;
CommonManager cm = Managers.getCommonManager(session);
AttributeRequest[] requestedAttributes = new AttributeRequest[]
// what is the category configuration for the item
new AttributeRequest(Attributes.CATEGORY_CONFIGURATION,
destinationFolder = cm.getItem(destinationFolder.getId(),requestedAttributes);.. if the category configuration on the folder item has ALLOW_ALL_CATEGORIES set to true, you can use any category in the system
.. otherwise, you must use a category defined in the allowed categories list
.. the code here is essentially the same as step2 above, just we are using createDocument and document definitions now
.. you must utilize internal attribute names, and specify the id of the category class object
FileManager fm = Managers.getFileManager(session);
NamedValue[] categoryInstanceAttributes = new NamedValue[] {
// use the internal attribute name for all attributes
new NamedValue("CUSTOM_14352", Boolean.FALSE),
new NamedValue("CUSTOM_14352", "Company Confidential")
NamedValue[] categoryDef = new NamedValue[] {
// the id of the category object class for which this new category will be an instance of
new NamedValue(Options.CATEGORY_CLASS_ID,new Long(14354)),
// the attribute values for this new category instance
new NamedValue(Options.CATEGORY_DEFINITION_ATTRIBUTES, categoryInstanceAttributes)
String destinationFile = "sample.doc";
requestedAttributes = new AttributeRequest[]
new AttributeRequest(Attributes.URL,null)
Item docDef = fm.createDocumentDefinition(new NamedValue[]
new NamedValue(Attributes.NAME, destinationFile),
},requestedAttributes);
String defURL = ... // get URL from document definition
doFileUpload(...) // upload file using http put to defURL
NamedValue[] documentDef = new NamedValue[] {
new NamedValue(Options.USE_SAVED_DEFINITION,new Long(docDef.getId())),
new NamedValue(Options.DESTFOLDER, new Long(destinationFolder.getId())),
// specify character set if appropriate
new NamedValue(Attributes.DOCUMENT_CHARACTER_SET,"ISO-8859-1"),
// specify language if appropriate
new NamedValue(Attributes.DOCUMENT_LANGUAGE,"ENGLISH"),
// apply category instance information
new NamedValue(Options.CATEGORY_DEFINITION, categoryDef),
requestedAttributes = ...
Item doc = fm.createDocument(documentDef,null, requestedAttributes);
// Note – it is possible for one to peform creation of multiple category instances on a document at the same time
// you simply supply multiple Options.CATEGORY_DEFINITIONs to the fm.createDocument call
// Note – that if a folder has a category configuration containing required categories, and you do not specify
// all applicable category definitions on createDocument, you will receive an FdkException along the lines of
// missing metadata. You can catch this exception, and retry the createDocument call supplying the valid category definition(s). -
I have a problem, The scenario is that when I click any folder that si in my JTable's first row, the table is update by removing all the rows and showing only the contents of my selected folder. Right now it's not removing the rows and instead throwing exceptions. The code is attached. The methods to look are upDateTabel(...) and clearTableData(....), after clearing all my rows then I proceed on adding my data to the Jtable and inserting rows but it's not being done. May be I have a problem in my DefaultTableModel class. Please see the code below what I am doing wrong and how should I do it. Any help is appreciated.
Thanks
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.border.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class SimpleTable extends JPanel{
/** Formats the date */
protected SimpleDateFormat formatter;
/** variable to hold the date and time in a raw form for the directory*/
protected long dateDirectory;
/** holds the readable form converted date for the directories*/
protected String dirDate;
/** holds the readable form converted date for the files*/
protected String fileDate;
/** variable to hold the date and time in a raw form for the file*/
protected long dateFile;
/** holds the length of the file in bytes */
protected long totalLen;
/** convert the length to the wrapper class */
protected Long longe;
/** Vector to hold the sub directories */
protected Vector subDir;
/** holds the name of the selected directory */
protected String dirNameHold;
/** converting vector to an Array and store the values in this */
protected File directoryArray[];
/** hashtable to store the key-value pair */
protected static Hashtable hashTable = new Hashtable();
/** refer to the TableModel that is the default*/
protected MyTableModel tableModel;
/** stores the path of the selected file */
protected static String fullPath;
/** stores the currently selected file */
protected static File selectedFilename;
/** stores the extension of the selected file */
protected static String extension;
protected int COLUMN_COUNT = 4;
protected Vector data = new Vector( 0, 1 );
protected final JTable table;
/** holds the names of the columns */
protected final String columnNames[] = {"Name", "Size", "Type", "Modified"};
public SimpleTable(File directoryArray[])
this.setLayout(new BorderLayout());
this.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
(SimpleTable.hashTable).clear();
formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
for(int k = 0; k < directoryArray.length; k++)
if(directoryArray[k].isDirectory())
dateDirectory = directoryArray[k].lastModified();
dirDate = formatter.format(new java.util.Date(dateDirectory));
data.addElement( new MyObj( directoryArray[k].getName(), "", "File Folder", "" + dirDate ) );
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
else if(directoryArray[k].isFile())
dateDirectory = directoryArray[k].lastModified();
fileDate = formatter.format(new java.util.Date(dateDirectory));
totalLen = directoryArray[k].length();
longe = new Long(totalLen);
data.addElement( new MyObj( directoryArray[k].getName(), longe + " Bytes", "", "" + fileDate ) );
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
tableModel = new MyTableModel();
table = new JTable( tableModel );
table.getTableHeader().setReorderingAllowed(false);
table.setRowSelectionAllowed(false);
table.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
table.addMouseListener(new MouseAdapter()
public void mouseReleased(MouseEvent e)
Object eventTarget = e.getSource();
if( eventTarget == table )
upDateTable(table);
table.tableChanged( new javax.swing.event.TableModelEvent(tableModel) ) ;
DefaultTableCellRenderer D_headerRenderer = (DefaultTableCellRenderer ) table.getTableHeader().getDefaultRenderer();
table.getColumnModel().getColumn(0).setHeaderRenderer(D_headerRenderer );
((DefaultTableCellRenderer)D_headerRenderer).setToolTipText("File and Folder in the Current Folder");
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this window.
this.add(scrollPane, BorderLayout.CENTER);
* Searches the Hashtable and returns the path of the folder or the value.
public File findPath(String value)
return (File)((SimpleTable.hashTable).get(value));
* This clears the previous data in the JTable
public void clearTableData(JTable table)
for(int row = 0; row < table.getRowCount() ; row++)
//for (int col = 0; col < table.getColumnCount() ; col++)
tableModel.deleteSelections( row );
tableModel.fireTableStructureChanged();
tableModel.fireTableRowsDeleted(0,table.getRowCount());
//table.getModel().fireTableChanged(new TableModelEvent(table.getModel()));
private void upDateTable(JTable table)
if((table.getSelectedColumn() == 0) && ((table.getColumnName(0)).equals(columnNames[0])))
dirNameHold =(String) table.getValueAt(table.getSelectedRow(),table.getSelectedColumn());
File argument = findPath(dirNameHold);
if(argument.isFile())
CMRDialog.fileNameTextField.setText(argument.getName());
try
fullPath = argument.getCanonicalPath();
selectedFilename = argument.getCanonicalFile();
CMRDialog.filtersComboBox.removeAllItems();
extension = fullPath.substring(fullPath.lastIndexOf('.'));
CMRDialog.filtersComboBox.addItem("( " + extension + " )" + " File");
catch(IOException e)
System.out.println("THE ERROR IS " + e);
return;
else if(argument.isDirectory())
String path = argument.getName();
//find the system dependent file separator
//String fileSeparator = System.getProperty("file.separator");
CMRDialog.driveComboBox.addItem(" " + path);
subDir = Search.subDirs(argument);
/**TBD:- needs a method to convert the vector to an array and return the array */
directoryArray = new File[subDir.size()];
int indexCount = 0;
/** TBD:- This is inefficient way of converting a vector to an array */
Iterator e = subDir.iterator();
while( e.hasNext() )
directoryArray[indexCount] = (File)e.next();
indexCount++;
/** now calls this method and clears the previous data */
clearTableData(table);
(SimpleTable.hashTable).clear();
//data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
for(int k = 0; k < directoryArray.length; k++)
if(directoryArray[k].isDirectory())
dateDirectory = directoryArray[k].lastModified();
dirDate = formatter.format(new java.util.Date(dateDirectory));
data.addElement( new MyObj( directoryArray[k].getName(), "", "File Folder", "" + dirDate ) );
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
else if(directoryArray[k].isFile())
dateDirectory = directoryArray[k].lastModified();
fileDate = formatter.format(new java.util.Date(dateDirectory));
totalLen = directoryArray[k].length();
longe = new Long(totalLen);
data.addElement( new MyObj( directoryArray[k].getName(), longe + " Bytes", "", "" + fileDate ) );
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
// tableModel.fireTableDataChanged();
// tableModel.fireTableRowsInserted(0,1);
table.revalidate();
table.validate();
class MyTableModel extends DefaultTableModel
int totalRows;
int totalCols;
public MyTableModel()
super();
setColumnIdentifiers (columnNames);
this.totalRows = data.size();
this.totalCols = columnNames.length;
// this will return the row count of your table
public int getRowCount()
return totalRows;
// this return the column count of your table
public int getColumnCount()
return totalCols;
// this return the data for each cell in your table
public Object getValueAt(int row, int col)
MyObj obj = (MyObj)data.elementAt( row );
if( obj != null )
if( col == 0 ) return( obj.first );
else if( col == 1 ) return( obj.last );
else if( col == 2 ) return( obj.third );
else if( col == 3 ) return( obj.fourth );
else return( "" );
return "";
// if you want your table to be editable then return true
public boolean isCellEditable(int row, int col)
return false;
// if your table is editable edit the data vector here and
// call table.tableChanged(...)
public void setValueAt(Object value, int row, int col)
protected void deleteSelections (int rows)
try
removeRow(rows);
catch(ArrayIndexOutOfBoundsException e)
System.out.println("The error in the row index " + rows);
fireTableDataChanged() ;
class MyObj
String first;
String last;
String third;
String fourth;
public MyObj( String f, String l, String t, String fo )
this.first = f;
this.last = l;
this.third = t;
this.fourth = fo;
#####################################The following code works fine but it doesn't show me the new updated date in my JTable. I tried to print the values that I am getting and it does give the values on the prompt but doesn't show me on the JTable only first two are shown and the rest of the table is filled with the same values. I don't know what's going on and am tired of this TableModel thing so pla. take a time to give me some suggestions. Thanks
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.border.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class SimpleTable extends JPanel {
/** Formats the date */
protected SimpleDateFormat formatter;
/** two-dimensional array to hold the information for each column */
protected Object data[][];
/** variable to hold the date and time in a raw form for the directory*/
protected long dateDirectory;
/** holds the readable form converted date for the directories*/
protected String dirDate;
/** holds the readable form converted date for the files*/
protected String fileDate;
/** variable to hold the date and time in a raw form for the file*/
protected long dateFile;
/** holds the length of the file in bytes */
protected long totalLen;
/** convert the length to the wrapper class */
protected Long longe;
/** Vector to hold the sub directories */
protected Vector subDir;
/** holds the name of the selected directory */
protected String dirNameHold;
/** converting vector to an Array and store the values in this */
protected File directoryArray[];
/** hashtable to store the key-value pair */
protected static Hashtable hashTable = new Hashtable();
/** refer to the TableModel that is the default*/
protected DefaultTableModel model;
/** stores the path of the selected file */
protected static String fullPath;
/** stores the currently selected file */
protected static File selectedFilename;
/** stores the extension of the selected file */
protected static String extension;
protected Vector m = new Vector(0,1);
/** holds the names of the columns */
protected final String columnNames[] = {"Name", "Size", "Type", "Modified"};
public SimpleTable(File directoryArray[])
this.setLayout(new BorderLayout());
this.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
(SimpleTable.hashTable).clear();
data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
for(int k = 0; k < directoryArray.length; k++)
if(directoryArray[k].isDirectory())
data[k][0] = directoryArray[k].getName();
data[k][2] = "File Folder";
dateDirectory = directoryArray[k].lastModified();
dirDate = formatter.format(new java.util.Date(dateDirectory));
data[k][3] = dirDate;
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
else if(directoryArray[k].isFile())
data[k][0] = directoryArray[k].getName();
totalLen = directoryArray[k].length();
longe = new Long(totalLen);
data[k][1] = longe + " Bytes";
dateFile = directoryArray[k].lastModified();
fileDate = formatter.format(new java.util.Date(dateFile));
data[k][3] = fileDate;
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
model = new DefaultTableModel();
model.addTableModelListener( new TableModelListener(){
public void tableChanged( javax.swing.event.TableModelEvent e )
System.out.println("************ I am inside the table changed method ********" );
final JTable table = new JTable(model);
table.getTableHeader().setReorderingAllowed(false);
table.setRowSelectionAllowed(false);
table.setBorder( BorderFactory.createEmptyBorder( 0, 0, 0, 0 ) );
table.setShowHorizontalLines(false);
table.setShowVerticalLines(false);
table.addMouseListener(new MouseAdapter()
/* public void mousePressed(MouseEvent e)
//System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
/* if(e.getClickCount() >= 2 &&
(table.getSelectedColumn() == 0) &&
((table.getColumnName(0)).equals(columnNames[0])))
//System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
upDateTable(table);
public void mouseReleased(MouseEvent e)
//System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
/* if(e.getClickCount() >= 2 &&
(table.getSelectedColumn() == 0) &&
((table.getColumnName(0)).equals(columnNames[0]))) */
//System.out.println("The clicked component is " + table.rowAtPoint(e.getPoint()) + "AND the number of clicks is " + e.getClickCount());
upDateTable(table);
/** set the columns */
for(int c = 0; c < columnNames.length; c++)
model.addColumn(columnNames[c]);
/** set the rows */
for(int r = 0; r < data.length; r++)
model.addRow(data[r]);
DefaultTableCellRenderer D_headerRenderer = (DefaultTableCellRenderer ) table.getTableHeader().getDefaultRenderer();
table.getColumnModel().getColumn(0).setHeaderRenderer(D_headerRenderer );
((DefaultTableCellRenderer)D_headerRenderer).setToolTipText("File and Folder in the Current Folder");
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this window.
this.add(scrollPane, BorderLayout.CENTER);
* Returns the number of columns
public int getColumnTotal()
return columnNames.length;
* Returns the number of rows
public int getRowTotal(Object directoryArray[])
return directoryArray.length;
private void upDateTable(JTable table)
if((table.getSelectedColumn() == 0) && ((table.getColumnName(0)).equals(columnNames[0])))
dirNameHold =(String) table.getValueAt(table.getSelectedRow(),table.getSelectedColumn());
File argument = findPath(dirNameHold);
if(argument.isFile())
CMRDialog.fileNameTextField.setText(argument.getName());
try
fullPath = argument.getCanonicalPath();
selectedFilename = argument.getCanonicalFile();
CMRDialog.filtersComboBox.removeAllItems();
extension = fullPath.substring(fullPath.lastIndexOf('.'));
CMRDialog.filtersComboBox.addItem("( " + extension + " )" + " File");
catch(IOException e)
System.out.println("THE ERROR IS " + e);
return;
else if(argument.isDirectory())
String path = argument.getName();
//find the system dependent file separator
//String fileSeparator = System.getProperty("file.separator");
CMRDialog.driveComboBox.addItem(" " + path);
subDir = Search.subDirs(argument);
/**TBD:- needs a method to convert the vector to an array and return the array */
directoryArray = new File[subDir.size()];
int indexCount = 0;
/** TBD:- This is inefficient way of converting a vector to an array */
Iterator e = subDir.iterator();
while( e.hasNext() )
directoryArray[indexCount] = (File)e.next();
indexCount++;
/** now calls this method and clears the previous data */
clearTableData(table);
(SimpleTable.hashTable).clear();
data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm aaa");
m.clear();
data = null;
data = new Object[this.getRowTotal(directoryArray)][this.getColumnTotal()];
for(int k = 0; k < directoryArray.length; k++)
if(directoryArray[k].isDirectory())
System.out.println("Inside the if part");
data[k][0] = directoryArray[k].getName();
table.setValueAt(directoryArray[k].getName(),k,0);
//model.fireTableCellUpdated(k,0);
data[k][2] = "File Folder";
table.setValueAt("File Folder",k,2);
//model.fireTableCellUpdated(k,2);
dateDirectory = directoryArray[k].lastModified();
dirDate = formatter.format(new java.util.Date(dateDirectory));
data[k][3] = dirDate;
table.setValueAt(dirDate,k,3);
//model.fireTableCellUpdated(k,3);
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]);
m.add(data);
model.addRow(m);
model.fireTableDataChanged();
else if(directoryArray[k].isFile())
System.out.println("******* Inside the else part *******");
data[k][0] = directoryArray[k].getName();
System.out.println("The Name is == " + data[k][0]);
table.setValueAt(directoryArray[k].getName(),k,0);
System.out.println("The table cell value of the name is == " + table.getValueAt(k,0));
//model.fireTableCellUpdated(k,0);
totalLen = directoryArray[k].length();
longe = new Long(totalLen);
data[k][1] = longe + " Bytes";
System.out.println("The length == " + data[k][1]);
table.setValueAt(longe + " Bytes",k,1);
System.out.println("The table cell value of the length is == " + table.getValueAt(k,1));
//model.fireTableCellUpdated(k,0);
dateFile = directoryArray[k].lastModified();
fileDate = formatter.format(new java.util.Date(dateFile));
data[k][3] = fileDate;
System.out.println("The modified date == " + data[k][3]);
table.setValueAt(fileDate,k,3);
System.out.println("The table cell value of the name is == " + table.getValueAt(k,3));
//model.fireTableCellUpdated(k,0);
(SimpleTable.hashTable).put(directoryArray[k].getName(), directoryArray[k]); }
m.add(data);
model.addRow(m);
model.fireTableDataChanged();
// model.fireTableDataChanged();
// model.fireTableRowsInserted(0,1);
table.revalidate();
table.validate();
else
* Searches the Hashtable and returns the path of the folder or the value.
public File findPath(String value)
return (File)((SimpleTable.hashTable).get(value));
* This clears the previous data in the JTable
public void clearTableData(JTable table)
for(int row = 0; row < table.getRowCount() ; row++)
for (int col = 0; col < table.getColumnCount() ; col++)
table.setValueAt(null, row , col);
model.fireTableStructureChanged();
### -
REUSE_ALV_GRID_DISPLAY - updating the database with new values
Hi,
I am using the function module 'REUSE_ALV_GRID_DISPLAY' to display records. I have managed to open a field for input/edit mode. Once this data has been changed , where will this data be? I have checked the internal table - no joy. I need to use this new/changed data to update the database with the new values.
Thanks,
LeanneHi,
The data is stored in table tab. After the changes the data does not reflect in table tab. Where can I get the data so that I can update my database?
I have coded the process as follows:
when '&SUSPEND'.
loop at tab
where box = 'X'.
update zzzz
set status = 'SP'
endloop.
Regards,
Leanne
Maybe you are looking for
-
Portal favorites not displaying the iview.
Hi Team, We have a home role with a welcome page which is the first role to be displayed to every user logged in to portal. Now we have enabled the option "Add to Portal favorites" to the portal objects. So when a report (BI / Bo report) is added to
-
Memory Leak with GotoAndStop()
I am trying to track down a solution to a memory leak within an embedded video. If I embed a video on the timeline and then run gotoAndStop or gotoAndPlay to a specific frame every time the frame changes it takes in more memory until it crashes at a
-
Missing InfoObjects in Business Content for Higher Education & Research
Hello According to the SAP documentation "[Guideline u2013 BW Content 3.53 and 7.03 for Student Lifecycle Management|http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/a0780530-bf03-2b10-d5ad-e9e8a53def23]" there should be an InfoObject 0HE_EVPRS
-
Repairing the library every time iPhoto launches. Why??
I just upgraded my MacBook Pro to Mavericks and updated iPhoto. Everytime I start iPhoto it says that it needs to "Upgrade" the library to the latest version. Then it says that the library has to be repaired and I go through this process, the library
-
Audio doing Wierd things!!
Just wondered if anyone has experienced this little querk? All was well, but my captivate has just started to do this today, and it's somewhat annoying and causing me unneccessary re-work. Problem is this: I am recording narration onto a captivate pr