में विस्तार करने में विफल रहता है मैंने इस तरह के अन्य प्रश्नों के लिए JTable/JComboBox प्रतिक्रियाओं के बहुमत के माध्यम से पढ़ा है, लेकिन अभी तक मेरी समस्या का समाधान नहीं मिला है।JComboBox JTable TableHeader
मैंने एक टेबल बनाया है जिसमें JComboBox TableHeader तत्व हैं। JComboBox तत्वों में से कोई भी आइटम की सूची प्रदर्शित करने के लिए खुल जाएगा। मैं व्यक्तिगत JComboBox तत्वों को प्रदर्शित करने के लिए आइटम सूचियां कैसे प्राप्त करूं?
कृपया ध्यान दें कि इस प्रश्न का एक विशिष्ट तत्व यह है कि JComboBox TableHeader में है, जो एक जेटीबल सेल के भीतर एम्बेडेड नहीं है।
किसी भी मदद की सराहना की जाती है।
SSCE
import java.awt.Component;
import java.awt.Dimension;
import java.util.Enumeration;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class ComboHeaderTest extends JScrollPane {
private static final Dimension DEFAULT_SIZE = new Dimension(200, 200);
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ComboHeaderTest().initComponents();
}
});
}
private ComboHeaderTest() {
final String[][] data = { {"Header 1", "Header 2", "Header 3"},
{"A", "B", "C"},
{"D", "E", "F"},
{"G", "H", "I"}};
setViewportView(getTable(data));
setPreferredSize(DEFAULT_SIZE);
}
private void initComponents() {
JFrame frame = new JFrame("ComboHeaderTest");
frame.add(this);
frame.pack();
frame.setVisible(true);
}
private JTable getTable(final String[][] data) {
final String[] items = data[0];
final ComboHeaderRenderer[] columnHeaders = new ComboHeaderRenderer[items.length];
for(int i = 0; items.length > i; ++i) {
columnHeaders[i] = new ComboHeaderRenderer(items);
}
final JTable table = new JTable(data, columnHeaders);
final Enumeration<TableColumn> tableEnum = table.getColumnModel().getColumns();
for (int columnIndex = 0; tableEnum.hasMoreElements(); ++columnIndex) {
final TableColumn column = tableEnum.nextElement();
final ComboHeaderRenderer combo = columnHeaders[columnIndex];
column.setHeaderValue(combo.getItemAt(columnIndex));
column.setHeaderRenderer(combo);
}
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(false);
table.setCellSelectionEnabled(false);
table.setFillsViewportHeight(true);
table.setSize(DEFAULT_SIZE);
table.validate();
return table;
}
private static class ComboHeaderRenderer extends JComboBox implements TableCellRenderer{
public ComboHeaderRenderer(final String[] entries) {
for (int i = 0; entries.length > i; ++i) {
addItem(entries[i]);
}
}
@Override
public Component getTableCellRendererComponent(final JTable table, final Object value,
final boolean isSelected, final boolean hasFocus, final int row, final int column) {
setSelectedItem(value);
return this;
}
}
}
पहले कहा जा बिना एक SSCCE सहित के लिए +1। – mre
असंबद्ध: ए) [setXXSize का उपयोग न करें] (http://stackoverflow.com/a/7229519/203657) बी) यदि आप इसका उपयोग करके एक ही लक्ष्य तक पहुंच सकते हैं तो एक JSomething का विस्तार न करें c) setSize या तो कोई प्रभाव नहीं है या आप कुछ मौलिक रूप से गलत कर रहे हैं (लेआउटमैनेजर का उपयोग न करके) – kleopatra
@ क्लेओपेट्रा - जैसा कि आप सुझाव देते हैं, मैं विरासत पर संरचना को प्राथमिकता देता हूं। मैं यह पता लगाने के लिए एक परीक्षण बिस्तर के रूप में उपयोग कर रहा था कि JComboBox को प्रकट होने से क्या रोक रहा था, इसलिए कोई लेआउटमैनेजर नहीं था। बस एसएससीसीई में सरल रखने की कोशिश कर रहा है। – Todd