EDIT MAINTENANT AVEC MCVE:Définition JComboBox comme colonne de table ne fonctionne pas
Je veux voir une cellule JTable comme JComboBox. Je l'ai essayé avec Oracle Tutorial et ça ne marche pas. Le tutoriel ne dit rien sur la façon dont vous devez changer votre modèle de table pour le faire fonctionner. Alors, voici le code:
TableModel:
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
public class TableModel extends AbstractTableModel {
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 2;
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return 2;
}
@Override
public Object getValueAt(int row, int col) {
if (row == 0) {
return 2;
} else if (col == 1) {
return 1;
} else {
return null;
}
}
}
Et la vue de montrer les composants:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.table.TableColumn;
public class View extends JFrame {
public View() {
super();
TableModel tableModel = new TableModel();
JTable testTable = new JTable(tableModel);
JScrollPane scrollpane = new JScrollPane(testTable);
// scrollpane.setOpaque(false);
// scrollpane.getViewport().setOpaque(false);
JPanel testTablePanel = new JPanel();
testTablePanel.setBorder(
BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Testkonfiguration"));
testTablePanel.setLayout(new BorderLayout());
testTablePanel.add(scrollpane);
TableColumn sportColumn = testTable.getColumnModel().getColumn(1);
JComboBox comboBox = new JComboBox();
comboBox.addItem("Snowboarding");
comboBox.addItem("Rowing");
comboBox.addItem("Chasing toddlers");
comboBox.addItem("Speed reading");
comboBox.addItem("Teaching high school");
comboBox.addItem("None");
sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
add(scrollpane);
pack();
setVisible(true);
}
public static void main(String[] args) {
new View();
}
}
Que dois-je changer dans le TableModel pour le faire fonctionner?
Ce qui aiderait plus si vous pouvez créer et publier un valide [mcve] - un petit *** *** compilable et le programme runnable, assez petit pour poster ici complètement, qui démontre le problème pour nous. S'il vous plaît envisager de le faire. –
@HovercraftFullOfEels J'en ai écrit un maintenant, merci – Phreneticus
@Phreneticus vous avez simplement besoin de mettre en œuvre votre modèle correct. Tout d'abord pour la colonne 1, il devrait retourner une des valeurs, que vous avez ajouté à la liste déroulante. Deuxièmement: vous devez implémenter la méthode 'setValueAt (objet aValue, int rowIndex, int columnIndex)' pour stocker les valeurs que vous sélectionnez dans la zone de liste déroulante. Et aussi vous devez implémenter 'isCellEditable (int rowIndex, int columnIndex)' qui retourne vrai pour la colonne avec l'index 1. –