Ich habe eine Weile damit herumgetüftelt, und alle Lösungen und Arbeitsbeispiele, die ich finden konnte, enthalten Kontrollkästchen, die mit den eingebauten booleschen TableCellRenderers gerendert wurden habe nur ein Kontrollkästchen. Ich habe kein funktionierendes Beispiel gefunden, bei dem neben der Checkbox in dieser SAME-Zelle Text vorhanden wäre, genauer gesagt eine JCheckBox, die ein Kontrollkästchen und einen Text zulässt.Einfügen von Text neben einer Checkbox in einer Jtable-Zelle
-1
A
Antwort
1
Wenn Sie Ihre Daten/Anforderungen nicht innerhalb der Standard verfügbaren Funktionen passen Sie eine maßgeschneiderte Lösung
auf die Bereitstellung aussehen müssen würde ich empfehlen Sie bei Using custom renderers
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class Test {
public static void main(String[] args) {
new Test();
}
public class Data {
private String text;
private boolean selected;
public Data(String text, boolean selected) {
this.text = text;
this.selected = selected;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean state) {
this.selected = state;
}
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new BorderLayout());
DefaultTableModel model = new DefaultTableModel(new String[] {"Something"}, 0) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Data.class;
}
};
model.addRow(new Object[]{new Data("Hello", true)});
model.addRow(new Object[]{new Data("Goodbye", false)});
model.addRow(new Object[]{new Data("Do you want to play a game?", true)});
model.addRow(new Object[]{new Data("Yesturday", false)});
model.addRow(new Object[]{new Data("Tomorrow", true)});
model.addRow(new Object[]{new Data("Java", false)});
model.addRow(new Object[]{new Data("Swift", false)});
model.addRow(new Object[]{new Data("Helicopter", true)});
JTable table = new JTable(model);
table.setDefaultRenderer(Data.class, new DataTableCellRenderer());
add(new JScrollPane(table));
}
}
public class DataTableCellRenderer extends JCheckBox implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setBackground(table.getSelectionBackground());
setForeground(table.getSelectionForeground());
} else {
setBackground(table.getBackground());
setForeground(table.getForeground());
}
if (value instanceof Data) {
Data data = (Data)value;
setText(data.getText());
setSelected(data.isSelected());
}
return this;
}
}
}
einen Blick zu beginnen, indem
An dieser Stelle ich frage mich, links, wenn JTable
die beste Lösung und wenn JList
ist vielleicht
natürlich eine andere Option besser sein, die mit JTable
besser funktionieren könnte, würde ein benutzerdefiniertes TableModel
zu entwickeln, die die Daten in separaten Spalten brechen könnte ...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public class Data {
private String text;
private boolean selected;
public Data(String text, boolean selected) {
this.text = text;
this.selected = selected;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean state) {
this.selected = state;
}
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new BorderLayout());
DataTableModel model = new DataTableModel();
model.add(new Data("Hello", true));
model.add(new Data("Goodbye", false));
model.add(new Data("Do you want to play a game?", true));
model.add(new Data("Yesturday", false));
model.add(new Data("Tomorrow", true));
model.add(new Data("Java", false));
model.add(new Data("Swift", false));
model.add(new Data("Helicopter", true));
JTable table = new JTable(model);
add(new JScrollPane(table));
}
}
public class DataTableModel extends AbstractTableModel {
private List<Data> rows = new ArrayList<>(25);
public void add(Data data) {
int rowCount = getRowCount();
rows.add(data);
fireTableRowsInserted(rowCount, rowCount);
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0: return "";
case 1: return "Option";
}
return null;
}
@Override
public int getRowCount() {
return rows.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0: return Boolean.class;
case 1: return String.class;
}
return Object.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Data row = rows.get(rowIndex);
switch (columnIndex) {
case 0: return row.isSelected();
case 1: return row.getText();
}
return null;
}
}
}
IMHO, ist dies eine bessere Lösung für JTable
Verwandte Themen
- 1. Float ein div neben einer Checkbox
- 2. Anzeige von Text neben einer Dropdown-Box
- 3. Text neben dem Kontrollkästchen in einer neuen Zeile anzeigen
- 4. Einfügen von Text in einer Datei aus einer Variablen
- 5. Hotkey/Shortcut-Text neben Extrastrip-Menüelemente in Winforms einfügen
- 6. Zelle neben einer Zelle einfügen, die einen bestimmten Wert enthält
- 7. Löschen von Checkbox-Elementen in einer Aufgabenliste
- 8. Einfügen mehrerer Daten mithilfe einer Checkbox in Datagridview
- 9. Text ohne Wrap neben Symbol
- 10. Google Script: Einfügen von Text in einer bestimmten Position
- 11. Bild neben einer Abteilung
- 12. Abschluss einfügen neben alten
- 13. Wie kann ich Checkbox-Text in einer Combobox anpassen?
- 14. Wie können Sie den Text in einer Checkbox-Zelle bearbeiten?
- 15. Wie schreibe ich Text direkt neben einer Texteingabe?
- 16. Wie richtet man diesen Text neben einer Schaltfläche aus?
- 17. Text neben dem Logo verschieben; loswerden einer harten Regel
- 18. Hinzufügen von Bildern neben Text in html
- 19. Senden einer URL neben Text mit WhatsApp URL Schema
- 20. Lassen Sie den Text neben einer Seitenwand stehen
- 21. Threading einer Aufgabe neben einer GUI PyQT4
- 22. Klassenname neben einer Variablen in PHP
- 23. Text neben Bild auf der rechten Seite einfügen
- 24. Platzieren einer Kopfleiste neben einer Seitenleiste
- 25. Wert von Checkbox in Mysql einfügen
- 26. MongoDB Einfügen von Daten neben passendem Schlüsselwertpaar
- 27. Einfügen von Text aus einer Datei in bestimmte Zeilennummern in einer anderen Textdatei
- 28. Ermitteln von Koordinaten beim Aktivieren einer Checkbox
- 29. Retangle neben Text in CSS
- 30. Deaktivieren von Elementen einer Checkbox-Gruppe
Mit Verwendung von noch etwas anderes versuchen, Ich schlage vor, Sie beginnen mit [Verwenden von benutzerdefinierten Renderern] (https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer) – MadProgrammer
Ich wäre auch daran interessiert zu wissen, warum Sie müssen Text, der mit einem Ankreuzfeld in einer Tabellenzelle verknüpft ist, da die Spaltenüberschrift (in den meisten Fällen) eine Beschreibung auf dem i ntent ... nur sagen – MadProgrammer
Darüber hinaus könnten Sie eine andere Spalte verwenden, um den Text darzustellen – MadProgrammer