2012-06-22 31 views
7

Tôi đang cố gắng tạo kiểu cho linechart JavaFX của mình, nhưng không thể tìm thấy bất kỳ cách nào để đặt màu thành chuỗi cụ thể. Tôi biết, rằng tôi có thể tạo kiểu thông qua CSS, nhưng tôi không thể tìm thấy cách đặt ID hoặc CLASS thành chuỗi của mình.Cách đặt màu cụ thể cho JavaFX XYChart.Series?

bất cứ ai có thể cho tôi một đầu mối về:

  1. Làm thế nào để thiết lập một màu để linecharts?
  2. Cách đặt một lớp css thành chuỗi?

Trả lời

12

Nói chung, cách thức ưu tiên của biểu đồ kiểu không có mã, chỉ sử dụng biểu định kiểu css như jschoen đề xuất. Ngoài ra, nếu cần thêm tùy chỉnh, bạn có thể sử dụng tra cứu css từ mã để tìm hiểu các nút được tạo từ dữ liệu chuỗi và áp dụng nhiều kiểu tạo CSS khác nhau.

Dưới đây là thông tin về thay đổi động JavaFX line chart stylesample program để đi cùng với câu trả lời. Trong ứng dụng mẫu, tất cả các kiểu css bổ sung được thực hiện thông qua một cuộc gọi setStyle từ mã. Sử dụng một kỹ thuật tra cứu tương tự, bạn có thể truy cập vào các nút chuỗi để áp dụng một kiểu bảng kiểu dáng thích hợp thay vì một cuộc gọi setStyle.

+0

Chỉ muốn nói rằng bạn có một số chương trình mẫu khá đẹp trên tài khoản git của bạn. Tôi đã chạy qua chúng trước đó ngày hôm nay, và mất một vài giờ chỉ nhìn qua chúng. Một nguồn tài nguyên rất hữu ích. Cảm ơn. –

+1

Tôi có thể tin rằng kiểu dáng biểu đồ dựa trên CSS hoạt động tốt cho phần mềm 'trang tổng quan', nhưng đó là một sự ghê tởm đối với bất kỳ ai cố gắng làm việc với dữ liệu tương tác. Ngay cả các thư viện biểu đồ javascript thường không buộc bạn cập nhật một bảng định kiểu để thay đổi kích thước điểm trên một phân tán đơn lẻ. –

4

Tôi tìm thấy Tài liệu Oracle này trên Styling charts with CSS và trên trang đó cuộn xuống Setting Chart Colors cho những gì bạn đang tìm kiếm cụ thể.

Cách đặt màu thành linecharts?

Cách đơn giản nhất cho điều này là đoạn CSS sau:

.default-color0.chart-series-line { -fx-stroke: #e9967a; } 
.default-color1.chart-series-line { -fx-stroke: #f0e68c; } 
.default-color2.chart-series-line { -fx-stroke: #dda0dd; } 

này tiếc là sẽ không hoạt động bằng cách id hoặc đó là hàng loạt, mà là thứ tự truyện được đặt trong đồ thị. Bạn cũng có thể đặt kiểu đường bằng cách thực hiện:

.chart-series-line {  
    -fx-stroke-width: 2px; 
    -fx-effect: null; 
} 

Cách đặt một lớp css thành chuỗi?

Rất tiếc, tôi không thấy cách nào để thực hiện điều đó. Nó sẽ là tốt đẹp để có thể tạo ra các quy tắc CSS dựa tắt thuộc tính tên XYChart.Series, nhưng tôi không nghĩ rằng đó là có thể.

+0

Cảm ơn, tôi nghĩ về việc thay đổi màu mặc định, nhưng tôi sẽ cần phải tắt/bật loạt (người dùng sẽ có chức năng để hiển thị/ẩn loạt). Và theo cách này, đó không phải là cách tốt nhất để làm điều đó. – Yurish

2

câu trả lời của jewelsea dường như nói rằng bạn phải đặt một lớp kiểu trên mỗi nút của chuỗi. Tôi đang sử dụng mã sau đây để tạo kiểu cho chuỗi biểu đồ vùng và chỉ gán một lớp cho nút được liên kết với chuỗi. Mã ví dụ là trong Scala, nhưng phải dễ dịch.

Khi tạo hàng loạt, tôi thêm một loạt cụ thể lớp phong cách:

 val s = new XYChart.Series[Number, Number]() //create a new series 
     s.setName(seriesName)       //set its name (display in legend) 
     s.getNode.getStyleClass.add("series-" + seriesName) //add specific style class 

Sau đó bên trong css -file tôi làm như sau để thay đổi màu fill cho loạt 'butterwings':

.series-butterwings *.chart-series-area-fill{ 
    -fx-fill: #aab597; 
} 

Điều này làm việc, bởi vì nút cho khu vực chuỗi nằm dưới nút chuỗi (là một nhóm trong trường hợp biểu đồ vùng).

+0

Tôi đã thử làm điều này nhưng thấy rằng chương trình của tôi bị treo trên cuộc gọi 'add'. Bất kỳ ai cũng có một trải nghiệm tương tự? Tôi đang làm điều này từ ScalaFx; không biết nếu điều đó tạo ra sự khác biệt (mặc dù tôi đang gọi các phương thức javafx nguyên bản hơn là các trình bao bọc). – Luciano

5

Cách đặt màu thành linecharts?

Đây là một cách đơn giản để AreaChart hoặc Biểu đồ dạng đường

XYChart chart = new AreaChart(); 
Series series = new Series(); 
chart.getData().add(series); 

Node fill = series.getNode().lookup(".chart-series-area-fill"); // only for AreaChart 
Node line = series.getNode().lookup(".chart-series-area-line"); 

Color color = Color.RED; // or any other color 

String rgb = String.format("%d, %d, %d", 
     (int) (color.getRed() * 255), 
     (int) (color.getGreen() * 255), 
     (int) (color.getBlue() * 255)); 

fill.setStyle("-fx-fill: rgba(" + rgb + ", 0.15);"); 
line.setStyle("-fx-stroke: rgba(" + rgb + ", 1.0);"); 
+1

Tôi nhận được một trống trở lại trên các dòng này: series.getNode(). Lookup (". Chart-series-area-fill"); series.getNode(). Tra cứu (". Chart-series-area-line"); Tôi đang sử dụng biểu đồ vùng. – LordScone

+1

Đối với một LineChart, hãy thử 'series.getNode(). Lookup (". Chart-series-line ");'. – Pygmalion

+1

Tôi muốn nhấn mạnh rằng 'series.getNode(). Lookup()' phải được gọi ** sau khi ** thêm chuỗi vào biểu đồ, ngược lại nó trả về null. –

Các vấn đề liên quan