जब मैं अपने डेटा को प्रस्तुत और संपादित करने के लिए एक JXTable का उपयोग कर रहा हूं, तो सेलइडिटर में कुछ इनपुट खो जाता है। यदि मैं JXTable-ColumnHeader के Resizing-Divider पर क्लिक करता हूं या JFrame की चौड़ाई बदलता हूं, तो सेल एडिटर मूल्य को कम किए बिना समाप्त हो जाता है। यदि मैं जेटीबल का उपयोग करता हूं तो मान सहेजे जाते हैं।JXTable इनपुट खोने क्यों है जहां JTable नहीं है?
मैं अपनी अन्य सुविधाओं के कारण JXTable का उपयोग करना चाहता हूं, तो क्या JXTable को ठीक करने का कोई तरीका है?
उदाहरण:
package table.columnresize;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.jdesktop.swingx.JXTable;
/**
* Demo of differing behaviour of JXTable and JTable. JXTable loses input in a TableCell where JTable persists
* it.
* <p>
* <table border=1>
* <tr>
* <th></th>
* <th>JXTable</th>
* <th>JTable</th>
* </tr>
* <tr>
* <td>Click on TableColumnHeader</td>
* <td>saved</td>
* <td>saved</td>
* </tr>
* <tr>
* <td>Resizing with Divider of TableColumnHeader</td>
* <td>lost</td>
* <td>saved</td>
* </tr>
* <tr>
* <td>Changing the width of JFrame</td>
* <td>lost</td>
* <td>saved</td>
* </tr>
*
* </table>
* </p>
*
* @author bobndrew 2015-01-29
*/
public class JXTableAndJTableEditLossDemo
{
private static class DataModel extends DefaultTableModel
{
public DataModel(Object[][] data, Object[] columnNames)
{
super(data, columnNames);
}
}
private static void createAndShowUI()
{
Object[][] DATA = { { "One", 1 }, { "Two", 2 }, { "Three", 3 }, { "Four", 4 }, { "Five", 5 } };
String[] COLUMNS = { "A", "B" };
DataModel dataModel = new DataModel(DATA, COLUMNS);
JFrame frame1 = new JFrame("JXTable");
JXTable jXTable = new JXTable(dataModel);
//does not change anything: jXTable.setTerminateEditOnFocusLost(true);
System.out.println(jXTable.isTerminateEditOnFocusLost());
frame1.add(new JScrollPane(jXTable));
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.pack();
frame1.setVisible(true);
JFrame frame2 = new JFrame("JTable");
JTable jTable = new JTable(dataModel);
//does not change anything: jTable.putClientProperty("terminateEditOnFocusLost", Boolean.FALSE);
System.out.println(jTable.getClientProperty("terminateEditOnFocusLost"));
frame2.add(new JScrollPane(jTable));
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.pack();
frame2.setLocation((int) frame1.getLocation().getX() + frame1.getWidth() + 100, (int) frame1
.getLocation().getY());
frame2.setVisible(true);
}
public static void main(String[] args)
{
java.awt.EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
createAndShowUI();
}
});
}
}
क्या आपने JXTable पर एक कस्टम फोकस श्रोता जोड़ने की कोशिश की है? इस पोस्ट पर दूसरा और तीसरा जवाब देखें। http://stackoverflow.com/questions/1652942/can-a-jtable-save-data-whenever-a-cell-loses-focus –
अच्छा विचार है, लेकिन एक फोकस लिस्टर विभिन्न ऑपरेटिंग सिस्टम के तहत बहुत अविश्वसनीय है। – bobndrew