2012-02-03 5 views
5

में एक JComboBox के साथ समस्या मैं एक कॉम्बो बॉक्स होने के लिए एक JXTable में कॉलम बनाने की कोशिश कर रहा हूं। जिस समस्या का सामना कर रहा हूं उसे समझाना मुश्किल है। जब आप ड्रॉप डाउन पर क्लिक करते हैं, तो कभी-कभी ड्रॉप डाउन आपके लिए मूल्य चुनने के लिए पर्याप्त समय तक खुला नहीं रहता है। यह सिर्फ बंद हो जाता है और कुछ मूल्य चुना जाता है। कभी-कभी यह आपके लिए मूल्य चुनने के लिए खुला रहता है। यहाँ SSCCE है:एक JXTombo

import java.awt.Color; 

import javax.swing.ComboBoxModel; 
import javax.swing.DefaultCellEditor; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 
import javax.swing.table.DefaultTableModel; 

import org.jdesktop.swingx.JXFrame; 
import org.jdesktop.swingx.JXTable; 
import org.jdesktop.swingx.renderer.CellContext; 
import org.jdesktop.swingx.renderer.ComponentProvider; 
import org.jdesktop.swingx.renderer.DefaultTableRenderer; 

public class Test { 

    public static void main(String[] args) { 
     JXFrame frame=new JXFrame(); 
     Object[][] rows = new Object[10][]; 

     for (int i = 0; i < rows.length; i++) { 
     rows[i] = new Object[]{ 
     "Test data ","Yes"}; 
     } 

     DefaultTableModel model = new DefaultTableModel(rows, 
     new String[]{ 
     "Title 1", "Title 2" 
     }); 

     final JXTable table = new JXTable(model); 
     DefaultComboBoxModel cmodel = new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"}); 
     table.getColumnExt(1).setCellRenderer(new DefaultTableRenderer(new ComboBoxProvider(cmodel))); 
     table.getColumnExt(1).setCellEditor(new ComboBoxEditor(cmodel)); 
     table.setVisibleRowCount(10); 
    frame.setContentPane(table); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); 
     frame.setVisible(true); 
    } 
} 

class ComboBoxEditor extends DefaultCellEditor { 
    public ComboBoxEditor(ComboBoxModel model) { 
     super(new JComboBox(model)); 
    } 
} 

class ComboBoxProvider extends ComponentProvider<JComboBox> { 
    private static final long serialVersionUID = 1L; 
    private JComboBox box; 
    public ComboBoxProvider(ComboBoxModel model){ 
     box.setModel(model); 
    } 
    @Override 
    protected void configureState(CellContext context) { 
     box.setForeground(Color.black); 
    } 
    @Override 
    protected JComboBox createRendererComponent() { 
     box = new JComboBox(); 
     box.setForeground(Color.black); 
     return box; 
    } 
    @Override 
    protected void format(CellContext context) { 
     box.setForeground(Color.black); 
     rendererComponent.setSelectedItem(context.getValue()); 
    } 
} 
+0

क्या आप समस्या को 'जेटीबल' के साथ दोहरा सकते हैं? –

+3

@AndrewThompson हाँ, एक ही मुद्दा। कोई समाधान नहीं, केवल एक (असंबंधित) सावधान रहें: कॉम्बोबॉक्स मॉडेल के समान प्रतिपादन और संपादक दोनों में एक ही उदाहरण का उपयोग न करें - संपादक स्थायी रूप से मॉडल को सुन रहा है जो अजीब प्रभाव पैदा कर सकता है, शायद डेटा को दूषित कर सकता है – kleopatra

+0

हम्म ... स्विंग में सबसे पुरानी बग्स में से एक के रूप में दिखता है (आईडी नहीं है, कुख्यात आलसी बग परेड में खोज करने के लिए बहुत आलसी है) जिसे मैंने सोचा था: कोर जेटीबल, कोर डिफ़ॉल्ट के साथ होता है (लेबल) रेंडरर और कोर डिफॉल्ट कॉम्बोएडिटर - पहले सेल में क्लिक करें, पॉपअप कभी-कभी दिखाया जाता है और कभी-कभी नहीं दिखाया जाता है (हालांकि तालिका हमेशा संपादन राज्य, afaics में) – kleopatra

उत्तर

1

इस मुद्दों सुनिश्चित करें कि आप संपादक और रेंडरर के लिए DefaultComboxBoxModel का एक ही उदाहरण का हिस्सा न कर हल करने के लिए .. तो बजाय इस की:

DefaultComboBoxModel cmodel = new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"}); 
    table.getColumnExt(1).setCellRenderer(new DefaultTableRenderer(new ComboBoxProvider(cmodel))); 
    table.getColumnExt(1).setCellEditor(new ComboBoxEditor(cmodel)); 

यह करें:

table.getColumnExt(1).setCellRenderer(new DefaultTableRenderer(new ComboBoxProvider(
      new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"})))); 
    table.getColumnExt(1).setCellEditor(new ComboBoxEditor(
      new DefaultComboBoxModel(new String[] {"Yes","No","Maybe"}))); 
+0

[बेहतर यहां देखेंगे] (http://stackoverflow.com/a/9709633/714968) – mKorbel

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