2017-12-20 49 views
12

मैं जावा 8 उपयोग कर रहा हूँ के लिए एक संपादक को परिभाषित, प्रलेखन पालन करने के बाद:JTable LOCALTIME प्रकार

मैं सेटअप एक विशेष फ़ॉर्मेटर मेरी JTable में एक स्तंभ को संपादित करते समय करना चाहते हैं। इस कॉलम में java.time.LocalTime उदाहरण शामिल हैं।

JTable table; 
... 
table.setDefaultEditor(LocalTime.class, new LocalTimeEditor()); 

कहाँ LocalTimeEditor (अंतरिम रूप) द्वारा परिभाषित किया गया है:

public class LocalTimeEditor extends DefaultCellEditor { 
    JFormattedTextField ftf; 

    public LocalTimeEditor() { 
    super(new JFormattedTextField()); 
    ftf = (JFormattedTextField) getComponent(); 

    // Set up the editor for the LocalTime cells. 
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); 
    ftf.setFormatterFactory(new DefaultFormatterFactory(dateFormatter)); 

लेकिन इस निम्नलिखित संकलन त्रुटि की ओर जाता है:

The constructor DefaultFormatterFactory(DateTimeFormatter) is undefined 

मैं एक समाधान को शामिल से दूर रहना चाहते हैं SimpleDateFormat (+ DateFormatter) जैसा कि here या here समझाया गया है, java.util.Date पर विचार किया जाना चाहिए ईरेड विरासत (पुराना कोड here देखें)।

वहाँ JFormattedTextField साथ DateTimeFormatter एकीकृत करने के लिए एक समाधान है, या मैं द्वारा अवरुद्ध कर रहा हूँ:

मैं भी MaskFormatter से दूर रहने की है, क्योंकि यह आसान की अनुमति नहीं है करना चाहते हैं कुछ के लिए त्रुटि प्रबंधन: "25:70:90"

+0

क्या आपको [JFormattedTextField.AbstractFormatter] (https://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.AbstractFormatter.html) का विस्तार करने की आवश्यकता है? तो आपको केवल दो अमूर्त तरीकों को लागू करने की आवश्यकता होगी? – matt

+0

जेडीके जावाडोक पदानुक्रम के बाद स्पष्ट रूप से दिखाता है कि, आपने जो बाधाओं के बारे में बताया है, उसके साथ जेडीके के भीतर कोई समाधान नहीं है। आपका एकमात्र विकल्प अपने आप को लागू करना है क्योंकि @ मैट ने कहा। – Gene

उत्तर

3

DefaultFormatterFactor के तर्क के अनुसार, मैं एक नया JFormattedTextField.AbstractFormatter

class JTFormater extends JFormattedTextField.AbstractFormatter{ 
    final DateTimeFormatter formatter; 
    public JTFormater(DateTimeFormatter formatter){ 
     this.formatter = formatter; 
    } 
    @Override 
    public Object stringToValue(String text) throws ParseException { 
     return formatter.parse(text); 
    } 

    @Override 
    public String valueToString(Object value) throws ParseException { 
     if(value instanceof TemporalAccessor){ 
      return formatter.format((TemporalAccessor) value); 
     } else{ 
      throw new ParseException("not a valid type at", 0); 
     } 
    } 
} 

इस मैं पार्स और LOCALTIME के ​​प्रदर्शित करते हैं, हालांकि मेरी कार्यान्वयन में यह बहुत अनाड़ी है सकता से बनाया।