2012-05-15 12 views
6

जावाएफएक्स 2 की TableView विशेषताएं "उपयोगकर्ता द्वारा रनटाइम पर कॉलम रीडरिंग"। मैं इस एप्लिकेशन को अपने एप्लिकेशन में एक विशिष्ट तालिका के लिए अक्षम करना चाहता हूं।JavaFX2 TableView में कॉलम-रीडरिंग को अक्षम कैसे करें?

एपीआई दस्तावेज़ को देखते हुए, इसके लिए कोई स्पष्ट एपीआई हुक नहीं है। हालांकि, columns -प्रोपर्टी है। दस्तावेज़ के अनुसार, यह

तालिका तालिका जो इस तालिका दृश्य का हिस्सा हैं का प्रतिनिधित्व करती है। चूंकि उपयोगकर्ता टेबल व्यू कॉलम को रीडर करता है, इसलिए यह सूची वर्तमान दृश्य क्रम को प्रतिबिंबित करने के लिए अपडेट की जाएगी।

उम्मीद है कि मैं कम से कम एक बदलाव को रीसेट करने में सक्षम होने के बाद सक्षम हूं, मैंने इस तथ्य के बाद परिवर्तनों को रीसेट करने के लिए श्रोता जोड़ने की कोशिश की।

import javafx.application.Application; 
import javafx.collections.ListChangeListener; 
import javafx.scene.Scene; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.stage.Stage; 

public class TableTest extends Application { 

    public static void main(String[] args) { 
    launch(args); 
    } 


    @Override 
    public void start(Stage stage) { 
    TableView tableView = new TableView(); 
    tableView.getColumns().setAll(new TableColumn(), new TableColumn()); 
    tableView.getColumns().addListener(new ListChangeListener() { 
     @Override 
     public void onChanged(Change change) { 
      if (change.wasPermutated()){ 
       change.reset(); 
      } 
     } 
    }); 
    stage.setScene(new Scene(tableView)); 
    stage.show(); 
    } 
} 

हालांकि, श्रोता एक IllegalStateException साथ रोकता है जब मैं wasPermutated के लिए पूछना।
क्या रीडरिंग को रोकने के लिए कोई तरीका है, या कम से कम इसे प्रोग्रामिक रूप से वापस लाएं?

+0

मैंने बस उस विधि को आजमाया और कॉलम को स्थानांतरित करते समय 'ऑन चेंज' विधि को कॉल किया जाता है। हालांकि मुझे 'change.wasermermated()' पर एक IllegalStateException मिलता है। – assylias

+0

उस स्थिति में, मेरा कोड शायद बहुत जटिल था। मैं एक न्यूनतम उदाहरण स्थापित करूंगा और वहां से जारी रहूंगा। –

+1

बस मेरे जवाब और इस तरह के कार्यों में एक संपादन किया। आपको पहले राज्य की जांच करने से पहले 'change.next()' को कॉल करने की आवश्यकता है + चलती कॉलम ध्वज को जोड़ने के लिए ध्वज सेट करने लगते हैं, 0 क्रमशः – assylias

उत्तर

8

एक एसएससीसीई के नीचे देखें जो दिखाता है कि श्रोता को बुलाया जाता है - लेकिन ध्वज कॉलम करते समय ध्वज added पर सेट किया जाता है। ध्यान दें कि परिवर्तन का उपयोग करने से पहले आपको next() पर कॉल करने की आवश्यकता है या आपको IllegalStateException मिल जाएगा। एक साधारण कैनोलिक उदाहरण के लिए javadoc of ListChangeListener.Change देखें।

import javafx.application.Application; 
import javafx.collections.ListChangeListener; 
import javafx.scene.Scene; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.stage.Stage; 

public class TableTest extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
    final TableView tableView = new TableView(); 
    final TableColumn[] columns = {new TableColumn("1"), new TableColumn("2")}; 
    tableView.getColumns().setAll(columns); 
    tableView.getColumns().addListener(new ListChangeListener() { 
     public boolean suspended; 

     @Override 
     public void onChanged(Change change) { 
      change.next(); 
      if (change.wasReplaced() && !suspended) { 
       this.suspended = true; 
       tableView.getColumns().setAll(columns); 
       this.suspended = false; 
      } 
     } 
    }); 
    stage.setScene(new Scene(tableView)); 
    stage.show(); 
    } 
} 
+0

आपकी टिप्पणियों के लिए धन्यवाद, मेरे पास अब एक कामकाजी नमूना है। मेरा कोड आपके से अधिक संक्षिप्त है और मुझे लगता है कि यह प्रश्न का बेहतर उत्तर देता है, फिर भी मैं आपको समाधान देना चाहता हूं। क्या यह ठीक है अगर मैं अपना कोड दिखाने के लिए अपना उत्तर संपादित करता हूं और इसे स्वीकार के रूप में चिह्नित करता हूं? –

+0

@UrsReupke निश्चित - मेरा जवाब केवल आंशिक है - आपको अपना उत्तर पोस्ट करना चाहिए और यदि आप चाहते हैं तो इसे स्वीकार करें। – assylias

+0

आप या तो मेरा संपादन कर सकते हैं या एक नया बना सकते हैं - आपका कॉल। – assylias

संबंधित मुद्दे