我有一个可排序的JTable设置来使用自定义扩展AbstractTableModel.但是,这个表的某些行为是我的预期,我希望得到一些关于如何解决这个问题的建议.
我将JTable设置为可排序使用:
thisJTable.setAutoCreateRowSorter(true);
Run Code Online (Sandbox Code Playgroud)
这允许我按预期单击列标题对表进行排序.
但是,我发现当我通过单击列标题对表进行排序时,我的行的格式(背景和前景色)也没有排序.
我根据它们包含的值设置了这些行的颜色编码.当我按列标题排序时,给定行NUMBER的格式保持不变(尽管之前在该行中的内容已移动).
通过覆盖prepareRendererJTable 的默认调用来设置行的颜色:
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
CustTableModel thisModel = (CustTableModel) getModel();
c.setBackground(thisModel.getRowBackgroundColor(row));
c.setForeground(thisModel.getRowForeColor(row));
return c;
}
};
Run Code Online (Sandbox Code Playgroud)
有没有更好/不同的方法来解决这个问题?
我是否应该使用不同的方法来进行渲染,这种方法可以在排序中更新JTable的渲染?
或者我是否想要编写自己的排序方法?
解决方案(谢谢mKorbel!)
我以为我会发布我的解决方案,因为我不得不玩这个,因为我不确定新索引是否也会传递给prepareRenderer.
thisTable = new JTable(thisModel){
//Set up custom rendering - Sets background color of row to correct value
public …Run Code Online (Sandbox Code Playgroud) 如何根据特定行显示的输入类型实现具有不同类型的单元格编辑器的JTable?
例如
目前我已实现了AbstractTableModel,它从我的对象中获取一组自定义字段对象,并向表中添加行.我想通过设置特定类型的单元格来进一步自定义我的表格.我可以根据行包含的字段类型确定要使用的单元格类型.
表模型是在运行时动态创建的.
我想将读取lucene索引的结果存储到jTable中,以便我可以通过不同的列对其进行排序.从索引我正在阅读具有不同频率度量的术语.
表列是这些:[string term] [int absFrequency] [int docFrequency] [double invFrequency]
所以我在AbstractTableModel中我可以定义列名,但我不知道如何使用以下方法得到Object [] []数据:
public static void FrequencyMap(Directory indexDir) throws Exception
{
List<ArrayList>redoviLista = new ArrayList<ArrayList>();
//final Map<String,TermRow> map = new TreeMap<String,TermRow>();
List<String>termList = new ArrayList<String>();
IndexReader iReader = IndexReader.open(indexDir);
FilterIndexReader fReader = new FilterIndexReader(iReader);
int numOfDocs = fReader.numDocs();
TermEnum terms = fReader.terms();
while (terms.next()){
Term term = terms.term();
String termText = term.text();
termList.add(termText);
//Calculating the frequencies
int df = iReader.docFreq(term);
double idf = 0.0F;
idf = Math.log10((double) numOfDocs / df);
double …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚使用构造函数的东西JTable(TableModel dm).
我正在使用LinkedList来管理我的数据,为了显示它,我扩展了AbstractTableModel:
public class VolumeListTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private LinkedList<Directory> datalist;
private Object[] columnNames= {"ID", "Directory", "Wildcard"};
public VolumeListTableModel(){
}
public void setDatalist(LinkedList<Directory> temp){
this.datalist = temp;
}
public LinkedList<Directory> getDatalist(){
return (LinkedList<Directory>) this.datalist.clone();
}
public Object[] getColumnNames() {
return this.columnNames;
}
@Override
public int getColumnCount() {
return Directory.numCols;
}
@Override
public int getRowCount() {
return this.datalist.size();
}
@Override
public Object getValueAt(int row, int col) {
Directory temp …Run Code Online (Sandbox Code Playgroud) 我上课了;
public class A extends AbstractTableModel
{
...
}
Run Code Online (Sandbox Code Playgroud)
使用ResultSetMetaData我构建TableModel以匹配数据库中的结果集.
public class B extends JPanel
{
...
}
Run Code Online (Sandbox Code Playgroud)
在B类中,我扩展了JPanel并添加了A类来显示我的表.我希望能够根据条件向表模型添加新列.我试过谷歌搜索,但大多数示例显示是基于DefaultTableModel不AbstractTableModel.
有谁知道如何实现这一目标?
我有一个Jtable和我的dataModel的问题.我的表模型扩展了AbstracttableModel,数据存储在Vector中.我有一个功能女巫假设要删除一行或多行.这些行不一定是连续的,因为我的jtable将selectionMode设置为:
jTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
Run Code Online (Sandbox Code Playgroud)
删除行的功能(逐个):
public void removeMessageRow(Integer p_idMessage) {
Enumeration<MlMessage> alldatas = vData.elements();
while (alldatas.hasMoreElements()) {
MlMessage m = alldatas.nextElement();
if (m.getIdMessage() == p_idMessage) {
int idx = vData.indexOf(m);
boolean result = vData.remove(m);
// fireTableDataChanged();
// fireTableRowsDeleted(idx, idx);
fireTableStructureChanged();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动该功能时,我执行循环没有问题,在逐步模式下,我可以看到更新的vData对象,如果我执行这一次只有一次没有GUI的问题.当我选择多行时会出现问题.例如,我在我的表中选择了行号0和数字1,并且我执行了removeMessageRow函数,在第一次执行时,vDataObject被正确更新(所有数据都被删除,并且此向量的最后元素被设置为null打电话vData.remove(m).所以在我的情况,我希望在第二个执行,找对象应该是在位置0,但它在为VDATA对象从未更新过位置1.没有任何人有关于这种想法?我已经尝试了许多火上浇油的东西,但没有人立即执行.感谢任何帮助提前和抱歉我的莎士比亚的语言.
我试图从CSV文件中读取数据并将其显示在JTable上,但我有一些问题.我是菜鸟,请耐心等待.我查看并合并了几个来源的示例代码,但无济于事.该表显示但是它是空白的.我知道我正在阅读数据,因为我可以打印它.我怀疑我的ModelTable设置有问题.任何帮助将不胜感激.
package t1data;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.*;
import javax.swing.border.EmptyBorder;
import java.io.*;
import javax.swing.table.*;
public class T1Data extends JPanel implements ActionListener {
public T1Data() {
super(new BorderLayout(3,3));
JTable Table = new JTable(new MyModel());
Table.setPreferredScrollableViewportSize(new Dimension(700, 70));
Table.setFillsViewportHeight(true);
JPanel ButtonOpen = new JPanel( new FlowLayout(FlowLayout.CENTER) );
JButton OpenFile = new JButton("Open");
JButton SaveFile = new JButton("Save");
ButtonOpen.add(OpenFile);
add(ButtonOpen, BorderLayout.SOUTH);
OpenFile.addActionListener(this);
SaveFile.addActionListener(this);
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(Table); …Run Code Online (Sandbox Code Playgroud) 在我的应用中,一切都是分布式
ArrayList<T>.我创建了一个RelativeTableModel我传递的对象ArrayList<T>.
public void RelationsClicked() {
ArrayList<Relation> data = myParent.dbOperation.getRelations();
RelativeTableModel tModel = new RelativeTableModel(data); // subclass of AbstractTableModel
myParent.SetBrowsePanelData(tModel);
myParent.SetMainPanel(CashAccountingView.BROWSEPANEL);
}
Run Code Online (Sandbox Code Playgroud)
BrowseListPanel有一个JTablein 的课程JScrollPane.它的实例已在主应用程序中创建.BrowseListPanel最后展示面板.码:
public void SetBrowsePanelData(AbstractTableModel tModel) {
browsePanel.setTModel(tModel);
}
// BrowseListPanel's Code
public void setTModel(AbstractTableModel tModel) {
this.tModel = tModel; // tModel = AbstractTableModel
}
// Show the Panel
public void SetMainPanel(String panel) {
activePanel = panel;
SetFontSize();
cards.show(mainPanel, panel);
mainPanel.revalidate(); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要在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 示例:
谢谢!