2014-01-20 4 views
0

Я работаю над приложением типа финансового контроля для своих родителей в Java с использованием JavaFX, но у меня проблема с графическим интерфейсом. Я искал Google и код для проблемы, но я не могу найти ничего плохого.JavaFX Данные TableView не видны с CellValueFactory

Это ссылка, я использую в качестве ориентира: http://docs.oracle.com/javafx/2/ui_controls/table-view.htm

Я трогание с календарем, используя TableView. Кстати, есть ли другой способ сделать календар с JavaFX?

В любом случае, вот код:

пакет финансов;

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.layout.VBox; 
import javafx.scene.text.Font; 
import javafx.stage.Stage; 

import java.text.DateFormatSymbols; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class Main extends Application { 
    Calendar calendar = new GregorianCalendar(); 
    private TableView<Week> table = new TableView<Week>(); 

    final ObservableList<Week> data = FXCollections.observableArrayList(
      new Week("1", "2", "3", "4", "5", "6", "7") 
    ); 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Scene scene = new Scene(new Group()); 
     primaryStage.setTitle("Finance Control"); 
     primaryStage.setWidth(1000); 
     primaryStage.setHeight(700); 

     Label month = new Label(getMonthForInt(calendar.get(Calendar.MONTH))); 
     month.setFont(new Font("Arial", 30)); 

     table.setEditable(false); 
     table.setPrefHeight(500); 
     table.setPrefWidth(882); 

     TableColumn sun = new TableColumn("Sunday"); 
     TableColumn mon = new TableColumn("Monday"); 
     TableColumn tue = new TableColumn("Tuesday"); 
     TableColumn wed = new TableColumn("Wednesday"); 
     TableColumn thu = new TableColumn("Thursday"); 
     TableColumn fri = new TableColumn("Friday"); 
     TableColumn sat = new TableColumn("Saturday"); 

     sun.setCellValueFactory(
       new PropertyValueFactory<Week, String>("a") 
     ); 

     mon.setCellValueFactory(
       new PropertyValueFactory<Week, String>("b") 
     ); 

     tue.setCellValueFactory(
       new PropertyValueFactory<Week, String>("c") 
     ); 

     wed.setCellValueFactory(
       new PropertyValueFactory<Week, String>("d") 
     ); 

     thu.setCellValueFactory(
       new PropertyValueFactory<Week, String>("e") 
     ); 

     fri.setCellValueFactory(
       new PropertyValueFactory<Week, String>("f") 
     ); 

     sat.setCellValueFactory(
       new PropertyValueFactory<Week, String>("g") 
     ); 

     TableColumn[] days = {sun, mon, tue, wed, thu, fri, sat}; 
     for (TableColumn day: days) { 
      day.setPrefWidth(table.getPrefWidth()/7); 
     } 

     table.setItems(data); 
     table.getColumns().addAll(sun, mon, tue, wed, thu, fri, sat); 

     final VBox vbox = new VBox(); 
     vbox.setSpacing(5); 
     vbox.setPadding(new Insets(10, 0, 0, 10)); 
     vbox.setAlignment(Pos.CENTER); 
     vbox.getChildren().addAll(month, table); 
     ((Group) scene.getRoot()).getChildren().addAll(vbox); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    String getMonthForInt(int num) { 
     String month = "wrong"; 
     DateFormatSymbols dfs = new DateFormatSymbols(); 
     String[] months = dfs.getMonths(); 
     if (num >= 0 && num <= 11) { 
      month = months[num]; 
     } 
     return month; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

    public static class Week { 
     String a; 
     String b; 
     String c; 
     String d; 
     String e; 
     String f; 
     String g; 

     public Week(String a, String b, String c, String d, String e, String f, String g) { 
      this.a = a; 
      this.b = b; 
      this.c = c; 
      this.d = d; 
      this.e = e; 
      this.f = f; 
      this.g = g; 
     } 
    } 
} 

Это то, что происходит, когда я запускаю его. Я бы ожидал, что он заполнит значениями, которые я дал объекту Constructor of the Week, но это не так: он просто показывает пустые ячейки.

http://i.imgur.com/ZrhPIDe.png

Я использую IDEA IDE, если это имеет значение ... Я буду благодарен за любую помощь с этим или какими-либо комментариями. Вероятно, в какой-то момент я, вероятно, буду использовать сценарист, но прежде, чем перейти к построителю GUI, я хотел бы получить представление о самом коде.

ответ

0

Ahh, похоже, я решил. Класс PropertyValueFactory использует методы в классе week для получения значений - мне просто нужно добавить некоторые геттеры для всех полей.

+0

Мне было бы приятно, если бы вы показали нам, как это сделать. – aero

Смежные вопросы