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.