Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX TableView / 11 сообщений из 11, страница 1 из 1
29.03.2015, 17:23
    #38920459
R@mon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
Доброго времени суток!
Помогите пожалуйста разобраться с вопросом:
У меня есть нередактируемая таблица:
myTable.isEditable(false)
Хочу при выделении строки:
myTable.setOnMousePressed(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event){
if(event.isPrimaryButtonDown()&&event.getClickCount()==1){
System.out.println(myTable.getSelectionModel().getSelectedCells());
}
}
});
текст всех ячеек, данной строки, выделить жирным цветом.
Как это сделать?
...
Рейтинг: 0 / 0
29.03.2015, 18:09
    #38920473
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
имхо нужно учиться код на форуме выделять, а не таблицы
...
Рейтинг: 0 / 0
29.03.2015, 20:03
    #38920505
Hexe
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
R@mon, при помощи CSS

Код: css
1.
2.
3.
.table-row-cell:selected {  
    -fx-font-weight: bold;
}
...
Рейтинг: 0 / 0
29.03.2015, 20:04
    #38920506
R@mon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
rema174имхо нужно учиться код на форуме выделять, а не таблицы
При всем уважении, можно по делу, или не понятна моя задача?
...
Рейтинг: 0 / 0
29.03.2015, 21:36
    #38920541
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
R@mon,

при всем уважении, если бы вопрос был задан в такой форме на стаковерфлоу, то там бы уже заминусовали
...
Рейтинг: 0 / 0
29.03.2015, 21:59
    #38920544
R@mon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
HexeR@mon, при помощи CSS

Код: css
1.
2.
3.
.table-row-cell:selected {  
    -fx-font-weight: bold;
}


Теперь понимаю, что мой вопрос был неточным.
Мне бы хотелось получить такое поведение системы, когда при первом нажатии на строку, текст во всех ячейках данной строки становился bold (строка как бы выделялась), повторное нажатие на данную строку должно снимать выделение.
...
Рейтинг: 0 / 0
31.03.2015, 15:25
    #38922668
danatriel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
R@mon,

копай в сторону TableColumn-> CellFactory
...
Рейтинг: 0 / 0
16.02.2016, 14:29
    #39172304
R@mon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
Друзья, вернулся к задаче с данной задачи. Так и не нашел решения. Было предложение использовать setCellFactory. Действительно это работает, когда мы знаем по какому признаку менять настройку. Например у меня это работает при условии:
Код: java
1.
if (item.contains("@"))


Но это не совсем то, что я ожидал. Я бы хотел кликать в строку таблицы. При клике программа должна определять BOLD или NORMAL шрифт у полей данной строки и менять на противоположный.
Подскажите как это реализовать?
Вот код с примером:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
package ru;

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableCellTextColorExample extends Application {
  
  public static void main(String[] args) {
      Application.launch(args);
  }  

  @Override
  public void start(Stage stage) throws Exception {
    VBox vbox = new VBox();
    Scene scene = new Scene(vbox, 200, 200);
    stage.setTitle("Table View");
    stage.setWidth(400);
    stage.setHeight(500);


    TableView<TableData> myTable = new TableView<TableData>();
    ObservableList<TableData> myTableData =
      FXCollections.observableArrayList(new TableData("data", "data", "data"), new TableData("data", "data", "data"),
                                        new TableData("Name the song", "867-5309", "SomeEmail@gmail.com"));

    TableColumn firstColumn = new TableColumn("First Column");
    firstColumn.setCellValueFactory(new PropertyValueFactory<TableData, String>("one"));

    TableColumn secondColumn = new TableColumn("Second Column");
    secondColumn.setCellValueFactory(new PropertyValueFactory<TableData, String>("two"));

    TableColumn thirdColumn = new TableColumn("Third Column");
    thirdColumn.setCellValueFactory(new PropertyValueFactory<TableData, String>("three"));
    
    thirdColumn.setCellFactory(new Callback<TableColumn, TableCell>() {
      
      public TableCell call(TableColumn param) {
        
        return new TableCell<TableData, String>() {
          
          @Override
          public void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            if (!isEmpty()) {
              setText(item); 
              if (item.contains("@")){                
                this.setFont(Font.font(this.getFont().getName(), FontWeight.BOLD, this.getFont().getSize()));//NORMAL
              }                                            
            }
          }
        };
      }
    });
    
    myTable.setEditable(true);
    myTable.setOnMousePressed(new EventHandler<MouseEvent>(){
      @Override
      public void handle(MouseEvent event){
        //Хочу тут делать setFont для TableColumn всей строки        
      }
    });
    myTable.setItems(myTableData);
    myTable.getColumns().addAll(firstColumn, secondColumn, thirdColumn);

    vbox.getChildren().addAll(myTable);
    VBox.setVgrow(myTable, Priority.ALWAYS);

    stage.setScene(scene);
    stage.show();
  }
  
  public class TableData {
    SimpleStringProperty one, two, three;

    public TableData(String one, String two, String three) {
      this.one = new SimpleStringProperty(one);
      this.two = new SimpleStringProperty(two);
      this.three = new SimpleStringProperty(three);
    }

    public String getOne() {
      return one.get();
    }

    public void setOne(String one) {
      this.one.set(one);
    }

    public String getThree() {
      return three.get();
    }

    public void setThree(String three) {
      this.three.set(three);
    }

    public String getTwo() {
      return two.get();
    }

    public void setTwo(String two) {
      this.two.set(two);
    }
  }  
}
...
Рейтинг: 0 / 0
16.02.2016, 14:40
    #39172317
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
R@monПри клике программа должна определять BOLD или NORMAL шрифт у полей данной строки и менять на противоположный.
Подскажите как это реализовать?
Это основы проектирования: модель предметной области и представление нужно разделять.
UI это представление. Тип шрифта это тоже представление некой модели на устройстве вывода.
Так вот состояние данных это модель.
Bold/Plain шрифт это лишь один из способов отображения этой модели на UI.
Ваше "При клике" это очень размывчатая формулировка. Потому что при клике, происходит переход фокуса и выделение элемента. Ваш вопрос связан с фокусом или выделением? Если да, то нужно смотреть соответствующие модели. Если нет, то вам по клику нужно обновлять модель данных, а из модели данных через биндинг управлять отображением.
Вот тут пример того как к свойствам биндить стили
http://stackoverflow.com/questions/23705654/bind-font-size-in-javafx
...
Рейтинг: 0 / 0
19.02.2016, 16:02
    #39175416
R@mon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
Не пинайте сильно, я только учусь!
BlazkowiczВаш вопрос связан с фокусом или выделением?
Вопрос связан с выделением строки. Нашел что это делается добавлением слушателя:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    myTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TableData>(){
      @Override
      public void changed(ObservableValue<? extends TableCellTextColorExample.TableData> observableValue,
                          TableCellTextColorExample.TableData tableData,
                          TableCellTextColorExample.TableData tableData2) {        
        
        if(tableData2.getFontName().get()=="NORMAL"){
          tableData2.setFontName("BOLD");          
        }
        else{  
          tableData2.setFontName("NORMAL");          
        }        
      }
    });


Если я все верно понял, то:
Blazkowiczвам по клику нужно обновлять модель данных
Я добавил поле fontName и обновляю его в слушателе.
Остался вопрос с этим:
Blazkowiczа из модели данных через биндинг управлять отображением.
Как связать мое поле fontName с TableCell?
...
Рейтинг: 0 / 0
19.02.2016, 16:13
    #39175427
R@mon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX TableView
Blazkowicz,
Если сделать так, то работать будет, если мы дважды кликнем мышкой, т.е. запустим метод изменения данных.
Правильно ли я делаю, что смотрю в сторону setCellFactory как мне советовали? Или нужно как-то иначе обновлять представление моей модели?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    thirdColumn.setCellFactory(new Callback<TableColumn, TableCell>() {
      
      public TableCell call(TableColumn param) {
        
        return new TableCell<TableData, String>() {          

          @Override
          public void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            if (!isEmpty()) {
              setText(item);
              if (myTable.getSelectionModel().selectedItemProperty().isNotNull().get()) {                
                if(myTable.getSelectionModel().selectedItemProperty().getValue().getFontName().get()=="NORMAL"){
                  this.setFont(Font.font(this.getFont().getName(), FontWeight.NORMAL, this.getFont().getSize()));
                }
                else{
                  this.setFont(Font.font(this.getFont().getName(), FontWeight.BOLD, this.getFont().getSize()));
                }
              }         
            }
          }
        };
      }
    });
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX TableView / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]