JTable

2016-01-11 27 views
5

में केवल विशिष्ट कोशिकाओं को रंग दें I इस समस्या के लिए समाधान ढूंढ रहे हैं: मेरे पास एक एक्सेल फ़ाइल है, जिसमें डेटा है। कुछ कोशिकाओं में पीले रंग की पृष्ठभूमि होती है। मैंने पहले ही जेटीबल को टेक्स्ट आयात करने के लिए एक कोड बनाया है, जो ठीक काम करता है। लेकिन मैं विशिष्ट कोशिकाओं के लिए पृष्ठभूमि-सेल-रंग भी आयात करना चाहता हूं। सादगी के लिए - इस उदाहरण के लिए, मैंने लूप का उपयोग नहीं किया, स्रोत से एक्सेल डेटा पढ़ना आदि। मंच पढ़ने के बाद मुझे समझ में आया कि मुझे कस्टमसेलरेंडर की आवश्यकता है।JTable

मुझे इस दृष्टिकोण में कोई समस्या है, क्योंकि यह कोड कॉलम में कोशिकाओं को पहले से रंगता है, लेकिन जब मैं इस तालिका में रंगीन कोशिकाओं पर स्क्रॉल करना शुरू करता हूं, तो यह पूरे कॉलम को पीले रंग में याद करता है। (स्क्रीनशॉट देखें)

मैंने सोचा कि मैं विशेष रूप से शेष कोशिकाओं को सफेद रंग में रंग देने के लिए अन्य कथन जोड़ सकता हूं, लेकिन यह दृष्टिकोण मेरे लिए काम नहीं करेगा, क्योंकि मैं अपने पिछले सेल परिणामों को ओवरराइट कर रहा हूं।

क्या आप मुझे इस पर समाधान के लिए इंगित कर सकते हैं? (क्या यह एक बग है, या जेटीबल के अपेक्षित व्यवहार है?)। मैं NetBeans और जीयूआई खींचें n ड्रॉप जनरेटर का उपयोग कर रहा है, ताकि जब अपने सेल पीले नहीं होना चाहिए

enter image description here

import java.awt.Color; 
import java.awt.Component; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableCellRenderer; 

public class MyRenderer extends DefaultTableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     int[][] coordinatesYellow = new int[3][2]; 
     //[row][column] these cells are yellow 
     coordinatesYellow[0][0] = 3; 
     coordinatesYellow[0][1] = 2; 
     coordinatesYellow[1][0] = 4; 
     coordinatesYellow[1][1] = 2; 
     coordinatesYellow[2][0] = 2; 
     coordinatesYellow[2][1] = 2; 

     for (int i = 0; i < 3; i++) { 
      if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) { 
       c.setBackground(Color.yellow); 
      } 
     } 
     return c; 
    } 
} 



// And this is the statement I use for calling the renderer: 
// resultsTable.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer()); 
+0

@TT - अपनी टिप्पणी अनिवार्य रूप से एक पूरा जवाब है। – tucuxi

+0

@tucuxi सच है, यह एक टिप्पणी के रूप में पोस्ट किया गया इतना छोटा लगता है। मैंने इसे जवाब दिया है। –

+0

यह भी देखें कि http://stackoverflow.com/questions/22606227/colored-table-cells (यहां तक ​​कि एक डुप्लिकेट भी हो सकता है ...) – Marco13

उत्तर

2

यह है, आप सफेद करने के लिए पृष्ठभूमि सेट (या मेज की पृष्ठभूमि का रंग) है कि ।

एक रेंडरर कि DefaultTableCellRenderer फैली सभी कोशिकाओं के लिए एक टेम्पलेट के रूप में ही घटक (एक JLabel) का उपयोग करता है (सीएफ DefaultTableCellRenderer कार्यान्वयन नोट - वे इसे रबर मुद्रांकन कहते हैं)। एक बार जब आप अपनी पृष्ठभूमि को पीले रंग में सेट कर लेते हैं, तब तक यह लगातार कोशिकाओं को प्रतिपादित करने के लिए पीले रंग के बने रहेगा जब तक कि आप फिर से पृष्ठभूमि रंग बदल नहीं लेते।

निम्नलिखित की तरह कुछ के साथ पाश के लिए अपने को बदलें:

boolean isYellow = false; 
for (int i = 0; i < 3; i++) { 
      if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) { 
       c.setBackground(Color.yellow); 
       isYellow = true; 
      } 
     } 
if(!isYellow) 
    c.setBackground(Color.white); 
+0

यह इरादे के अनुसार काम नहीं करता है। यदि मैं लूप में अन्य कथन जोड़ता हूं, तो परिणाम केवल नमूना टेक्स्ट सेल पीले रंग में होता है, क्योंकि लूप के परिणाम परिणामों को ओवरराइट करते हैं। – radox1912

+1

@ radox1912 ** ** ** सभी ** मामलों में जहां आप रंग को पीले रंग में सेट नहीं करते हैं ... इसका मतलब है कि यदि आपने पीले रंग के रंग को कुछ भी सेट नहीं किया है, तो आपको इसे सफेद पर सेट करना चाहिए। –

+0

@ radox1912 मैंने एक कोड सेगमेंट जोड़ा है जो मेरे कथन को दर्शाता है। –