我知道以前已经回答过,但是考虑到我仍然是一个新手,我想不出一种方法来执行操作并阻止单元格编辑,我已经尝试了几种方法,可以成功渲染按钮,但是当我单击它时,它编辑单元格而不是按下按钮,我知道为了避免单元格编辑,我应该创建一个抽象表并覆盖此方法:
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);
我的问题很简单,如何禁用行编辑(就像使用isCellEditable()方法一样)并对按钮进行操作?非常感谢这里的任何帮助,请仍是新手考虑,因此需要详细的信息或样品!亲切的问候,罗慕洛罗梅罗
您需要 既 渲染器 和 和编辑。请参阅如何使用表:编辑器和渲染器_
的详细信息。切线地,您应该isCellEditable()
在自己的方法中覆盖该方法,TableModel
而不是extended
JTable
。
问题内容: 我有一个基于Swing的应用程序,其中包含一个。现在,我想使用唯一的行ID来更新或删除每一行。因此,我想向每行添加一个更新和删除按钮,它们具有支持ActionListener的功能。但是,我不知道如何使用NetBeans执行此操作。 问题答案: 要在列中显示按钮,您需要创建: 一个自定义渲染器以显示JButton 定制编辑器以响应鼠标单击 阅读Swing教程中有关如何使用表的部分。关于
问题内容: 我搜索了在jtable中添加按钮的教程,并从http://tips4java.wordpress.com/2009/07/12/table-button- column/ 找到了一个类文件, 该按钮在哪里设置? 问题答案: 它是通过DefaultTableModel中的数据在表渲染器和编辑器中自动设置的。例如,对于表编辑器,代码为: 表模型的值在哪里。有关详细信息,请参见ButtonC
我根据Android文档创建了以下DialogFragment: 公共类PayBillDialogFraank扩展DialogFraank{ 从另一个片段(列表片段)中,当单击列表中的一行时,应该打开DialogFraank,并且在按下DialogFraank的正按钮后,我希望能够删除ListFraank的选定行,并调用一个方法来执行与删除相关联的远程操作。我实现了ListFraank如下: 我不
问题内容: 您知道如何将新行添加到吗? 问题答案: 的后面处理表后面的所有数据。为了在表格中添加和删除行,您需要使用 要使用此模型创建表: 要添加一行: 您也可以使用此方法删除行。
我正在设计一个客户机交互应用程序,其中的需求如下:- null 在单元格焦点上按下ENTER键=只编辑单元格。 单元格焦点外+按下ENTER键=添加新行。 如果单元格焦点不在,请建议添加行。并编辑单元格焦点是否存在。
问题内容: 我已经寻找了很长时间,并且我对此也找不到任何问题,我想这可能是不可能的,尽管由于该功能很有用,这似乎很奇怪。 我想在这样的情况下,假设有3行,而不是在行号1的末尾添加另一行,那有可能吗? 请不要提及基于某些ID的行排列,因为这是我在这种情况下要做的最后一件事。 问题答案: 使用<-请参阅文档更多构造函数 然后,您可以使用以下方法之一 -在模型中的每一行插入一行。除非指定rowData,