Je dois afficher une donnée de cellule (20.2,true)
dans Jtable dans laquelle 20.2 est flottant et vrai est une valeur booléenne au format (20.2,[JCheckBox])
. Est-il possible de rendre 2 objets différents dans un tel manière?Rendu de plusieurs objets dans la même cellule JTable
0
A
Répondre
2
Oui, c'est le cas. Mais je pense que vous aurez besoin d'un composé-Renderer, ce qui signifie que vous devez créer votre propre CellRenderer implémentant TableCellRenderer ou d'étendre le DefaultTableCellRenderer existant. Au moins tant que vous voulez simplement afficher ces valeurs dans votre tableau, cela devrait fonctionner correctement pour vous.
Votre Composé sera composé d'une étiquette pour afficher votre flottant et une case à cocher pour afficher votre booléen.
EDIT: Ok , voici un petit exemple:
/**
* Example for CompoundRenderer
*
* @author ymene
*/
public class CompoundRendererExample extends JPanel
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Example for rendering JTable - values with CompoundRenderer");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(new CompundRendererExample());
frame.pack();
frame.setVisible(true);
}
public CompoundRendererExample()
{
JScrollPane scrollPane = new JScrollPane();
JXTable table;
table = new JXTable(new TableModel());
table.setFillsViewportHeight(true);
for (int i = 0; i < table.getModel().getColumnCount(); i++)
table.getColumn(i).setPreferredWidth(200);
scrollPane.setViewportView(table);
add(scrollPane);
//Declaring compound-renderer
table.setDefaultRenderer(FloatBool.class, new FloatBoolRenderer());
}
}
class TableModel extends AbstractTableModel
{
private String[] columnNames = { "Float-Boolean" };
private Object[][] data = { { new FloatBool(2.2f, true) }, { new FloatBool(3.2f, false) } };
public int getColumnCount()
{
return columnNames.length;
}
public int getRowCount()
{
return data.length;
}
@Override
public String getColumnName(int col)
{
return columnNames[ col ];
}
public Object getValueAt(int row, int col)
{
return data[ row ][ col ];
}
@Override
public Class getColumnClass(int c)
{
if (getValueAt(0, c) == null)
return Object.class;
return getValueAt(0, c).getClass();
}
@Override
public boolean isCellEditable(int row, int col)
{
return true;
}
@Override
public void setValueAt(Object value, int row, int col)
{
data[ row ][ col ] = value;
fireTableCellUpdated(row, col);
}
}
class FloatBoolRenderer extends DefaultTableCellRenderer
{
JLabel floatPartLabel;
JCheckBox booleanPartCheckBox;
JPanel container;
public FloatBoolRenderer()
{
floatPartLabel = new JLabel();
booleanPartCheckBox = new JCheckBox();
container = new JPanel();
container.setLayout(new BorderLayout());
container.add(floatPartLabel, BorderLayout.CENTER);
container.add(booleanPartCheckBox, BorderLayout.EAST);
container.setVisible(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
if (value != null)
{
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (value instanceof FloatBool)
{
FloatBool floatboolean = (FloatBool) value;
booleanPartCheckBox.setSelected(floatboolean.getBooleanValue());
floatPartLabel.setText("" + floatboolean.getFloatValue());
}
}
return container;
}
}
class FloatBool
{
float floatValue;
boolean booleanValue;
public FloatBool(float floatValue, boolean booleanValue)
{
this.floatValue = floatValue;
this.booleanValue = booleanValue;
}
public boolean getBooleanValue()
{
return booleanValue;
}
public float getFloatValue()
{
return floatValue;
}
}
Pas encore parfait, mais devrait vous donner des idées comment concevoir votre propre moteur de rendu.
Questions connexes
- 1. cellule d'édition dans JTable
- 2. Sélectionnez la cellule suivante JTable
- 3. JPanel dans une cellule d'un JTable
- 4. JAVA: Mettre l'image dans la cellule jTable
- 5. Changement de couleur de cellule JTable
- 6. Flottant de jRuby à représenter dans la cellule de JTable
- 7. JTable - Retourne du texte dans plusieurs cellules
- 8. DataGridViewCell Inheritance - rendu de cellule
- 9. Rendre une cellule dans un JTable modifiable - la valeur par défaut de la cellule
- 10. Rendu de cellule d'arborescence JCheckBox
- 11. Tri de plusieurs colonnes dans JTable
- 12. Plusieurs objets de la même classe en Python
- 13. Même fonction pour plusieurs objets jQuery
- 14. ActionListener sur une cellule JLabel ou JTable
- 15. NSArray: ajouter plusieurs objets avec la même valeur
- 16. JTable .. couleur de la ligne sélectionnée
- 17. JCheckBox ajouté dans une cellule JTable n'est pas visible
- 18. Définition du curseur de la souris pour une cellule JTable particulière
- 19. Prévenir la sélection de la cellule suivante dans JTable en utilisant AutoComplete
- 20. Sélection de plusieurs lignes de JTable
- 21. Le texte du bouton dans le moteur de rendu JTable n'est pas visible. Pourquoi?
- 22. Libérer plusieurs objets dans delphi
- 23. JTable inductance sur le moteur de rendu personnalisé
- 24. obtenir la valeur de jtable
- 25. garder la sélection JTable dans viewport
- 26. Rendu de plusieurs partiels dans un contrôleur
- 27. Rendu de plusieurs couches dans XNA
- 28. Ajouter des boutons à l'intérieur de la cellule de JTable avec des données?
- 29. JTable Valeurs "sauter" dans une autre cellule après avoir appuyé sur Entrée
- 30. Comment supprimer JTable cell bgColor en survolant une autre cellule?
veuillez être précis: il n'y a ni DefaultCellRenderer ni AbstractDefaultCellRenderer ;-) – kleopatra
hehe, bien sûr vous avez raison! Juste envie de corriger certaines de mes anciennes entrées. Mais n'a pas remarqué celui-là. J'espère que vous l'aimez encore plus maintenant! : P – crusam