$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
$subject = $name;
// To send HTML mail, the Content-type header must be set.
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From:' . $email. "\r\n"; // Sender's Email
//$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
$template = '<div style="padding:50px; color:white;">Hello ,<br/>'
. '<br/><br/>'
. 'Name:' .$name.'<br/>'
. 'Email:' .$email.'<br/>'
. '<br/>'
. '</div>';
$sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
// Message lines should not exceed 70 characters (PHP rule), so wrap it.
$sendmessage = wordwrap($sendmessage, 70);
// Send mail by PHP Mail Function.
mail($reciver, $subject, $sendmessage, $headers);
echo "Your Query has been received, We will contact you soon.";
} else {
echo "<span>* invalid email *</span>";
}
Подход к решению
Для решения этой проблемы рекомендуется использовать фабрику cell .
listViewOfWords.setCellFactory(param -> new ListCell<Word>() {
@Override
protected void updateItem(Word item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null || item.getWord() == null) {
setText(null);
} else {
setText(item.getWord());
}
}
});
Пример приложения
import javafx.application.Application;
import javafx.collections.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
public class CellFactories extends Application {
@Override
public void start(Stage stage) {
ObservableList<Word> wordsList = FXCollections.observableArrayList();
wordsList.add(new Word("First Word", "Definition of First Word"));
wordsList.add(new Word("Second Word", "Definition of Second Word"));
wordsList.add(new Word("Third Word", "Definition of Third Word"));
ListView<Word> listViewOfWords = new ListView<>(wordsList);
listViewOfWords.setCellFactory(param -> new ListCell<Word>() {
@Override
protected void updateItem(Word item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null || item.getWord() == null) {
setText(null);
} else {
setText(item.getWord());
}
}
});
stage.setScene(new Scene(listViewOfWords));
stage.show();
}
public static class Word {
private final String word;
private final String definition;
public Word(String word, String definition) {
this.word = word;
this.definition = definition;
}
public String getWord() {
return word;
}
public String getDefinition() {
return definition;
}
}
public static void main(String[] args) {
launch(args);
}
}
Замечания по реализации
Хотя вы можете переопределить toString в вашем классе Word, чтобы предоставить строковое представление слова, предназначенного для представления в вашем ListView, я бы рекомендовал предоставить фабрику ячеек в ListView для извлечения данных вида из объекта слова и представления его в вашем ListView. Используя этот подход, вы получаете разделение проблем, поскольку вы не привязываете графическое представление вашего объекта Word к его текстовому методу toString; поэтому toString может продолжать иметь другой вывод (например, полную информацию о полях Word с именем слова и описанием для целей отладки). Кроме того, фабрика ячеек более гибкая, так как вы можете применять различные графические узлы для создания визуального представления ваших данных за пределами прямой текстовой строки (если вы хотите это сделать).
Кроме того, в качестве стороннего , Я рекомендую сделать ваши объекты Word неизменяемыми объектами , удалив их сеттеры. Если вам действительно нужно изменить сами слова-объекты, тогда лучший способ справиться с ними - открыть видимые свойства для полей объекта. Если вы также хотите, чтобы ваш пользовательский интерфейс обновлялся по мере изменения наблюдаемых свойств ваших объектов, вам необходимо, чтобы ваши ячейки списка знали об изменениях связанных элементов, прослушивая их изменения (что довольно сложно в этом дело). Обратите внимание, что список, содержащий слова, уже наблюдается, и ListView позаботится об обработке изменений в этом списке, но если вы изменили определение слова для экземпляра в отображаемом объекте слова, тогда ваше представление списка не подберет изменения в определение без соответствующей логики слушателя на фабрике ячеек ListView.
То, что отображает ваш ListView на данный момент, - это toString () Word. Чтобы исправить вашу проблему, просто добавьте следующий метод в свой класс Word (это только пример):
@Override
public String toString(){
return (this.word + " --- Definition: " + this.definition);
}
Я поставил бы вас в никель, что ListView вызывает метод toString () в Word. Если вы не переопределили его, он использует метод toString () по умолчанию, который просто выводит эту ... не очень полезную информацию. Переустановите его для вывода красиво отформатированной строки, и вам должно быть хорошо, чтобы идти!
toString()
возвращал нечто иное, чем вы хотите отображать в пользовательском интерфейсе.
– James_D
16 April 2016 в 02:10