gpt4 book ai didi

java - 有 com.l2fprod.common.propertysheet.PropertySheetPanel 来显示复合类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:22 27 4
gpt4 key购买 nike

为了让 Netbeans 喜欢属性检查器窗口,我正在使用以下类来帮助我实现这一点。

com.l2fprod.common.propertysheet.PropertySheetPanel

到目前为止,它适用于具有简单属性(如 String、int...)的类

但是,当涉及到具有复合关系的稍微复杂的类时,事情变得更加复杂。

例如,我有两个动物(界面)。一个是猫(带有名字和年龄的简单类)和狗(另一个带有名字和年龄的简单类)。

通过 GUI 窗口毫不费力地显示它们。

但是,当以复合关系上课时。一个动物园,它可以包含多个动物(一个带有数组列表的类来保存动物),我无法在一个窗口中显示所有动物属性。

以下是截图

alt text
(来源:googlepages.com)

此处显示部分源代码

    ObjectInspectorJFrame objectInspectorJFrame0 = new ObjectInspectorJFrame(cat);
objectInspectorJFrame0.setVisible(true);
objectInspectorJFrame0.setState(java.awt.Frame.NORMAL);

ObjectInspectorJFrame objectInspectorJFrame1 = new ObjectInspectorJFrame(dog);
objectInspectorJFrame1.setVisible(true);
objectInspectorJFrame1.setState(java.awt.Frame.NORMAL);

// I wish to see all "animals" and their properties in this windows. :(
// How?
ObjectInspectorJFrame objectInspectorJFrame2 = new ObjectInspectorJFrame(zoo);
objectInspectorJFrame2.setVisible(true);
objectInspectorJFrame2.setState(java.awt.Frame.NORMAL);

完整的源代码可以从

下载

http://yancheng.cheok.googlepages.com/sandbox.zip

我希望在“动物园”窗口中,它可以显示所有动物的所有属性。

最佳答案

PropertySheetPanel 仅填充其表以读取给定 Java Bean 的属性。

您需要扩展 PropertySheetPanel 行为并填充给定集合中的属性。迭代您的集合并使用 addProperty(Property) 填充表。

您还可以使用 instrospectionbeanutils lib 来发现集合元素。

编辑:添加示例。

package com.stackoverflow.swing.PropertySheetPanel;

import java.util.ArrayList;
import java.util.Collection;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

import com.l2fprod.common.propertysheet.DefaultProperty;
import com.l2fprod.common.propertysheet.PropertySheetPanel;

/**
* An example that creates a l2fprod PropertySheetPanel that displays any
* Collection.
*/
public class CollectionPropertySheet<C> extends PropertySheetPanel {

// Choose some bean. An animal as example.
static class Animal {
private String name;
private String family;

public Animal(String name, String family) {
this.name = name;
this.family = family;
}

@Override public String toString() {
return name + " " + family;
}
}

/**
* @param simpleModel The input collection as data model.
*/
public CollectionPropertySheet(Collection<C> simpleModel) {
super();
populateCollectionProperties(simpleModel);
}

private void populateCollectionProperties(Collection<C> collection) {
int index = 0;
for (C entry : collection) {
// Define property properties
DefaultProperty property = new DefaultProperty();
property.setDisplayName(entry.getClass().getSimpleName() + "[" + index++ +"]");
property.setValue(entry.toString());
// Set any other properties ...
// and add.
addProperty(property);
}
}

// Start me here!
public static void main(String[] args) {
// Inside EDT
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
JFrame frame = new JFrame("A simple example...");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new CollectionPropertySheet<Animal>(getAnimals()));
frame.pack();
frame.setVisible(true);
}

private Collection<Animal> getAnimals() {
Collection<Animal> animals = new ArrayList<Animal>();
animals.add(new Animal("Lion", "Felidae"));
animals.add(new Animal("Duck", "Anatidae"));
animals.add(new Animal("Cat", "Felidae"));
return animals;
}
});
}

}

关于java - 有 com.l2fprod.common.propertysheet.PropertySheetPanel 来显示复合类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com