Tôi đang cố thay đổi kiểu của một mục ContextMenu
bằng cách sử dụng tệp CSS riêng biệt. Tôi nhìn phần caspian.css và tìm thấy các định nghĩa sau đây:Làm thế nào để bạn đặt phong cách cho một JavaFX ContextMenu bằng cách sử dụng css?
- .context menu
- .context menu .separator
- .context menu .scroll-mũi tên
- .context- đơn .scroll mũi tên: di chuột
- .context-menu: show-mnemonics .mnemonic-gạch dưới
tôi sao chép những người trên chính xác đến file css của tôi và thay đổi chỉ là màu nền các giá trị dưới dạng thử nghiệm:
.context-menu {
-fx-skin: "com.sun.javafx.scene.control.skin.ContextMenuSkin";
-fx-background-color: #006699;
-fx-background-insets: 0, 1, 2;
-fx-background-radius: 0 6 6 6, 0 5 5 5, 0 4 4 4;
/* -fx-padding: 0.666667em 0.083333em 0.666667em 0.083333em; 8 1 8 1 */
-fx-padding: 0.333333em 0.083333em 0.666667em 0.083333em; /* 4 1 8 1 */
}
.context-menu .separator {
-fx-padding: 0.0em 0.333333em 0.0em 0.333333em; /* 0 4 0 4 */
}
.context-menu .scroll-arrow {
-fx-padding: 0.416667em 0.416667em 0.416667em 0.416667em; /* 5 */
-fx-background-color: #006699;
}
.context-menu .scroll-arrow:hover {
-fx-background: -fx-accent;
-fx-background-color: #006699;
-fx-text-fill: -fx-selection-bar-text;
}
.context-menu:show-mnemonics .mnemonic-underline {
-fx-stroke: -fx-text-fill;
}
Điều này rõ ràng không hoạt động hoặc tôi sẽ không ở đây. Nó dường như không có tác dụng bất kể giá trị tôi thay đổi.
Tôi đã mở JavaFX Scene Builder để xem xét (lưu ý phụ tôi đã sử dụng đây là phương sách cuối cùng, vì tôi thấy nó khá vụng về để sử dụng). Tôi nhận thấy theo các phần có thể theo dõi của phần css cho menu ngữ cảnh là danh sách CSSBridge[context-menu]
có vẻ lạ. Những thứ khác như Nhãn có Label[label]
.
Ai có thể giải thích cho tôi điều gì đang xảy ra ở đây, vì dường như nó bỏ qua tệp css của tôi cho menu ngữ cảnh và sử dụng giá trị mặc định trong caspian.css?
Đính kèm tệp FXML mẫu, css và mã java để chạy.
Sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<AnchorPane fx:id="myroot" xmlns:fx="http://javafx.com/fxml">
<children>
<Label text="Right click for options">
<contextMenu>
<ContextMenu>
<items>
<MenuItem text="Help" />
<MenuItem text="Me" />
</items>
</ContextMenu>
</contextMenu>
</Label>
</children>
<stylesheets>
<URL value="@contextcolor.css" />
</stylesheets>
</AnchorPane>
contextcolor.css
.root {
-fx-background-color: cornsilk;
-fx-padding: 10;
}
.context-menu {
-fx-background-color: #006699;
-fx-text-fill: white;
}
.menu-item .label {
-fx-text-fill: yellow;
}
.menu-item:focused .label {
-fx-text-fill: white;
}
Test.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Test extends Application {
public static void main(String[] args) {
Application.launch(Test.class, args);
}
@Override
public void start(Stage stage) throws Exception {
System.out.println(com.sun.javafx.runtime.VersionInfo.getVersion());
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
stage.setScene(new Scene(root));
stage.show();
}
}
Cung cấp [phản hồi về SceneBuilder đây] (https://forums.oracle.com/forums/thread .jspa? threadID = 2369765) – jewelsea
Sẽ làm cuối tuần này. Cảm ơn các liên kết. –