я написал эту простую программу:JTable, JComboBox - проблемы показывая JComboBox во втором столбце
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class JcomboboxJtableDemo extends JPanel
implements ActionListener {
private DefaultTableModel tableModel;
JTable table = new JTable (tableModel);
private JScrollPane scrollpaneTable = new JScrollPane(table);
private JPanel PaneBottoniTabella = new JPanel();
public JcomboboxJtableDemo() {
super(new BorderLayout());
String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
JComboBox comboBox = new JComboBox(petStrings);
comboBox.setSelectedIndex(4);
tableModel = CreateTableModel();
tableModel.insertRow(0, new Object[] {"Header col1", ""});
tableModel.insertRow(0, new Object[] {petStrings[0], ""});
tableModel.insertRow(0, new Object[] {petStrings[1], ""});
tableModel.insertRow(0, new Object[] {petStrings[2], ""});
tableModel.insertRow(0, new Object[] {petStrings[3], ""});
tableModel.setValueAt("Header col2", 0, 1);
DefaultCellEditor editor = new DefaultCellEditor(comboBox);
table.getColumnModel().getColumn(0).setCellEditor(editor);
table.getColumnModel().getColumn(1).setCellEditor(editor);
//Lay out the demo.
add(comboBox, BorderLayout.PAGE_START);
add(table, BorderLayout.PAGE_END);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
}
private final DefaultTableModel CreateTableModel() {
DefaultTableModel modello = new DefaultTableModel(new Object[] { "Col1","Col2" }, 0) {
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
};
table.setModel(modello);
return modello;
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("ComboBoxDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new JcomboboxJtableDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Я вы пытаетесь запустить его, вы увидите, что есть проблема в показе правильно JComboBox
компонентов в второй столбец, в первом столбце правильно отображаются, и вы можете видеть каждый выбранный элемент, как указано в коде, а во втором столбце есть некоторые проблемы: нет в относительной ячейке.
Не могли бы вы рассказать мне, почему? Как я могу решить проблему?
Благодаря
ОК, но это не сработает, я до сих пор не вижу элементов компонента JComboBox во втором столбце. Кроме того, есть способ назначить другой компонент JComboBox для каждой ячейки. Является ли это возможным? – Frank
Используя код в вопросе, элементы отображаются как ожидалось, как в выпадающем списке, так и в таблице, поэтому нельзя реплицировать это без дополнительной информации. Переписывая другой комбинированный блок, вы можете переопределить 'getCellEditor' (но похоже, что он перебор) – Reimeus
да, извините, вы правы, это работает спасибо – Frank