Я создаю пользовательский интерфейс в Swing, в котором мое требование состоит в том, чтобы иметь JPanes в JTable. Эти JPanes будут иметь JButtons внутри них.
Мой вариант использования выглядит следующим образом -
Я пишу MethodEditor, в котором я предоставляю пользовательский интерфейс для хранения методов в предоставленном файле. Пользовательский интерфейс также позволяет редактировать параметры, передаваемые методу, одним нажатием кнопки.
Каждый метод будет иметь представление UI следующим образом:
Мое базовое представление класса Method выглядит следующим образом -
public Class Method {
String methodName;
List<String> InputVariableNames;
String OutputVariableName;
}
Теперь у меня есть список Method
объектов, List<Method> methodList
, на которых я хочу основать свой JTable.
Этот List
содержится в классе MethodModel
следующим образом -
public class MethodModel {
List<Method> methodModel;
}
Я задал вопрос ранее и основал свой код на ответе, предоставленном там.
Однако мой код не работает. Мой код выглядит следующим образом -
public class MethodEditor extends JTable {
private static final long serialVersionUID = 1L;
private MethodEditorModel model ;
private MethodCellRenderer cellRenderer;
public MethodEditor(MethodModel bean) {
setRowHeight(25);
this.setPreferredSize(new Dimension(500, 500));
model = new MethodEditorModel(bean);
this.setModel(model);
setupComponent();
}
private void setupComponent() {
cellRenderer = new MethodCellRenderer();
this.setDefaultRenderer(Object.class,cellRenderer);
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
}
private static class MethodEditorModel extends DefaultTableModel implements PropertyChangeListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private MethodModel bean;
public MethodEditorModel(MethodModel bean) {
this.bean = bean;
bean.addPropertyChangeListener(this);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
fireTableDataChanged();
}
}
private static class MethodCellRenderer implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
private MethodEditorCellPanel renderer = new MethodEditorCellPanel();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
MethodModel methodModel = (MethodModel)value;
for(Method method : methodModel.getMethodList()) {
renderer.setComponents((Method) method);
}
return renderer;
}
}
private static class MethodEditorCellPanel extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton upButton;
private JButton downButton;
private JButton methodDetailsButton;
private Method method;
public MethodEditorCellPanel() {
upButton = new JButton("Up");
downButton = new JButton("Down");
}
public void setComponents(Method method)
{
this.method = method;
methodDetailsButton = new JButton(method.getMethodName());
upButton.addActionListener(this);
downButton.addActionListener(this);
methodDetailsButton.addActionListener(this);
Box verticalBar = Box.createHorizontalBox();
verticalBar.add(upButton);
verticalBar.add(Box.createHorizontalStrut(15));
verticalBar.add(methodDetailsButton);
verticalBar.add(Box.createHorizontalStrut(15));
verticalBar.add(downButton);
add(verticalBar);
}
@Override
public void actionPerformed(ActionEvent evt) {
if(evt.getSource().equals(downButton)) {
}
if(evt.getSource().equals(upButton)) {
}
if(evt.getSource().equals(methodDetailsButton)) {
}
}
}
}
Код компилируется, но JTable не отображается.
Любые указания на то, что я могу делать неправильно, очень помогли бы.