Текст книги "Java Code"
Автор книги: Алексей Крючков
Жанр: Программирование, Компьютеры
Возрастные ограничения: +12
сообщить о неприемлемом содержимом
Текущая страница: 1 (всего у книги 3 страниц)
Введение
В этой небольшой книге собраны самые разные java-исходники, которые могут быть полезны начинающим программистам. Здесь вы найдете примеры кода как для android-приложений, так и для десктопных java-программ. Искренне надеюсь, что этот сборник поможет вам создавать интересные и полезные приложения!
Внимание! Для удобного просмотра скопируйте код в любой редактор с подсветкой синтаксиса.
AlertDialog(android)
Вызывается окно с некоторым сообщением(«сообщение») и кнопками «ДА», «НЕТ» и «ЗАКРЫТЬ».
AlertDialog.Builder b=new AlertDialog.Builder(this);
b.setTitle(«Сообщение»);
b.setMessage(«сообщение»);
b.setCancelable(true);
b.setNegativeButton(«НЕТ»,new DialogInterface.OnClickListener(){
public void onClick(DialogInterface di, int id){
di.cancel();
t.setText(«Нет»);
}
});
b.setPositiveButton(«ДА»,new DialogInterface.OnClickListener(){
public void onClick(DialogInterface di,int id){
di.cancel();
t.setText(«Да»);
}
});
b.setNeutralButton(«ЗАКРЫТЬ»,new DialogInterface.OnClickListener(){
public void onClick(DialogInterface di,int id){
di.cancel();
t.setText(«Закрыть»);
}
});
AlertDialog ad=b.create();
ad.show();
Метод для сбора средств
Можно использовать кошелек Яндекс.Денег. По срабатыванию метода launchBrowser стартует дефолтный браузер с загруженной визиткой в сервисе Яндекс.Деньги.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
launchBrowser(«money.yandex.ru/to/номер_кошелька»);
}
private void launchBrowser(String uriStr) {
Desktop d;
if (Desktop.isDesktopSupported()) {
d = Desktop.getDesktop();
if (d.isSupported(Desktop.Action.BROWSE)) {
URI uri;
try {
uri = new URI(«http://» + uriStr);
d.browse(uri);
}
catch (IOException | URISyntaxException ioe) {
JOptionPane.showMessageDialog(null,"ERROR!","WARNING",JOptionPane.ERROR_MESSAGE);
}
}
}
}
Метод для отправки писем
Запускает почтовый клиент с уже заполненным полем адресата.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
launchMail(edit.getText());
}
private void launchMail(String mailTo) {
Desktop d;
if (Desktop.isDesktopSupported()) {
d = Desktop.getDesktop();
if (d.isSupported(Desktop.Action.MAIL)) {
URI uriMailTo;
try {
if (mailTo.length() > 0) {
uriMailTo = new URI(«mailto», mailTo, null);
d.mail(uriMailTo);
} else {
d.mail();
}
}
catch (IOException | URISyntaxException ioe) {
JOptionPane.showMessageDialog(null,"ERROR!","WARNING",JOptionPane.ERROR_MESSAGE);
}
}
}
}
Логика для калькулятора ИМТ(Индекса Массы Тела)
Практически готовый калькулятор ИМТ. Может определять границы нормального веса, а также тип телосложения.
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
float rost,ves,i,index;
String s,st,str;
try{
rost=Float.parseFloat(jTextField1.getText());
ves=Float.parseFloat(jTextField2.getText());
i=Float.parseFloat(jTextField3.getText());
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Введите допустимые значения во все поля","ОШИБКА!",JOptionPane.ERROR_MESSAGE);
return;
}
rost=rost/100;
index=ves/(rost*rost);
index=index*(pol/i);
st=discriminator(n,i);
str=normalMass(i, rost, pol);
if(index<16)s="Дефицит массы";
else if(index>=16&&index<20)s="Недостаточный вес";
else if(index>=20&&index<25)s="Норма";
else if(index>=25&&index<30)s="Предожирение";
else if(index>=30&&index<35)s="Первая степень ожирения";
else if(index>=35&&index<40)s="Вторая степень ожирения";
else s="Морбидное ожирение";
jTextArea1.setText(st+"nBMI="+String.valueOf(index)+"(«+s+»)n"+str);
}
String discriminator(int a,float b){
String s="";
switch(a){
case 0:
if(b<18)s="Пол: мужской.nТип телосложения: астенический.";
else if(b>=18&&b<=20)s="Пол: мужской.nТип телосложения: нормостенический.";
else s="Пол: мужской.nТип телосложения: гиперстенический.";
break;
case 1:
if(b<15)s="Пол: женский.nТип телосложения: астенический.";
else if(b>=15&&b<=17)s="Пол: женский.nТип телосложения: нормостенический.";
else s="Пол: женский.nТип телосложения: гиперстенический.";
break;
default:
break;
}
return s;
}
String normalMass(float x,float y,float z){
float im=x*(y*y)/z;
return «Нижняя граница нормального веса: „+20*im+“ кгnВерхняя граница нормального веса: „+25*im+“ кг»;
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextArea1.setText("");
}
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
n++;
switch(n){
case 1:
jButton4.setText(«женский»);
pol=16;
break;
case 2:
jButton4.setText(«мужской»);
pol=19;
n=0;
break;
}
}
Открытие записи через FileChooser
Открывает окно выбора файла. Метод readerFile – чтение из файла(см. ниже).
@FXML
private void openItem(ActionEvent event) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(«Открытие записи»);
fileChooser.setInitialDirectory(new File(path));
File file = fileChooser.showOpenDialog(null);
if (file != null) {
t.setText(readerFile(file.getAbsolutePath()));
label3.setText(file.getName());
}
}
Сохранение записи через FileChooser
То же самое, что и в предыдущем примере, только для записи файла. Код неизвестных методов приводится ниже.
@FXML
private void saveItem(ActionEvent event){
if("".equals(t.getText())){
toast(«Ничего нет для сохранения»);
return;
}
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(«Сохранение записи»);
fileChooser.setInitialDirectory(new File(path));
fileChooser.setInitialFileName(dateToDay(«Запись_от_dd_MMMM_yyyy_в_HH-mm-ss»));
File file = fileChooser.showSaveDialog(null);
if (file != null) {
recordInFile(t.getText(),file.getAbsolutePath(),false);
if(«все заметки».equals(file.getName()))return;
recordInFile(«n»+file.getName()+" («+dayOfWeek()+»)"+"n"+
t.getText(),path+System.getProperty(«file.separator»)+"все заметки", true);
label3.setText(file.getName());
}
}
Чтение и запись файла
void recordInFile(String text,String fileName,boolean b){
try(FileWriter sw = new FileWriter(fileName,b)) {
sw.write(text+"n");
if(!b)
toast(«Запись сохранена»);
}catch(Exception e){
toast(«Ошибка записи файла»);
}
}
String readerFile(String s){
String str,f="";
try{
File file=new File(s);
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
while((str = br.readLine()) != null){
f+=str+"n";
}
}catch(IOException e){
toast(«Ошибка чтения файла»);
}
return f;
}
Окно выхода из программы
@FXML
private void exitItem(ActionEvent event){
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle(«ВЫХОД»);
alert.setHeaderText(«Выход из программы»);
alert.setContentText(«Вы действительно хотите выйти из программы?»);
Optional<ButtonType> resultAlert = alert.showAndWait();
if (resultAlert.get() == ButtonType.OK){
System.exit(0);
}
}
Определение даты и дня недели
String dateToDay(String s){
Calendar calendar=new GregorianCalendar();
SimpleDateFormat sdf = new SimpleDateFormat(s);
return sdf.format(calendar.getTime());
}
String dayOfWeek(){
Calendar calendar = Calendar.getInstance();
String s="";
switch(calendar.get(Calendar.DAY_OF_WEEK)){
case 1:
s="воскресенье";
break;
case 2:
s="понедельник";
break;
case 3:
s="вторник";
break;
case 4:
s="среда";
break;
case 5:
s="четверг";
break;
case 6:
s="пятница";
break;
case 7:
s="суббота";
break;
default:
break;
}
return s;
}
Всплывающее сообщение как в Android(Toast)
Этот метод можно встретить в вышеприведенных примерах. Попробуйте его в своих проектах и получите практически полную копию всплывающего сообщения как в android.
void toast(String toastMsg){
Stage toastStage=new Stage();
toastStage.setResizable(false);
toastStage.initStyle(StageStyle.TRANSPARENT);
Text text = new Text(toastMsg);
text.setFont(Font.font(«Verdana», 20));
text.setFill(Color.WHITE);
StackPane root = new StackPane(text);
root.setStyle(«-fx-background-radius: 10; -fx-background-color: rgba(0, 0, 0, 0.2); -fx-padding: 20px;»);
root.setOpacity(0);
Scene scene = new Scene(root);
scene.setFill(Color.BLACK);
toastStage.setScene(scene);
toastStage.show();
Timeline tl1 = new Timeline();
KeyFrame fadeInKey1 = new KeyFrame(Duration.millis(500), new KeyValue (toastStage.getScene().getRoot().opacityProperty(), 1));
tl1.getKeyFrames().add(fadeInKey1);
tl1.setOnFinished((ae) ->
{
new Thread(() -> {
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.getMessage();
}
Timeline tl2 = new Timeline();
KeyFrame fadeOutKey1 = new KeyFrame(Duration.millis(500), new KeyValue (toastStage.getScene().getRoot().opacityProperty(), 0));
tl2.getKeyFrames().add(fadeOutKey1);
tl2.setOnFinished((aeb) -> toastStage.close());
tl2.play();
}).start();
});
tl1.play();
}
Генератор арифметического примера
String arithSchema1(){
int a,b,c,d;
Random random=new Random();
do {
a=random.nextInt(100)+1;
b=random.nextInt(100)+1;
c=random.nextInt(1000)+1;
d=random.nextInt(100)+2;
result=a+b-c/d;
}while (c%d!=0||c==d);
return a+"+"+b+"-"+c+"/"+d;
}
Генератор уравнения
Как и вышеприведенный пример может пригодиться при разработке какого-нибудь учебно-тренировочного приложения. Например, можно разработать программу для тестирования по математике и включить в нее этот код.
String equatSchema1(){
int a,b,c,d,r;
Random random=new Random();
do {
a=random.nextInt(100)+1;
b=random.nextInt(100)+1;
c=random.nextInt(1000)+1;
d=random.nextInt(100)+2;
r=a+b-c/d;
result=d;
}while (c%d!=0||c==d);
return a+"+"+b+"-"+c+"/x"+"="+r;
}
Чтение из внутреннего файла
String readerInstruction(){
String str,f="";
try {
InputStream is = ClassLoader.getSystemResourceAsStream(«res/textes/имя_файла.txt»);
InputStreamReader isr = new InputStreamReader(is,Charset.forName(«UTF-8»));
try (BufferedReader br = new BufferedReader(isr)) {
while((str=br.readLine())!=null){
f+=str+"n";
}
}
}
catch (IOException e){
e.getMessage();
}
return f;
}
Окно сообщения
void showMessage(String s,String s1,String s2){
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(s2);
alert.setHeaderText(s1);
TextArea ta = new TextArea(s);
ta.setEditable(false);
ta.setWrapText(true);
ta.setMaxWidth(Double.MAX_VALUE);
ta.setMaxHeight(Double.MAX_VALUE);
GridPane.setVgrow(ta, Priority.ALWAYS);
GridPane.setHgrow(ta, Priority.ALWAYS);
GridPane gp = new GridPane();
gp.setMaxWidth(Double.MAX_VALUE);
gp.add(ta, 0, 0);
alert.getDialogPane().setContent(gp);
alert.showAndWait();
}
Или еще вариант попроще:
void alertWindow(String s1,String s2,String str){
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(str);
alert.setHeaderText(s1);
alert.setContentText(s2);
alert.showAndWait();
}
Создание директории и определение операционной системы
void dirCreator(String fPath){
File file=new File(fPath);
if(!file.exists())file.mkdir();
}
Это Windows?
boolean isWindows() {
String os = System.getProperty(«os.name»).toLowerCase();
return (os.contains(«win»));
}
Еще вариант посложнее и поуниверсальней:
public class Discriminator {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
if(isWindows()){
System.out.println("Это Windows.n Версия: " + getOSVerion());
}else if(isMac()){
System.out.println("Это Mac OS.n Версия: " + getOSVerion());
}else if(isUnix ()){
System.out.println("Это BSD или GNU/Linux.n Версия: " + getOSVerion());
}else{
System.out.println(«Неизвестная система»);
}
}
public static boolean isWindows(){
String os = System.getProperty(«os.name»).toLowerCase();
//windows
return (os.contains(«win»));
}
public static boolean isMac(){
String os = System.getProperty(«os.name»).toLowerCase();
//Mac
return (os.contains(«mac»));
}
public static boolean isUnix (){
String os = System.getProperty(«os.name»).toLowerCase();
//linux or unix
return (os.contains(«nix») || os.contains(«nux»));
}
public static String getOSVerion() {
String os = System.getProperty(«os.version»);
return os;
}
}
SplashScreen(android)
Заставка для приложения.
package kalexal.kaa.advices;
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class Splash extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent=new Intent(Splash.this,MainActivity.class);
startActivity(intent);
finish();
}
},3000);
}
}
SplashScreen для десктопного приложения
public class Splash extends Application{
static SplashScreen mySplash;
public static void main(String[] args) throws Exception
{
mySplash=SplashScreen.getSplashScreen();
try
{
Thread.sleep(5000);
}
catch (InterruptedException ex)
{
ex.getMessage();
}
if (mySplash != null){
mySplash.close();
launch(ClassName.class, args);
}
}
@Override
public void start(Stage primaryStage) throws Exception {
throw new UnsupportedOperationException(«Not supported yet.»);
}
}
Проверка корректности ввода даты
Может проверять високосность года.
boolean inputCorrect(int n,int m,int l){
int days=0;
switch (l) {
case 1:
days = 30;
break;
case 2:
if (m % 4 == 0 && m % 100 != 0 || m % 400 == 0) days = 29;
else days = 28;
break;
case 3:
days = 31;
break;
case 4:
days = 30;
break;
case 5:
days = 31;
break;
case 6:
days = 30;
break;
case 7:
days = 31;
break;
case 8:
days = 31;
break;
case 9:
days = 30;
break;
case 10:
days = 31;
break;
case 11:
days = 30;
break;
case 12:
days = 31;
break;
default:
break;
}
if(l<1||l>12){
JOptionPane.showMessageDialog(null,"Некорректный номер месяца! Проверьте соответствие введённых данных.","ВНИМАНИЕ!",JOptionPane.WARNING_MESSAGE);
month.requestFocus();
return true;
}
else if (n>days||n==0){
JOptionPane.showMessageDialog(null,"Некорректное число месяца! Проверьте соответствие введённых данных.","ВНИМАНИЕ!",JOptionPane.WARNING_MESSAGE);
day.requestFocus();
return true;
}else if (m==0||m<1000||m>9999){
JOptionPane.showMessageDialog(null,"Номер года вне диапазона! Номер года должен быть в диапазоне от 1000 до 9999 включительно.","ВНИМАНИЕ!",JOptionPane.WARNING_MESSAGE);
year.requestFocus();
return true;
}else {
return false;
}
}
Генератор паролей
Может создавать пароли как из встроенных наборов символов, хранящихся в файле «combinations», так и из пользовательских наборов.
@FXML
private void passwordGenerateButton(ActionEvent event) {
int pasLength=0,pasQuantitet;
String argument,pas,multiPas="";
if(isNullInField(e1.getText())){
alertWindow("", «Укажите длину пароля.», «Ошибка»);
e1.requestFocus();
return;
}
if(isNullInField(e2.getText())){
alertWindow("", «Укажите количество паролей.», «Ошибка»);
e2.requestFocus();
return;
}
try{
pasLength=Integer.parseInt(e1.getText());
pasQuantitet=Integer.parseInt(e2.getText());
}catch(NumberFormatException ex){
ex.getMessage();
alertWindow(«Некорректные данные!», «Введите целое число!», «Внимание!»);
if(pasLength==0){
e1.requestFocus();
}
else {
e2.requestFocus();
}
return;
}
if(pasLength<1||pasLength>1000){
alertWindow("", «Длина пароля должна быть от 1 до 1000 символов.», «Ошибка»);
e1.requestFocus();
return;
}
if(pasQuantitet<1||pasQuantitet>100){
alertWindow("", «Количество паролей должно быть от 1 до 100», «Ошибка»);
e2.requestFocus();
return;
}
if(isNullInField(e.getText())){
argument=combinationsReader(cb.getSelectionModel().getSelectedIndex()+1);
}else{
argument=e.getText();
}
for(int i=0;i<pasQuantitet;i++){
pas=passwordCreator(argument,pasLength);
if("".equals(pas)){
alertWindow(«Некорректный символ!», «Удалите все пробелы!»,"Внимание!");
e.requestFocus();
return;
}
multiPas+=pas+"n";
}
text.setText(multiPas);
}
boolean isNullInField(String sField){
return sField==null||sField.trim().length()==0;
}
String passwordCreator(String s,int q){
String str="";
Random r=new Random();
char[]masSymbols=s.toCharArray();
for (int i=0;i<s.length();i++){
if (masSymbols[i]==' '){
return "";
}
}
for (int i=0;i<q;i++){
str+=masSymbols[r.nextInt(s.length())]+"";
}
return str;
}
String combinationsReader(int m){
String str="";
try {
InputStream is = ClassLoader.getSystemResourceAsStream(«res/textes/combinations»);
InputStreamReader isr = new InputStreamReader(is);
try (BufferedReader reader = new BufferedReader(isr)) {
for (int i=0;i<m;i++){
str=reader.readLine();
}
}
}
catch (IOException ex){
ex.getMessage();
}
return str;
}
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.