我有一些适用于接口的类:
这是界面:
public interface Orderable
{
int getOrder()
void setOrder()
}
Run Code Online (Sandbox Code Playgroud)
这是工人阶级:
public class Worker
{
private List<Orderable> workingList;
public void setList(List<Orderable> value) {this.workingList=value;}
public void changePlaces(Orderable o1,Orderable o2)
{
// implementation that make o1.order=o2.order and vice versa
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个实现接口的对象:
public class Cat implements Orderable
{
private int order;
public int getOrder()
{
return this.order;
}
public void setOrder(int value)
{
this.order=value;
}
public Cat(String name,int order)
{
this.name=name;
this.order=order;
}
}
Run Code Online (Sandbox Code Playgroud)
在主要程序中,我创建了一个猫列表.我使用glazed列表在列表更改时以及使用此列表创建控件模型时动态更新控件.
目标是将此列表传输到工作对象,因此我可以在主过程中向列表中添加一些新的cat,并且工作人员将在不再设置其list属性的情况下知道它(list是main proc中的相同对象工人).但是当我把worker.setList(cats)
它叫做关于期待可订购的警报时,却得到一只猫......但是Cat实现了Orderable.我该如何解决这个问题? …
我最近花了一些时间学习并尝试使用各种Java数据绑定工具,如JGoodies,GlazedLists,JSR-295等.我一直试图解决的问题并不是那么困难,但是代码量很大我必须写支持绑定过程,这大大超过了它提供的任何简化.
我发现所提供的工具并不适用于除了微不足道的组合和扩展之外的任何其他工具(GlazedLists特别提供了一套很好的工具,但是扩展的系统太复杂了).
我真的很喜欢数据绑定的想法,但它似乎存在严重缺陷.我错过了什么吗?
我已经更新了这个问题,以便更准确地描述我的问题的原因,并且包含了一个比我最初使用的更简单的例子.
我在下面添加了一个简单的示例来说明我遇到的性能问题.当我使用普通的ArrayList支持我的JXTable时,它的表现相当不错.但是,如果我为EventList切换ArrayList并使用EventTableModel构建表,则排序要慢得多(在这种情况下慢约10倍).
如果使用Maven或Gradle,这里是我正在使用的工件坐标.
apply plugin: 'java'
apply plugin: 'application'
mainClassName = "SortPerfMain"
dependencies {
compile "net.java.dev.glazedlists:glazedlists_java15:1.8.0"
compile "org.swinglabs.swingx:swingx-core:1.6.4"
}
Run Code Online (Sandbox Code Playgroud)
这是一个例子.我试图使用EventList的唯一原因是因为我想要一个我可以在TableModel之外修改并且发生必要通知的数据结构.
import ca.odell.glazedlists.BasicEventList;
import ca.odell.glazedlists.EventList;
import ca.odell.glazedlists.gui.TableFormat;
import ca.odell.glazedlists.swing.EventTableModel;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.renderer.*;
import org.jdesktop.swingx.table.TableColumnExt;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
/* This class creates a JFrame with two JXTables displayed side by side. Both
* tables have a single column that holds Item objects. Each Item has one …
Run Code Online (Sandbox Code Playgroud) 我想实现一个同时具有 AdvancedTableFormat 和 WritableTableFormat 接口的 Glazed List。
我在这里阅读: http: //www.jroller.com/aalmiray/entry/glazedlists_groovy_not_your_regular
对于一个界面来说,在 Groovy 中使用“as”关键字似乎可以实现这一点:
# return new EventTableModel(linksList, [
# getColumnCount: {columnNames.size()},
# getColumnName: {index -> columnNames[index]},
# getColumnValue: {object, index ->
# object."${columnNames[index].toLowerCase()}"
# }] as TableFormat)
Run Code Online (Sandbox Code Playgroud)
是否可以以某种方式为两个接口执行此操作?如果是这样怎么办?
谢谢你!
米沙
我创建了一个包含GlazedLists的表,以便能够过滤表格以进行搜索.现在的问题是如何删除,添加或更新此表中的行.我确实搜索了API,但无法弄明白.
任何人都可以通过一个简单的例子演示如何实现删除,添加,更新?
public static JTable retrieveArtikelTable(String filePath, String[] header, JTextField filterField) {
EventList eventList = new BasicEventList();
String[] headers = new String[0];
CsvReader reader = null;
JTable t = new JTable();
if (filePath != null) {
if (new File(filePath).exists()) {
try {
reader = new CsvReader(filePath, ';');
if (header != null) {
headers = header;
} else {
headers = reader.getHeaders();
}
while (reader.readRecord()) {
String[] values = reader.getValues();
eventList.add(new Artikel(values[0], values[1], values[2]));
}
reader.close();
TextFilterator artikelFilterator = new TextFilterator() …
Run Code Online (Sandbox Code Playgroud) 我查看了如何在这里使用多个过滤器和常规表,并且所有答案都指向了GlazedLists
.但是,答案没有具体说明如何使用它.我能够让一个过滤器工作,但不知道如何获得多个过滤器.对于我使用的一个过滤器:
// nameE is a BasicEventList containing classes (name) which
// contain the table values
TextFilterList filtered = new TextFilterList(nameE);
JTextField filterEdit = filtered.getFilterEdit();
// Inside the table value class (name) there is a filter for myName
public void getFilterStrings(List baseList) {
baseList.add(myName);
}
Run Code Online (Sandbox Code Playgroud)
复制代码并创建另一个代码JTextField
不起作用.我看起来这个问题,它似乎CompositeMatcherEditor
可行.问题是我不知道如何实现这一点.
另外,我正在使用Eclipse.我下载了GlazedLists
1.8.0并将其放入Eclipse中.但是,我不能使用它.我到处都是红色正方形(源文件夹除外)!我甚至添加了jar文件.
我希望我已经正确地解释了自己.如果我需要扩展,请告诉我.
我的Pastebin:Name,Browser,TableFormat,TableModel
glazedlists ×6
java ×5
jtable ×2
swing ×2
casting ×1
data-binding ×1
filtering ×1
groovy ×1
interface ×1
jgoodies ×1
jtextfield ×1
jxtable ×1
swingx ×1