powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX TableView
11 сообщений из 11, страница 1 из 1
JavaFX TableView
    #38920459
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Помогите пожалуйста разобраться с вопросом:
У меня есть нередактируемая таблица:
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
JavaFX TableView
    #38920473
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имхо нужно учиться код на форуме выделять, а не таблицы
...
Рейтинг: 0 / 0
JavaFX TableView
    #38920505
Hexe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R@mon, при помощи CSS

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

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

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


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

копай в сторону TableColumn-> CellFactory
...
Рейтинг: 0 / 0
JavaFX TableView
    #39172304
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, вернулся к задаче с данной задачи. Так и не нашел решения. Было предложение использовать 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
JavaFX TableView
    #39172317
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R@monПри клике программа должна определять BOLD или NORMAL шрифт у полей данной строки и менять на противоположный.
Подскажите как это реализовать?
Это основы проектирования: модель предметной области и представление нужно разделять.
UI это представление. Тип шрифта это тоже представление некой модели на устройстве вывода.
Так вот состояние данных это модель.
Bold/Plain шрифт это лишь один из способов отображения этой модели на UI.
Ваше "При клике" это очень размывчатая формулировка. Потому что при клике, происходит переход фокуса и выделение элемента. Ваш вопрос связан с фокусом или выделением? Если да, то нужно смотреть соответствующие модели. Если нет, то вам по клику нужно обновлять модель данных, а из модели данных через биндинг управлять отображением.
Вот тут пример того как к свойствам биндить стили
http://stackoverflow.com/questions/23705654/bind-font-size-in-javafx
...
Рейтинг: 0 / 0
JavaFX TableView
    #39175416
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пинайте сильно, я только учусь!
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
JavaFX TableView
    #39175427
R@mon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX TableView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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