Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматическое создание TableView и заполнение 
:(
    Опции темы
anrs
Дата 14.2.2014, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Доброго здравия. Нужна помощь в реализации динамичных таблиц. 

Суть проста, имеется файл со словами разбитыми через \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 дня вожусь с этим, перечитал все что можно.. Надеюсь выручите smile

Это сообщение отредактировал(а) anrs - 14.2.2014, 17:49
PM MAIL   Вверх
cube
Дата 15.2.2014, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 1
Всего: 3



вы читаете файл построчно, со всеми махинациями (со словами разбитыми через \t. Требуется считать количество слов в линию и создать столько же столбцов, а потом добавлять последующие строки в таблицу). На каждой разобранной строке вы создаете new TableQuest(....); и добавляете его в ваш usersData (ObservableList<TableQuest> )


Код

//Используйте ObservableList для модели (хотите добавляйте сразу)

    private ObservableList<TableQuest> data =
        FXCollections.observableArrayList(
            new TableQuest(1, "Fisrt"),
            new TableQuest(2, "Second")
        );
...........
//Создайте колонки и привяжите их к полям класса TableQuest
        TableColumn rowNubmer = new TableColumn("N");
        firstNameCol.setMinWidth(10);
        firstNameCol.setCellValueFactory(
                new PropertyValueFactory<TableQuest, Integer>("rowNumber"));

        TableColumn nameColumn = new TableColumn("name");
        firstNameCol.setMinWidth(200);
        firstNameCol.setCellValueFactory(
                new PropertyValueFactory<TableQuest, String>("name"));

...............
// Добавьте данные в таблицу
       table.setItems(data);
// Добавьте колонки
       table.getColumns().addAll(rowNubmer , nameColumn);

............
//динамически изменяйте data
        for(int i=0;i<100;++i)
           data.add(new TableQuest(i, "Test"));
//добаляйте, удаляйте, очищайте - свобода выбора


  


Нужно создать и добавить другую таблицу, так создайте и добавьте например anotherTable туда куда вам надо, например в ((Group) scene.getRoot()).getChildren().addAll(anotherTable);


Это сообщение отредактировал(а) cube - 15.2.2014, 23:02
PM MAIL   Вверх
anrs
Дата 16.2.2014, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Благодарю за помощь! Сейчас опробую
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0695 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.