我是的新手JTable
,也许我听不懂。
假设我有ArrayList
1000 Students
(id, name, surname, age
)。我想向所有的学生展示JTable
。据我了解,我必须创建StudentTableModel
它extends AbstractTableModel
并设置StudentTableModel
为JTable
。因此,我们可以认为StudentTableModel
是我们ArrayList
与表之间的“适配器”
。在互联网上,我找到了这样的示例实现getValueAt
:
public Object getValueAt(int row, int col) {
Student student = arrayList.get(row);
switch (col) {
case 0:
return student.getId();
case 1:
return student.getName();
case 2:
return student.getSurname();
case 3:
return student.getAge();
}
}
问题是,如果有1000个学生(行)和4个字段(列),我们将运行此开关4000次。请说明我做错了什么,或告诉我们更好的解决方案。
有1000个学生(行)和4个字段(列),我们将运行此开关4000次。
前提是错误的,但是您应该进行概要验证。JTable
使用
flyweight模式
进行单元渲染,因此仅检查
_可见_单元。这个简化的示例说明了基本机制。这个相关的示例可以]很好地扩展到数千行。
如果是Java2D的粉丝;但是为了在Swing组件和布局中最大程度地利用HTML,我建议您使用@camickr建议的组件方法。如果必要的话,可以使用轻量级渲染方法中所看到的JTable,等人,其中单个组件重复用于绘制。下面的示例是该技术的非常简化的概述,仅更改了颜色和位置。
附录:更新示例;另请参阅CellRendererPane并让您的应用程序飞起来:实施Flyweight以提高性能。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.CellRendererPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/** @see http://stackoverflow.com/questions/7774960 */
public class PaintComponentTest extends JPanel {
private static final int N = 8;
private static final String s = "<html><big><u>Hello</u></html>";
private JLabel renderer = new JLabel(s);
private CellRendererPane crp = new CellRendererPane();
private Dimension dim;
public PaintComponentTest() {
this.setBackground(Color.black);
dim = renderer.getPreferredSize();
this.add(crp);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < N; i++) {
renderer.setForeground(Color.getHSBColor((float) i / N, 1, 1));
crp.paintComponent(g, renderer, this,
i * dim.width, i * dim.height, dim.width, dim.height);
}
}
private void display() {
JFrame f = new JFrame("PaintComponentTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setSize(dim.width * N, dim.height * (N + 1));
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new PaintComponentTest().display();
}
});
}
}
抽象异步模型 对回调模型抽象出异步接口Async。 只有一个方法的接口通常都可以使用闭包代替,区别在于interface引入新类型,闭包则不会。如果说thunkify依赖了参数顺序的弱约定,Async相对严肃的依赖了类型。 <?php interface Async { public function begin(callable $callback); } // AsyncTask符
我有一个用户的Entity-DTO转换器,如下所示: 我有很多Entity-DTO要管理,所以我想像这样抽象转换器 我的问题是:我必须放置什么而不是???
问题内容: 除了语法外,使用django抽象模型和对django模型使用纯Python继承之间有什么区别?利弊? 更新:我认为我的问题被误解了,并且我收到了关于抽象模型与从django.db.models.Model继承的类之间的区别的答复。 我实际上想知道从Django抽象类(元:abstract = True)继承的模型类与从诸如“ object”(而不是models.Model)继承的普通P
我想根据我使用 AbstractTableModel 指定的列从数据库中的表中提取数据。表中有 8 列,但只想显示 8 列中的 3 列。 例如: 数据库有以下列:ID、First_Name、Last_Name、…、Phone_Number。如果我指定要在表中显示First_Name、Last_Name和Phone_Number,它将显示ID、First_ Name和Last_ Name。我认为应该
我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。
“动物”可以是猫或狗。不幸的是,当我这样做时,我得到了一个异常,因为没有为抽象类Animal创建表。有没有人知道我如何使用ActiveAndroid来实现这一点?