我正在开发一个需要在jtable上显示一些数据的项目.我发现了许多关于jtables的教程,但很少有关于如何自定义AbstractTableModel的教程,大多数部分都是现成的代码.即使在Oracle的页面中,我也发现了这个通用的jtable教程,但很少有关于AbstractTableModel的信息以及如何制作自定义模型.Oracle Jtable教程 我是编程新手,因此我将为我的skils级别提供一个教程.先谢谢你.
我想从删除选定的行JTable与AbstractTableModel使用按钮。
下面的代码适用于 DefaultTableModel:
...
MyTableModel mtb;
...
private String[]....
private Object[][]...
...
JTable table = new JTable(mtb)
JButton delete;
...
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(delete))
{
if(table.getSelectedRow()<0)
{
JOptionPane.showMessageDialog(this,"Select row");
}
else
{
mtb.removeRow(table.getSelectedRow());
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不适用于AbstractTablemodel.
我的代码有点乱,所以这里是可以使用的 oracle 页面的java 示例:
谢谢!
我已经阅读了所有的线程,看起来好像可以解决我的问题,我也在这里阅读了所有的答案,但我仍然在我的智慧结束.我不确定为什么会抛出异常,尽管我觉得这可能与之有关threading.如果确实如此,请告诉我在哪里包括,new Runnable()以及是否,invokeLater()或者invokeAndWait(),因为我已经尝试过无济于事.
请告诉我,我给你的代码导致异常+堆栈跟踪(下面).
编辑:我在调用之前syso的AnnoTable部分中包含了一些s tableChanged并且它们没有出现在控制台中,因此我认为问题必须在应用程序到达那一点之前发生,即从它调用时AAView或者当数据和表模型被实例化时......
编辑II:问题是覆盖的tableChanged方法.这显然会触发异常.我已经删除了这个tableChanged()电话(也没有什么区别).现在我遇到了另一个问题:了解底层数据(AnnoData)的更改如何自动更新表.虽然这可能是针对另一个查询(在扩展的Google搜索之后),但请随时在此主题中发布有用的评论,因为我将继续阅读它...感谢所有有用的评论和提示!
编辑III:*我已经解决了这个问题.我需要实例化另一个对象AnnoData,将其传递给一个新的实例AnnoTableModel,将此实例设置为我的表然后fireTableDataChanged().
编辑IV:好的,所以fireTableDataChanged()(编辑III中使用的)毕竟是不必要的.我仍然想要使用它而不是一直创建新对象.我想我应该问一个新问题......谢谢!
这个方法AAView应该创建一个扩展a的对象JTable,把它放到一个JScrollPane等等(后者确实有效).
private JPanel createAnnoTablePanel() {
annoTablePanel = new JPanel();
annoTable = new AnnoTable(aameth);
setAnnoTable(annoTable);
JScrollPane scrollPane = new JScrollPane(getAnnoTable());
annoTablePanel.add(scrollPane);
return annoTablePanel;
}
Run Code Online (Sandbox Code Playgroud)
这是类AnnoTable(aameth是一个包含访问数据模型的业务逻辑的实例对象,工作正常).
public class AnnoTable extends JTable …Run Code Online (Sandbox Code Playgroud) 我有一个实现TableModel接口的类.当我在我的jTable上调用setModel并将我的类设置为模型然后调用jTable.updateUI();一切都很好.但在某些情况下,我想用不同的结构更改模型.显示数据仍然可以正常工作,但我的列不会更新.有没有办法强制我的表也刷新新模型的列?
我参考了一些方法。即fireTableCellUpdated的有效方法。但实际上我还是不申请。
DETA 值更新后如何使表内容更新。
该方法我调用 GJJ 方法实现。虽然更新了但是出现了很多新的窗口。这不是我的需求。
告诉我如何在新窗口中添加按钮和监听按钮执行更新行为朋友告诉我如何做。
class MyTable extends AbstractTableModel {
Object p[][]={
{DETA_1_1,DETA_1_2, DETA_1_3, DETA_1_4, DETA_1_5},
{DETA_2_1,DETA_2_2, DETA_2_3, DETA_2_4, DETA_2_5},
{DETA_3_1,DETA_3_2, DETA_3_3, DETA_3_4, DETA_3_5},
{DETA_4_1,DETA_4_2, DETA_4_3, DETA_4_4, DETA_4_5},
{DETA_5_1,DETA_5_2, DETA_5_3, DETA_5_4, DETA_5_5},
{DETA_6_1,DETA_6_2, DETA_6_3, DETA_6_4, DETA_6_5},
{DETA_7_1,DETA_7_2, DETA_7_3, DETA_7_4, DETA_7_5},
{DETA_8_1,DETA_8_2, DETA_8_3, DETA_8_4, DETA_8_5},
{DETA_9_1,DETA_9_2,DETA_9_3,DETA_9_4,DETA_9_5},
{DETA_10_1,DETA_10_2,DETA_10_3,DETA_10_4,DETA_10_5},
{DETA_11_1,DETA_11_2,DETA_11_3,DETA_11_4,DETA_11_5},
{DETA_12_1,DETA_12_2,DETA_12_3,DETA_12_4,DETA_12_5},
{DETA_1_3_1,DETA_1_3_2,DETA_1_3_3,DETA_1_3_4,DETA_1_3_5},
{DETA_1_4_1,DETA_1_4_2, DETA_1_4_3, DETA_1_4_4, DETA_1_4_5},
{DETA_15_1,DETA_15_2,DETA_15_3,DETA_15_4,DETA_15_5},
{DETA_16_1,DETA_16_2,DETA_16_3,DETA_16_4,DETA_16_5},
{DETA_17_1,DETA_17_2,DETA_17_3,DETA_17_4,DETA_17_5},
{DETA_1_8_1,DETA_1_8_2,DETA_1_8_3,DETA_1_8_4,DETA_1_8_5},
{DETA_19_1,DETA_19_2,DETA_19_3,DETA_19_4,DETA_19_5}
};
String[] n = { "NO","CARD","NAME","NAME2","time" };
public int getColumnCount() {
return n.length;
}
public int getRowCount() {
return p.length; …Run Code Online (Sandbox Code Playgroud) 我有一个JTable,其中我希望单元格在单元格可编辑时的行为方式,但单元格无法编辑,换句话说,只读.因此,如果我双击一个单元格,我应该只能在单元格中选择文本并从该单元格中复制文本.
我"method is never used locally"在实现该removeRow方法后收到消息.我也无法使用/访问此方法.
class TableModel extends AbstractTableModel {
private String[] columnNames = {"ID", "Name"};
ArrayList<Entry> list;
public TableModel(Entry[] entries) {
// assigns entries to list
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int col)
{
return columnNames[col];
}
public int getRowCount() {
return list.size();
}
// this method gives a "never used locally" message
public void removeRow(int row)
{
list.remove(row);
fireTableRowsDeleted(row, row);
}
public Object getValueAt(int row, int col) {
Entry …Run Code Online (Sandbox Code Playgroud) 我试图在单击标题时使用setValueAt方法在我的jtablemodel中设置一个值.我目前有一个MouseAdapter正确显示正在单击哪个列但是没有调用board.setValueAt()方法.
鼠标监听器.这会正确显示我单击的列.我试过使用board.getModel().setValueAt()但是也没用.
public class HeaderListener extends MouseAdapter{
private JTable board;
public HeaderListener(JTable board){
this.board = board;
}
@Override
public void mouseClicked(MouseEvent event) {
Point point = event.getPoint();
int column = board.columnAtPoint(point);
System.out.println(column);
Data value = new Data(0,"yes");
board.setValueAt(value, 0, column);
}
}
Run Code Online (Sandbox Code Playgroud)
TableModel."输入时设置值"永远不会显示给控制台.当我尝试覆盖它时,它给了我一个错误.
public class TableModel extends AbstractTableModel{
private Data[][] data;
private String[] columnNames = {"Move Here",
"Move Here",
"Move Here",
"Move Here",
"Move Here","Move Here"};
public TableModel(){
data = new Data[6][7];
Data test = new Data(0,"yes");
data[1][1] …Run Code Online (Sandbox Code Playgroud) 我想初始化我的模型。以下是我创建 GUI 项目的主类的摘录:
public class IceIHM extends JFrame{
List<String> listInit = new ArrayList<String>() {
{ add("None"); add("None"); add("None"); add("None"); add("None");add("None"); add("None"); }};
String[] tableauObjectTitle = {"Name (OBJECT)","Extended Name","Reference", "Entity Type","Relation", "Extended Relation","PMID"};
String[] tableauSubjectTitle = {"Name (SUBJECT)","Extended Name","Reference", "Entity Type","Relation", "Extended Relation","PMID"};
List<List<String>> dataObject = new ArrayList<List<String>>(){
{ add(listInit); add(listInit);}};
List<List<String>> dataSubject = new ArrayList<List<String>>(){
{ add(listInit); add(listInit);}};
ModelTableau modelObject = new ModelTableau(dataObject,tableauObjectTitle);
ModelTableau modelSubject = new ModelTableau(dataSubject, tableauSubjectTitle);
JTable tableauObject = new JTable(modelObject);
JTable tableauSubject = new JTable(modelSubject);
Run Code Online (Sandbox Code Playgroud)
这是我的课程 …
我正在尝试在Jtable扩展中添加一行,AbstractTableModel如下面的代码所示:
class AbstractTable extends AbstractTableModel
{
String[] columNames = {"name", "cc", "age", "phone", "date", "amoun"};
Object[][] dataRow = {{"harry", "1234","21","23594","13/3/2","3000"} };
@Override
public int getColumnCount()
{
return columNames.length;
}
@Override
public int getRowCount()
{
return dataRow.length;
}
public String getColumnName(int col)
{
return columNames[col];//cast from object to string.
}
@Override
public Object getValueAt(int row, int col)
{
return dataRow[row][col];
}
public void setValueAt(Object value, int row, int col)
{
dataRow[row][col] = value;
fireTableCellUpdated(row, col);
}
} …Run Code Online (Sandbox Code Playgroud)