Доброго здравия. Нужна помощь в реализации динамичных таблиц. Суть проста, имеется файл со словами разбитыми через \t. Требуется считать количество слов в линию и создать столько же столбцов, а потом добавлять последующие строки в таблицу. Разбить это все на массив и открыть построчно файл смог, но (именно) динамичные таблицы не получаются. Подскажите, как можно подобное реализовать ? В данный момент имею такой код: Код | package Lengine;
import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.control.cell.TextFieldTableCell; import javafx.stage.DirectoryChooser; import javafx.stage.Stage;
import java.io.*;
public class Lengine extends Application {
private Stage primaryStage; private String fileCache; private String folderCache; private String target; @FXML private ListView<String> listFile1 = new ListView<String>(); @FXML private ListView<String> listFile2 = new ListView<String>(); @FXML private ProgressIndicator indicator; @FXML private TextArea textarea1;
private ObservableList<TableQuest> usersData = FXCollections.observableArrayList(); @FXML private TableView<TableQuest> tableUsers; @FXML private TableColumn<TableQuest, Integer> idColumn; @FXML private TableColumn<TableQuest, String> loginColumn; @FXML private TableColumn<TableQuest, String> passwordColumn; @FXML private TableColumn<TableQuest, String> emailColumn;
public Lengine() {
}
@Override public void start(Stage primaryStage) throws IOException { this.primaryStage = primaryStage; this.primaryStage.setTitle("Test");
Parent root = FXMLLoader.load(getClass().getResource("lenfx.fxml")); Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.show(); }
/** * Функция выбора папки и присвоение списка файлов в list1 * @throws IOException */ @FXML public void chooseDirectory1() throws IOException { listFile1.getItems().clear(); this.indicator.setProgress(0); DirectoryChooser dir = new DirectoryChooser(); dir.setTitle("Выбор"); File d = dir.showDialog(primaryStage); // if (d != null) { this.folderCache = d.getAbsolutePath(); double poi = 0.001; for (String s: d.list()) { poi = poi + 0.001; this.indicator.setProgress(poi); this.listFile1.getItems().add(s); } } // listFile1.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); listFile1.setEditable(true); }
/** * Функция выбора папки и присвоение списка файлов в list2 * @throws IOException */ @FXML public void chooseDirectory2() throws IOException { listFile2.getItems().clear(); this.indicator.setProgress(0); DirectoryChooser dir = new DirectoryChooser(); dir.setTitle("Выбор"); File d = dir.showDialog(primaryStage); // if (d != null) { this.folderCache = d.getAbsolutePath(); double poi = 0.001; for (String s: d.list()) { poi = poi + 0.001; this.indicator.setProgress(poi); this.listFile2.getItems().add(s); } } // listFile2.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); listFile2.setEditable(true);
this.initi(); }
/** * При нажатии на список файлов открываем файл и подгружаем текст * @param tEditEvent * @throws IOException */ @FXML public void readFile1(ListView.EditEvent tEditEvent) throws IOException { this.textarea1.clear(); String cs = listFile1.getSelectionModel().getSelectedItem(); this.target = folderCache + "/" + cs; this.textarea1.appendText(this.fileRead()); }
@FXML public void saveFile1() throws IOException { String save = this.textarea1.getText(); save = save.replace("******", "\t"); BufferedWriter out = new BufferedWriter(new FileWriter(target)); out.write(save); out.close(); }
public void initi() { tableUsers.setEditable(true);
tableUsers.getColumns().addAll();
idColumn.setCellValueFactory(new PropertyValueFactory<TableQuest, Integer>("id")); loginColumn.setCellValueFactory(new PropertyValueFactory<TableQuest, String>("login")); passwordColumn.setCellValueFactory(new PropertyValueFactory<TableQuest, String>("password")); emailColumn.setCellValueFactory(new PropertyValueFactory<TableQuest, String>("email"));
emailColumn.setCellFactory(TextFieldTableCell.<TableQuest>forTableColumn()); emailColumn.setOnEditCommit( new EventHandler<TableColumn.CellEditEvent<TableQuest, String>>() { @Override public void handle(TableColumn.CellEditEvent<TableQuest, String> t) { ((TableQuest) t.getTableView().getItems().get( t.getTablePosition().getRow()) ).setEmail(t.getNewValue()); } } ); usersData.add(new TableQuest(1, "Alex", "qwerty", "[email protected]")); tableUsers.setItems(usersData);
}
/** * @return * @throws IOException */ public String fileRead() throws IOException { this.indicator.setProgress(0); // String str; String retText; StringBuilder sb = new StringBuilder(1024*1024); File file = new File(target); FileReader reader = new FileReader(file); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); // double poi = 0.0002; while ((str = br.readLine()) != null) { poi = poi + 0.0002; this.indicator.setProgress(poi); sb.append(str + "\n"); }
retText = sb.toString(); retText = retText.replace("\t", "******"); return retText; }
/** * @param args */ public static void main(String[] args) { launch(args); }
}
|
Программка просто открывает и сохраняет файлы (первая tab), а вот во второй tab пытаюсь сделать саму таблицу. p.s. Уже 3 дня вожусь с этим, перечитал все что можно.. Надеюсь выручите Это сообщение отредактировал(а) anrs - 14.2.2014, 17:49
|