Форум

Data.BG Форуми: Java fx - променливи - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Java fx - променливи

#1
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
Здравейте, имам следния въпрос, създавам си две променливи "а" , "b" от тип double един TextField и един бутон. Проблема ми е, че когато въведа две стойности в текстовото поле последвано с интервал и натисна бутона програмата "гърми". Ако въведа една стойност примерно 1 то за а и b получавам едно. Но ако избера 1 интервал 1 не ми позволява. Ако го правя конзолно няма никакъв проблем въвеждам стойностите и всичко работи. Много ми е интересно как би станало в тази ситуация. Благодаря ви за отделеното време.


double a = Double.valueOf(text.getText());
double b = Double.valueOf(text.getText());

label..textProperty().bind(Bindings.format("a= %f and b=%f ", a, b));
0

#2
Потребителят е неактивен   avenge 

  • Група: Потребители
  • Мнения: 1480
  • Регистриран: 07-June 05
  • Репутация: 411
  • Пол:Мъж
  • Град:Шумен
Ако беше качил и кода да го видим?
0

#3
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
Извинявам се

Stage stage = new Stage ();
Group root = new Group ();
Scene scene = new Scene (root);

TextField text1 = new TextField ();

Label lab = new Label ();
lab.setLayoutX(60);
lab.setLayoutY(60);

Button but = new Button ("result");
but.setLayoutX(250);
but.setLayoutY(0);
but.setMinHeight(20);
but.setMinWidth(140);

but.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {

double a = Double.valueOf(text1.getText());
double b = Double.valueOf(text1.getText());


lab.textProperty().bind(Bindings.format("a= %f and b= %f ", a, b));

root.getChildren().addAll(text1, but, lab);
stage.show();
stage.setScene(scene);
stage.setHeight(660);
stage.setWidth(700);

}
});
0

#4
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
Някакви идеи :)
0

#5
Потребителят е неактивен   brigadier 

  • Група: Потребители
  • Мнения: 1101
  • Регистриран: 25-December 05
  • Репутация: 247
Байндинга се прави от Property към Property - примитивите не са Observable

Пробвай със

DoubleProperty а = new SimpleDoubleProperty();
DoubleProperty b = new SimpleDoubleProperty();

и после подобно на примера - http://www.java2s.co...dingsformat.htm
0

#6
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
Не се получава това което искам, искам в текстовото поле TextField, да въведа две числа последвано с интервал и като натисна "result" числата да се отпечатат на прозореца.

DoubleProperty a = new SimpleDoubleProperty();
DoubleProperty b = new SimpleDoubleProperty();

StringExpression lab3 = Bindings.format("%f,%f", a, b);

System.out.println(lab3.get());

Каквато и стойност да въведа, на конзолата получавам 0;
0

#7
Потребителят е неактивен   brigadier 

  • Група: Потребители
  • Мнения: 1101
  • Регистриран: 25-December 05
  • Репутация: 247
Принципът е - вземаш някаква стойност, вкарваш я в Property , а после пропъртито обновява стойност другаде, в зависимост как си го вързал.

Ако беше с 2 бутона, щеше да е:
a.setValue(парснатия String в първото поле след цъкане на бутона)
b.setValue(парснатия String във второто поле след цъкане на бутона)

Ако искаш да ги вкарваш наведнъж, първо трябва да разбиеш стринга на парчета:
String[] values = text1.getText().split("\\s");
a.setValue(Double.parseDouble(values[0]));
b.setValue(Double.parseDouble(values[1]));

Ти в момента не подаваш никакви стойности и ти вади сбора от 0 по default.
0

#8
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен

Преглед на мнениеbrigadier, на 07.08.17 - 14:33, каза:

Принципът е - вземаш някаква стойност, вкарваш я в Property , а после пропъртито обновява стойност другаде, в зависимост как си го вързал.

Ако беше с 2 бутона, щеше да е:
a.setValue(парснатия String в първото поле след цъкане на бутона)
b.setValue(парснатия String във второто поле след цъкане на бутона)

Ако искаш да ги вкарваш наведнъж, първо трябва да разбиеш стринга на парчета:
String[] values = text1.getText().split("\\s");
a.setValue(Double.parseDouble(values[0]));
b.setValue(Double.parseDouble(values[1]));

Ти в момента не подаваш никакви стойности и ти вади сбора от 0 по default.


Благодаря, сега се получи. Нещата са малко по различни в сравнение с това да извеждам резултати на конзолата.
0

#9
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
Малко ми е неудобно с DoubleProperty, защото не мога да използвам математическите знаци. Например за равно трябва да напиша - a.equals(b);, а не "a = b;". Така ми е малко некомфортно :chuckle:
0

#10
Потребителят е неактивен   brigadier 

  • Група: Потребители
  • Мнения: 1101
  • Регистриран: 25-December 05
  • Репутация: 247
Пропъртито е само кутия, в която се слагат примитиви и обекти, за да може да се ползва Observable. Ако ти трябват действия със самите стойности, те се вадят първо с getValue() . Ако ти трябва за разширяване на байндинга, може да се ползват директно методите от NumberExpressionBase. Става нещо като :

table.placeholderProperty().bind(
new When(new SimpleIntegerProperty(0)
.isEqualTo(table.getVisibleLeafColumns().size()))
.then(new When(new SimpleIntegerProperty(0)
.isEqualTo(table.getItems().size()))
.then(new Label("No columns and data exist."))
.otherwise(new Label("No columns exist.")))
.otherwise(new When(new SimpleIntegerProperty(0)
.isEqualTo(table.getItems().size()))
.then(new Label("No data exist."))
.otherwise((Label)null)));
0

#11
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
Благодаря
0

#12
Потребителят е неактивен   mitak88 

  • Група: Потребители
  • Мнения: 47
  • Регистриран: 13-June 14
  • Репутация: 0
  • Пол:Мъж
  • Град:Плевен
За да мога да използвам математическите знаци добавих doubleValue()

DoubleProperty a = new SimpleDoubleProperty();
DoubleProperty b = new SimpleDoubleProperty();

String[] values = text.getText().split("\\s");
a.setValue(Double.parseDouble(values[0]));
b.setValue(Double.parseDouble(values[1]));

if(a.doubleValue() == b.doubleValue())
{
lab.setText ("a = b");
}
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login