Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

JTable auto Update problem.

843806Jan 9 2008 — edited Jan 9 2008
Hi,
I am getting a serious problem with JTable.

I have one class SoftLightStack.java. from this class I created SoftLightUI.java where I basically created the JTable.

Here I am getting some XML message in SoftLightStack.java class using socket connection and after parsing the message I want to update data in the JTable of SoftLightUI.java class from SoftLightStack class.

But is it not updated.

But if I put some button in the SoftLightUI.java class and click it by calling the same function it is working.

In short --- someInst of SoftLightUI call updatetable() from SoftLightStack. -- Not working.

But if call the same function using some button in SoftLightUI it works.

Can any body help me.

My input type message
<lightStack>

<color>R</color>

<op>ON</op>

<type>LIGHT</type>

<time>2</time>

<readerID>READER_001</readerID>

<tagID>A000123B</tagID>

<readTime>2008-01-08T16:21:03.805+05:30</readTime>

<status>VALID</status>

</lightStack>
I am going to update readerID,tagID,readTime,status in the JTable.
in short I created a map with the above mentiond data and creatd a new to add it to the Table model.

SoftLightStack.java
-----------------------------
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlException;
import noNamespace.LightStackDocument;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

public class SoftLightStack {

    private static ServerSocket serverSocket = null;

    private static Socket socket = null;

    private static BufferedReader in = null;

    private static int port = 6933;

    private static SoftLightUI myUI;
   


    private static String COLOR = "color";
    private static String OP = "op";
    private static String TYPE = "type";
    private static String TIME = "time";
    private static String READERID = "readerID";
    private static String TAGID = "tagID";
    private static String READTIME = "readTime";
    private static String STATUS = "status";


    

    public SoftLightStack() {
    }

    public static void main(String args[]) {
        if (args.length >= 1)
            try {
                port = Integer.parseInt(args[0]);
            } catch (Exception exception) {
                System.out.println(exception);
            }
        System.out.println("port : " + port);
       
        *myUI = SoftLightUI.getInstance();*
        *myUI.start();*
        do {
            try {
                serverSocket = new ServerSocket(port);
                socket = serverSocket.accept();
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                boolean flag = false;
                String inst="";
                for (String s = null; (s = in.readLine()) != null;){
                  inst=inst+s;
                }
                // Getting the XML message a mentioned above.
                *processInstructionSet*(inst.trim());

            } catch (Exception exception1) {
                System.out.println(exception1);
            }
            try {
                in.close();
                socket.close();
                serverSocket.close();
            } catch (Exception exception2) {
                System.out.println(exception2);
            }
        } while (true);
    }



    private static void processInstructionSet(String s) {
        XmlObject xmlObj = null;
        try {
            System.out.println(s);
            xmlObj = LightStackDocument.Factory.parse(s);
            if (xmlObj instanceof LightStackDocument) {

                LightStackDocument xmlDoc = (LightStackDocument) xmlObj;

                String color = xmlDoc.getLightStack().getColor();
                String operation = xmlDoc.getLightStack().getOperation();
                String readerID = xmlDoc.getLightStack().getReaderID();
                String tagReadTime = xmlDoc.getLightStack().getReadTime();
                String status = xmlDoc.getLightStack().getStatus();
                String tagID = xmlDoc.getLightStack().getTagID();
                String lightTime = xmlDoc.getLightStack().getTime();
                String type = xmlDoc.getLightStack().getType();

                HashMap hashmap = new HashMap();
                hashmap.put(COLOR,color);
                hashmap.put(OP,operation);
                hashmap.put(READERID,readerID);
                hashmap.put(READTIME,tagReadTime);
                hashmap.put(STATUS,status);
                hashmap.put(TAGID,tagID);
                hashmap.put(TIME,lightTime);
                hashmap.put(TYPE,type);

                *processInstruction(hashmap);*
            }
        } catch (XmlException e) {
            e.printStackTrace();
        }

    }


    private static void processInstruction(Map map) {

        System.out.println("@@ - processInstruction  : map  = " + map);
            
            // If I call it from here table is not updated     
            *myUI.updateTables(map);*
     }

 
    }

}
SoftLightUI.java class
--------------------------------

import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import java.util.*;
import java.util.Timer;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
 * Created by IntelliJ IDEA.
 * User: 151054
 * Date: Jan 9, 2008
 * Time: 12:24:52 PM
 * To change this template use File | Settings | File Templates.
 */
public class SoftLightUI extends javax.swing.JPanel {


    class RecoverTask extends TimerTask {

        public void run() {
            SoftLightUI softlightstackui = SoftLightUI.getInstance();
            softlightstackui.recoverImage();
        }

        RecoverTask() {
        }
    }

    public void start() {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                listenAndShowGUI();
            }

        });
    }

    public static SoftLightUI getInstance() {
        if (instance == null)
            synchronized (SoftLightUI.class) {
                if (instance == null)
                    instance = new SoftLightUI();
            }
        return instance;
    }

   private SoftLightUI() {
        initComponents();
        myTimer = new java.util.Timer();
               
    }

   

    private void initComponents() {

        lightStackPanel = new javax.swing.JPanel();
        //addLabel();
        tablePanel = new javax.swing.JPanel();

        leftScrollPane = new javax.swing.JScrollPane();

        // correct tag table
        correctTagTable = new javax.swing.JTable();

        // correct tag table lable
        correctTableLbl = new javax.swing.JLabel();
        // wrong tag table label
        wrongTableLbl = new javax.swing.JLabel();

        // Clear Table button
        clrTableButtonOne = new javax.swing.JButton();
        clrTableButtonTwo = new javax.swing.JButton();


        rightScrollPane = new javax.swing.JScrollPane();
        // wrong tag table
        wrongTagTable = new javax.swing.JTable();

        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        // light stack panel
        //-----------------------------------------------------------------------------------

        // ------------------------------------------------------------------------------

        // right side Table Panel
        tablePanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

        Object[][] dataOne = {};
        String[] columnNamesOne = {tagID, readerID, readTime, alertType};
        DefaultTableModel correctTagTableModel = new DefaultTableModel(dataOne, columnNamesOne);
        correctTagTable = new JTable(correctTagTableModel);
      //  correctTagTable.setEnabled(false);

        leftScrollPane.setViewportView(correctTagTable);

        // Table lable set up.
        correctTableLbl.setText(tableLableOne);
        wrongTableLbl.setText(tableLableTwo);

        // button text set up.
        clrTableButtonOne.setText(buttonLable);
//-----------------------------------------------------------------------------------------
   // if I use this button code instead of calling it from the previous class
//it works fine 
//--------------------------------------------------------------------------------------

        *clrTableButtonOne.addActionListener( new ActionListener()*
*		{*
*			public void actionPerformed(ActionEvent e)*
*			{*
*				Map m = new HashMap();*

                *m.put(TAGID,"1019UYS1");*
                *m.put(READERID,"READERID");*
                *m.put(READTIME,"READTIME");*
                *m.put(STATUS,"STATUS");*
                *updateTables(m);*
                *out("shankha");*
            *}*
*		});*



        clrTableButtonTwo.setText(buttonLable);

        Object[][] dataTwo = {{null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}};
        String[] columnNames = {tagID, readerID, readTime, alertType};
        DefaultTableModel wrongTagTableModel = new DefaultTableModel(dataTwo, columnNames);
        wrongTagTable = new JTable(wrongTagTableModel);
        //correctTagTable.setEnabled(false);

        rightScrollPane.setViewportView(wrongTagTable);
        //-----------------------------------------------------------------------------------
        //Table panel lay out manager jPanel2Layout GroupLayout supported by JDK 1.6

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(tablePanel);
        tablePanel.setLayout(jPanel2Layout);

        jPanel2Layout.setHorizontalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addContainerGap()
                                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(correctTableLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 213, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addComponent(wrongTableLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGap(221, 221, 221))
                                .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addContainerGap()
                                        .addComponent(leftScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 628, Short.MAX_VALUE))
                                .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addContainerGap()
                                        .addComponent(clrTableButtonOne))
                                .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addContainerGap()
                                        .addComponent(rightScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 628, Short.MAX_VALUE))
                                .addGroup(jPanel2Layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(clrTableButtonTwo)))
                        .addContainerGap())
        );

        jPanel2Layout.setVerticalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGap(23, 23, 23)
                        .addComponent(correctTableLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(leftScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(clrTableButtonOne)
                        .addGap(18, 18, 18)
                        .addComponent(wrongTableLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(rightScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(clrTableButtonTwo)
                        .addContainerGap(33, Short.MAX_VALUE))
        );
        //----------------------------------------------------------------------------------------
        // main layout where left and right panle lay out is added.
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);

        this.setLayout(layout);

        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addComponent(lightStackPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(33, 33, 33)
                        .addComponent(tablePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(20, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                        .addGap(24, 24, 24)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(tablePanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(lightStackPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap(56, Short.MAX_VALUE))
        );

        try {
            //look and feel.
            //javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
            javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            javax.swing.SwingUtilities.updateComponentTreeUI(this);
        } catch (Exception ex) {
            System.exit(0);
        }
    }

    private void addLabel() {
        idleImage = createImageIcon(idleImageUrl);
        redImage = createImageIcon(redImageUrl);
        greenImage = createImageIcon(greenImageUrl);
        yellowImage = createImageIcon(yellowImageUrl);
        displayLabel = new JLabel();
        displayLabel.setHorizontalAlignment(0);
        displayLabel.setVerticalAlignment(0);
        displayLabel.setVerticalTextPosition(0);
        displayLabel.setHorizontalTextPosition(0);
        displayLabel.setBorder(BorderFactory.createCompoundBorder(BorderFactory
                .createLoweredBevelBorder(), BorderFactory.createEmptyBorder(5,
                5, 5, 5)));
        displayLabel.setBorder(BorderFactory.createCompoundBorder(BorderFactory
                .createEmptyBorder(0, 0, 10, 0), displayLabel.getBorder()));
        displayLabel.setIcon(idleImage);
        displayLabel.setText("");

    }

    protected ImageIcon createImageIcon(String s) {
        //java.net.URL url = (SoftLightStackUI.class).getResource("images//"+s);
        Image image = Toolkit.getDefaultToolkit().getImage("images/" + s);
        if (image == null) {
            System.err.println("Resource not found: " + s);
            return null;
        } else {
            return new ImageIcon(image);
        }
    }

    private void listenAndShowGUI() {

        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame jframe = new JFrame("Soft-LightStack");
        jframe.setDefaultCloseOperation(3);
        SoftLightUI softlightstackui = new SoftLightUI();
        jframe.setContentPane(softlightstackui);

        jframe.pack();
        jframe.setVisible(true);

    }

   


     *public void updateTables(Map map)* {
            DefaultTableModel model=null;
            model= (DefaultTableModel) correctTagTable.getModel();
            model.addRow(createRow(correctTagTable,map));
            int row = correctTagTable.getRowCount() - 1;
            correctTagTable.changeSelection(row, 0, false, false);
            correctTagTable.requestFocusInWindow();
            this.tablePanel.updateUI();
         
     }

    private Object[] createRow(JTable table,Map map){
        out("createRow");
        Object[] newRow = new Object[4];
		int row = table.getRowCount() + 1;
         out("createRow : no od Row  : "+row );
        newRow[0] =(String) map.get(TAGID);
        newRow[1] =(String) map.get(READERID);
        newRow[2] =(String) map.get(READTIME);
        newRow[3] =(String) map.get(STATUS);
        out("TAGID : "+(String) map.get(TAGID) );
        out("READERID : "+(String) map.get(READERID) );
        out("READTIME : "+(String) map.get(READTIME) );
        out("STATUS"+(String) map.get(STATUS) );
        return newRow;
	}

    private static void out(String s) {
       System.out.println(s);
    }

        }

    private static SoftLightUI instance = new SoftLightUI();

    private Timer myTimer;

    private javax.swing.JButton clrTableButtonOne;
    private javax.swing.JButton clrTableButtonTwo;

    // correct tag table label
    private javax.swing.JLabel correctTableLbl;
    private javax.swing.JLabel wrongTableLbl;

    private static JLabel displayLabel = null;

    // JPanle
    private javax.swing.JPanel lightStackPanel;
    private javax.swing.JPanel tablePanel;

    private javax.swing.JScrollPane leftScrollPane;
    private javax.swing.JScrollPane rightScrollPane;

    private javax.swing.JTable correctTagTable;
    private javax.swing.JTable wrongTagTable;

    final String idleImageUrl = "gray.gif";
    final String redImageUrl = "red.gif";
    final String greenImageUrl = "green.gif";
    final String yellowImageUrl = "yellow.gif";
    private ImageIcon idleImage, redImage, greenImage, yellowImage;

    private static final String tableLableOne = "CORRECT TAG TABLE";
    private static final String tableLableTwo = "WRONG TAG TABLE";
    private static final String buttonLable = "CLEAR TABLE";

    private static final String tagID = "TAG ID";
    private static final String readerID = "READER ID";
    private static final String readTime = "READ TIME";
    private static final String alertType = "ALERT TYPE";

     private static String VALID_STATUS = "VALID";

    private static String COLOR = "color";
    private static String OP = "op";
    private static String TYPE = "type";
    private static String TIME = "time";
    private static String READERID = "readerID";
    private static String TAGID = "tagID";
    private static String READTIME = "readTime";
    private static String STATUS = "status";

    // End of variables declaration

}
Can any body help me.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 6 2008
Added on Jan 9 2008
1 comment
103 views