SCCEE здесь:Установка TableCellRenderer добавляет пустое значение на вершине списка значения `JComboBox`
import java.awt.EventQueue;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
public class TC extends JFrame{
public TC(){
begin();
}
private void begin(){
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("nothing.");
String[] options = {"One", "Two", "Three"};
JComboBox<String> combo = new JComboBox<>(options);
JTable table = new JTable(new Object[2][2], new String[]{"One", "Two"});
TableColumn col0 = table.getColumnModel().getColumn(0);
col0.setCellEditor(new DefaultCellEditor(combo));
class MyRender extends DefaultTableCellRenderer {
public MyRender() {
}
@Override
public void setValue(Object value) {
if (value instanceof JComboBox) {
setText(((JComboBox) value).getSelectedItem().toString());
}
}
}
MyRender renderer = new MyRender();
col0.setCellRenderer(renderer);
JScrollPane sp = new JScrollPane(table);
getContentPane().add(sp);
pack();
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
@Override
public void run() {
TC tc = new TC();
}
});
}
}
Моей проблема: установка TableCellRenderer делает комбо выбрать пустой вариант поверх всех других ценностей, никто не рассказывало это сделать. Пустая запись происходит из ниоткуда.
Как я могу сделать комбо, выберите «Один» в первый момент вместо «»? Что-то я пропустил при реализации пользовательского рендеринга ?? Я последовал здесь:
Oracle tutorial of How to Use Tables - Swing - Java SE
Кроме того, комбо не отображается, пока не выберите его. Я не думаю, что это правильный способ показать это. Я пытался следовать другой пример здесь:
Show a JComboBox with custom editor and renderer, example from java2s.com
, но я по-прежнему путают.
Спасибо, а другой ответ очень хороший. Но я не понимаю, что сама ссылка, которую вы мне дали, это то, что я последовал при выполнении SCCEE, делая это: 'col0.setCellEditor (новый DefaultCellEditor (combo));', но в вашей ссылке combobox показывает первый вариант, но в моей, просто пустой поначалу. После нажатия «Один», это правильно. Итак, почему поведение по умолчанию не работает? – FaithReaper
Что касается вашего ответа на другой вопрос, я видел более элегантный способ сделать это (показывая редактор combobox, как и должно быть, со стрелкой и всеми) во второй ссылке моего ответа. Итак, что меня смутило, заключается в том, что реализации пользовательского рендерера/редактора кажутся произвольными, вы можете делать все, что захотите, и есть только очень ограниченное руководство для нас, чтобы понять основную часть, и мы просто выбираем коды других здесь и там... – FaithReaper