2010-07-11 4 views
5

मुझे लगता है कि इसके अंदर एक JTextArea + A JButton शामिल कोशिकाओं के साथ एक स्तंभ बनाया है, जैसा कि आप 3 कॉलम में नीचे चित्र में देख सकते हैं:क्या मैं सीमाओं के बिना एक जेटीबल कॉलम बना सकता हूं?

alt text

लेकिन मैं अपने कीजिए के साथ समस्याओं के बहुत सारे सामना करना पड़ा है और सेलइडिटर उस कॉलम में कक्ष मानों को अद्यतन करते समय, क्योंकि मेरा कोड थोड़ा जटिल है। तो इसके बजाय मैं उस कॉलम को 2 कॉलम से बदलना चाहता हूं। एक कॉलम सामान्य स्ट्रिंग कक्ष और दूसरा जेबटन कोशिका होना चाहिए, लेकिन इन 2 कॉलमों में उपरोक्त छवि में कॉलम 3 दिखाई देने जैसा दिखना चाहिए। तो मेरे प्रश्न:

1. मैं 2 स्तंभों के शीर्षकों को एक साथ कैसे विलय कर सकता हूं?

2. मैं जेबट्टन कॉलम की बाएं सीमाओं को कैसे हटा सकता हूं?

यदि वे तय हैं, तो 2 कॉलम उपरोक्त छवि के समान दिखेंगे + सेल मानों को अपडेट करना बहुत आसान होगा।

-------------------------------- संपादित करें: मेरे कोड नमूना समस्याओं:

ठीक है दोस्तों ... तुमने इसके लिए पूछा। मेरा कोड बहुत बड़ा है लेकिन अगर आप इसे ठीक करने में मेरी मदद कर सकते हैं, तो यह सही होगा। मैंने अपनी समस्या & के लिए एक चल रहा जार नमूना बनाया है, मेरा स्रोत कोड भी शामिल है। आप यहाँ से डाउनलोड कर सकते:

Jar sample

समस्या यह है कि मैं एक बटन का उपयोग तालिका पंक्तियों छँटाई अनुमति है (उन्हें ले जाएँ अप/डाउन), लेकिन जब मैं ले जाया गया कोशिकाओं की यह कुछ ऐसा मान नहीं हैं अपडेट किया गया

आप निम्न स्क्रीनशॉट देख सकते हैं: alt text समस्या सेल संपादक में है जिसका उपयोग मैं कर रहा हूं ... लेकिन मैं इसे ठीक नहीं कर सकता।

+0

हमें अपने यूआई निर्माण कोड दिखाएं ताकि हम आपको अधिक मदद कर सकते हैं:

संपादित आप धातु एलएएफ उपयोग करना चाहते हैं, इस कोड को थोड़े दूसरे कॉलम के हेडर चित्रकारी नहीं की काम कर देता है सही रूप में। – msw

+0

मैं हार मानता हूं, यह कोड काम नहीं करता है, क्षमा करें। –

+0

काम नहीं करता है? ... इसे चलाने के लिए जार पर बस डबल क्लिक करें। – Brad

उत्तर

0

आप बिना किसी सीमा के खाली जेबीटन बना सकते हैं (खाली सीमा) जो टेबलसेलरेंडर लागू करता है?

+1

मुझे सेल सीमा (बाएं सीमा) को हटाने की आवश्यकता है ... बटन सीमा नहीं! – Brad

2

अद्यतन जब आप एक खाली तालिका मॉडल बनाने, ButtonCellRenderer (4 के बजाय) के दो उदाहरणों बनाते हैं, और स्तंभ 2 के लिए दोनों एक संपादक और एक रेंडरर और स्तंभ 3. यह निश्चित करने के लिए एक दूसरे के रूप में एक उदाहरण सेट पंक्तियों को स्थानांतरित करते समय गलत मान दिखाते हैं, लेकिन कभी-कभी होवर करते समय खाली सेल खींचते हैं।

और कोड के बारे में काम नहीं कर रहा है, जब भी माउस स्थानांतरित हो जाता है तो सेल संपादन को पुनरारंभ करना समस्याएं पेश कर सकता है क्योंकि आप प्रत्येक माउस चाल पर सेल संपादक और रेंडरर के बीच स्विच करते हैं। मैं किसी भी मूल्य को संपादित नहीं कर सका, भले ही आप JTextArea (जो JTextField होना चाहिए) का उपयोग करें। प्रत्येक बार जब आप पंक्तियों का क्रम बदलते हैं तो तालिका मॉडल को पुन: प्रयास करना ठीक है, लेकिन यह एक वर्ग बनाना है जो सभी कॉलम के लिए मूल्य रखता है और इन वर्गों के वेक्टर को टेबल मॉडल के रूप में उपयोग करता है। इस तरह आप वेक्टर और टेबल मॉडल में मूल्यों को पुन: क्रमबद्ध कर सकते हैं।

यदि आप दो शीर्षलेखों को मर्ज करना चाहते हैं, तो getHeaderRect(int col)JTableHeader पर दो कॉलम के लिए super.getHeaderRect() के संघ को वापस करने के लिए ओवरराइड करें। आपको पिछले दो शीर्ष पर विस्तृत शीर्षलेख पेंट करने के लिए BasicTableHeaderUI की पेंट() विधि को ओवरराइड करने की भी आवश्यकता हो सकती है।

यह वह दृष्टिकोण है जिसका उपयोग मैं तालिका कक्षों को मर्ज करने के लिए करता था, लेकिन इसे हेडर के लिए भी काम करना चाहिए।

क्षमा करें, मैं आपको सही कोड नहीं दे सकता। निजी तौर पर, मैं कस्टम सेल रेंडरर लिखने के साथ करता हूं, यानी आपका पहला दृष्टिकोण।

final TableCellRenderer defaultRenderer = getTableHeader().getDefaultRenderer(); 
    getTableHeader().setDefaultRenderer(new DefaultTableCellRenderer() { 
     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
      JLabel c = (JLabel) defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
      if (column == 1) 
       c.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.gray)); 
      else if (column == 2) { 
       c.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 1, Color.gray)); 
       c.setText(null); 
      } else 
       c.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.gray)); 
      return c; 
     } 
    }); 
+0

प्रयास tulskiy के लिए धन्यवाद ... मैंने अपनी समस्याओं का कोड नमूना सेट करने के लिए अपना प्रश्न संपादित किया है। – Brad

+0

धन्यवाद आपकी मदद के लिए tulskiy ... क्या आप मुझे एक उदाहरण दे सकते हैं कि getHeaderRect (...) को 2 कॉलम वापस करने के लिए ओवरराइड कैसे करें? – Brad

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