cuốn sách gpt4 ai đã làm

Các kiểu css JavaFX TreeItem cho các loại trường khác nhau

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:30:39 hai mươi bốn 4
mua khóa gpt4 Nike

TreeView của tôi được tạo bởi cây của riêng tôi. Trong lớp Node, tôi có một "loại" trường là một trong các NodeType. Vấn đề là tôi muốn tạo kiểu cho từng loại NodeType, ví dụ màu văn bản "type1" phải là màu xanh lá cây và màu văn bản "type2" phải là màu đỏ. Tôi mới làm quen với javaFX. Tôi đã tìm thấy james-d ( https://github.com/james-d/heterogeneous-tree-example ), nhưng trong ví dụ này, kiểu css phụ thuộc vào tên lớp, làm cách nào tôi có thể tạo nó cho trường lớp?

Chế độ xem TreeView

câu trả lời hay nhất

Sự hiểu biết của tôi là bạn muốn một Tế bào câynguyên nhân phong cách Loại nút thay đổi Nodebao gồm trong CâyMục Trung Sóc Tế bào cây .all thông qua CSS. Tôi có đúng không?

Giả sử tôi đúng, tôi có thể nghĩ ra hai cách để thực hiện điều này nếu có một số ít người biết đến; Loại nút, hai phương pháp này hoạt động hiệu quả nhất trong vài giây. Việc đầu tiên liên quan đến việc sử dụng Lớp giảCách thứ hai sử dụng chiến lược tương tự như JavaFX Biểu đồ API.


lựa chọn đầu tiên

创建自定义 Tế bào câyThích hợp để sử dụng với Nodetype (tức là chỉ định chữ ký chung một cách thích hợp). theo thói quen nàyTế bào câyBạn đã khai báo bao nhiêu? Lớp giảCác trường cuối cùng tĩnh nếu cần;Loại nút .Sau đó bạn quan sát Loại nútthứ gì đóNodeHiện đang hiển thị trongTế bào câyvà cập nhật Lớp giảGiải thích cho phù hợp.

đây là một giả định Loại nút Một ví dụ là một liệt kêCó hai hằng số:VUI MỪNGBUỒN .

lớp công khai CustomTreeCell mở rộng TreeCell {

cuối cùng tĩnh riêng tư PseudoClass HAPPY = PseudoClass.getPseudoClass("hạnh phúc");
cuối cùng tĩnh riêng tư PseudoClass SAD = PseudoClass.getPseudoClass("buồn");

// trình nghe này sẽ kích hoạt/hủy kích hoạt các trạng thái PseudoClass thích hợp
riêng tư cuối cùng ChangeListener listen = (obs, oldVal, newVal) -> {
pseudoClassStateChanged(HAPPY, newVal == NodeType.HAPPY);
pseudoClassStateChanged(SAD, newVal == NodeType.SAD);
};

// sử dụng trình nghe yếu để tránh rò rỉ bộ nhớ
cuối cùng riêng tư WeakChangeListener yếuListener = /* quấn người nghe */;

công khai CustomTreeCell() {
getStyleClass().add("custom-tree-cell");
itemProperty().addListener((obs, oldVal, newVal) -> {
nếu (oldVal != null) {
oldVal.nodeTypeProperty().removeListener(weakListener);
}
nếu (newVal != null) {
newVal.nodeTypeProperty().addListener(weakListener);
// cần "quan sát" NodeType ban đầu của mục Node mới.
// Bạn có thể gọi trình nghe theo cách thủ công để tránh trùng lặp mã
pseudoClassStateChanged(HAPPY, newVal.getNodeType() == NodeType.HAPPY);
pseudoClassStateChanged(SAD, newVal.getNodeType() == NodeType.SAD);
} khác {
// không có mục nào trong ô này nên hãy hủy kích hoạt tất cả PseudoClass
pseudoClassStateChanged(HAPPY, false);
pseudoClassStateChanged(SAD, false);
}
});
}
}

Sau đó, trong tệp CSS của bạn, bạn có thể sử dụng:

.custom-tree-cell:hạnh phúc {
/* phong cách khi vui */
}

.custom-tree-cell:buồn {
/* phong cách khi buồn */
}

lựa chọn thứ hai

JavaFX làm gì Biểu đồ API được thực thi khi xử lý nhiều chuỗi dữ liệu. Những gì nó làm là cập nhật động lớp phong cáchSố lượng nút phụ thuộc vào chỉ mục của chuỗi trong danh sách (ví dụ: .line-chart-series-data- <-- có thể完全Không phải thế đâu).

/*
* Tạo TreeCell tùy chỉnh như trong tùy chọn đầu tiên nhưng
* không có bất kỳ mã PseudoClass nào.
* được thêm/xóa khỏi mục Node giống như yếuListener
* ở trên.
*/
ChangeListener listen = (obs, oldVal, newVal) -> {
// Bạn phải đảm bảo rằng bạn giữ "ô", "ô được lập chỉ mục" và "ô cây"
// để giữ kiểu dáng modena cơ bản.
if (newVal == NodeType.HAPPY) {
getStyleClass().setAll("cell", "indexed-cell", "tree-cell", "custom-tree-cell-happy");
} else if (newVal == NodeType.HAPPY) {
getStyleClass().setAll("cell", "indexed-cell", "tree-cell", "custom-tree-cell-sad");
} khác {
getStyleClass().setAll("cell", "indexed-cell", "tree-cell"); // trở lại kiểu TreeCell thông thường
}
};

Sau đó trong CSS:

.custom-tree-cell-hạnh phúc {
/* các kiểu */
}

.custom-tree-cell-buồn {
/* các kiểu */
}

Cả hai tùy chọn thực sự chỉ khả thi nếu có một tập hợp nhỏ các loại đã biết. Khi bạn có 10+ Loại nút Khi điều gì đó như thế xảy ra, nó có thể trở nên không thể duy trì được. Thứ hai. nếu như Loại nút Số lượng s gần như không thể thay đổi trong thời gian chạy.

Loại nút Có thể dễ dàng hơn hoặc một số cấu trúc dữ liệu/lớp trung gian để biết văn bản nên có màu gì và dựa vào đó Loại nút Đặt màu theo chương trình.

Lưu ý: Tôi đã nhanh chóng nhập mã vào câu trả lời của mình và không kiểm tra. Có thể có lỗi trình biên dịch, ngoại lệ thời gian chạy hoặc lỗi logic trong mã của tôi.


biên tập

Một cái gì đó khác xảy ra với tôi. Mã của tôi ở trên giả định Loại nútĐược lưu trong thuộc tính có thể thay đổi khi chạy. nếu nhưLoại nútcho mỗi Node Nếu tất cả đều tĩnh (không thay đổi), mã có thể được đơn giản hóa rất nhiều. Bạn chỉ có thể ghi đè javafx.scene.control.Cell thay vì sử dụng bất kỳ trình nghe nào. :

protected void updateItem(Mục nút, boolean trống)

Phương thức này được gọi mỗi khi một phần tử mới được đặt trên ô. đọc documentation tuy nhiên, vì việc ghi đè phương thức này yêu cầu nhà phát triển phải thực hiện một số hành động nhất định (chẳng hạn như gọi siêu triển khai).

Về kiểu dáng css JavaFX TreeItem của các trường lớp khác nhau, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/49444909/

hai mươi bốn 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress