Я знаю, что на это был дан ответ прежде, но, учитывая, что я все еще новичок, я не могу определить способ дать действия и заблокировать редактирование ячейки, я пробовал это в нескольких способы, я могу успешно отображать кнопки, но когда я нажимаю на него, он редактирует ячейку, а не нажимает кнопку. Я знаю, что, чтобы избежать редактирования ячейки, я должен создать абстрактную таблицу и использовать этот метод:Как добавить кнопки внутри ячейки jtable и дать ей действие
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 3) {
return false;
} else {
return true;
}
}
однако им, используя по умолчанию JTable а, так это код, я использую для панели и визуализации ячейки:
class PlusMinusCellRenderer extends JPanel implements TableCellRenderer {
public Component getTableCellRendererComponent(
final JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
if(column < 3)
{
JLabel campo = new JLabel(value.toString());
this.add(campo);
}
if(column > 2)
{
//this is a button
this.add(botaoteste);
materialtable.revalidate();
materialtable.repaint();
}
return this;
}
и это код, я использую для извлечения данных из SQL в JTable (я настроил код DefaultJTable)
String[] columnNames={"teste","abc","def"};
Object[][] data = new Object[1][4];
if(createConnection())
{
try {
Statement statemt = conLogin.createStatement();
ResultSet rs = statemt.executeQuery("SELECT * FROM Materiais");
//ResultSet rs = statemt.executeQuery("SELECT * FROM Materiais");
rsmtdata = rs.getMetaData();
//int columns = rsmtdata.getColumnCount();
columnNames = new String[]{rsmtdata.getColumnName(1),rsmtdata.getColumnName(2),rsmtdata.getColumnName(3),"Deletar"};
if(rs.next())
{
data[0][0] = rs.getString(1);
data[0][1] = rs.getString(2);
data[0][2] = rs.getString(3);
data[0][3] = new Boolean(false);
}
while (rs.next())
{
Object[][] temp = new Object[data.length+1][4];
for(int i=0;i < data.length;i++)
{
for(int j = 0;j < 4;j++)
{
temp[i][j] = data[i][j];
}
}
temp[data.length][0] = rs.getString(1);
temp[data.length][1] = rs.getString(2);
temp[data.length][2] = rs.getString(3);
temp[data.length][3] = new Boolean(false);
data = temp;
}
materialtable = new javax.swing.JTable(data, columnNames);
materialtable = new javax.swing.JTable(data, columnNames){
public TableCellRenderer getCellRenderer(int row, int column) {
return new PlusMinusCellRenderer();
}
};
materialtable.setRowHeight(32);
} catch (SQLException ex) {
Logger.getLogger(ProfessorForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Create the scroll pane and add the table to it.
materialtable.setBackground(new java.awt.Color(153, 255, 51));
materialtable.setSelectionBackground(new java.awt.Color(255, 255, 51));
materialtable.setSelectionForeground(new java.awt.Color(255, 102, 0));
jScrollPane3.setViewportView(materialtable);
так, чтобы сделать кнопку внутри таблицы я на основе этой теме: Adding Buttons inside cell of JTable along with data?
Мой вопрос очень прямолинейный, как я могу отключить редактирование строк (как и использование метода isCellEditable()) и дать действие кнопкам? любая помощь здесь очень ценится и, пожалуйста, примите ее к рассмотрению im все еще новичок, поэтому, пожалуйста, подробная информация или образцы необходимы! С наилучшими пожеланиями, Ромуло Romero
Для [example] (http://stackoverflow.com/a/5559747/230513) вам нужен _both_ визуализатор _and_ и редактор. – trashgod
Вам кажется, что вы переопределите метод 'getCellRenderer' вашего' JTable', так почему бы не 'isCellEditable'? – Arend
Wow dude nice reference, спасибо большое за помощь, которая действительно сделала работу, теперь у меня есть таблица с кнопками и кнопками триггерных действий: D еще раз спасибо, я очень ценю это !!! всего наилучшего, – Ogre3dUser