У меня есть JTable
, где последний столбец таблицы предназначен для добавления 2 кнопок. Ниже приведен формат моего JTable
.
Ниже мой код
private class ViewLawyersDisplayData extends ComponentAdapter
{
@Override
public void componentShown(ComponentEvent e)
{
dbConnector = new DBHandler();
dbConnector.makeConnection();
ResultSet rs = dbConnector.selectAllLawyerDetails();
if(rs==null)
{
JOptionPane.showMessageDialog(null,"The table is empty");
}
else
{
try
{
while(rs.next())
{
int id = rs.getInt("lawyer_id");
String name = rs.getString("Name");
String address = rs.getString("Address");
String email = rs.getString("Email");
String phone = rs.getString("Phone");
JButton update = new JButton("Update");
JButton delete = new JButton("Delete");
JPanel btnPanel = new JPanel();
btnPanel.setLayout(new FlowLayout());
btnPanel.add(update);
btnPanel.add(delete);
Object[]row = {id,name,address,email,phone,btnPanel};
DefaultTableModel model = (DefaultTableModel) viewLawyersTable.getModel();
model.addRow(row);
}
}
catch(SQLException sqlE)
{
JOptionPane.showMessageDialog(null,sqlE.getLocalizedMessage());
}
}
}
}
Однако я не могу добавить кнопки в финальные столбцы. Вместо того, чтобы показывать кнопки, он показывает некоторый текст ошибки в столбце. Ниже приведен текст ошибки, который он мне показывает.
javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
Как я могу исправить эту проблему?
Вы не можете добавлять компоненты Swing в таблицу, потому что таблица не используется для отображения реальных компонентов.
См. Столбец столбца таблицы для одного решения, которое предоставляет рендерер/редактор для кнопки в столбце таблицы.
Вы смешиваете модель и представление. Обратите внимание, что модель - это данные для отображения. В случае id
это целочисленное значение, а в случае name
- String. У вас также есть несколько других строк в вашей модели.
Вывод, который вы видите, не является сообщением об ошибке. Это просто результат вызова toString()
на вашем JPanel
потому что вы рассматриваете его как часть модели, а не отображаемое представление.
Поскольку ваш JPanel
должен отображать компоненты пользовательского интерфейса, это представление. Вам нужно больше узнать о JTable, чтобы узнать, как настроить представление в каждом столбце.