JavaFX ile Ornek uygulama(TabMenu,ListView,ImageView,VBox,HBox)

javafx
  • Turgay Can
  • Tarih

    24 Jan, 2013
  • Yorum

    0
  • Görüntüleme

    3334
  • İndirme

    39

JavaFX ile Ornek uygulama(TabMenu,ListView,ImageView,VBox,HBox)

JavaFX ile ListView yapimi ve uygulamasi ile ListView ve üzerinde yapılabilecek implementasyonlardna basitçe bahsetmiştim. Bu uygulamayı baz olarak bir TabMenu içine yerleştirdim ve bir çok JavaFX bileşenini iç ice kullanılan basit bir uygulama daha geliştirdim. Bu uygulama ile daha fazla bileşenlerin bir biri ile etkileşimini pekiştirmeye çalışacağım.

Uygulama temel bazla bir TabPane ve buna bağlı olarak 2 alt başlık Öğrenci ve Ders olarak adlandırdım. Öğrenci tab'ının altında dizaynsal olarak düzgün bir şekilde oturtmak için SplitPane bileşenini kuıllandım ve SplitPane altında 2 tane AnchorPane oluşturdum. Böylelikle standart olarak tablo ve yanyana iki hüçre şeklinde bir dizayn elde etmiş oldum. Oluşturduğum AnchorPane 'ların için VBox ve HBox yerleştirip, istediğim dizaynı elde ettim.

KpFXTabMenu.fxml

<?xml version="1.0" encoding="UTF-8"?>
            <?import java.lang.*?>
            <?import java.util.*?>
            <?import javafx.geometry.*?>
            <?import javafx.scene.control.*?>
            <?import javafx.scene.image.*?>
            <?import javafx.scene.layout.*?>
            <?import javafx.scene.paint.*?>

            <fx:root type="javafx.scene.layout.AnchorPane" id="AnchorPane" maxHeight="-Infinity" 
        maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="459.0" prefWidth="612.0"
         xmlns:fx="http://javafx.com/fxm">l</a>" 
    fx:controller="kpfxtabmenu.KpFXTabMenuController">
              <children>
                <TabPane layoutX="0.0" layoutY="14.0" prefHeight="431.0" prefWidth="598.0"
     tabClosingPolicy="UNAVAILABLE">
                  <tabs>
                    <Tab fx:id="tab1" text="Öğrenci">
                      <content>
                        <SplitPane dividerPositions="0.6174496644295302" focusTraversable="true" 
    prefHeight="160.0"    prefWidth="200.0">
                          <items>
                            <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
                              <VBox fx:id="vBoxAna" alignment="TOP_LEFT" layoutX="0.0" layoutY="0.0"
     minHeight="-Infinity"
         minWidth="-Infinity" prefHeight="400.0">
                                <children>
                                  <Label fx:id="lblBaslik" alignment="TOP_LEFT" text="Ders Listesi" />
                                  <ListView fx:id="kpListView" blendMode="DARKEN" maxHeight="-Infinity"
     maxWidth="-Infinity" 
        minHeight="-Infinity" minWidth="-Infinity" prefHeight="290.0" prefWidth="327.0"
     VBox.vgrow="ALWAYS" />
                                  <Label id="txtYazi" fx:id="lblYaziEkle" text="Yazi giriniz.." />
                                  <TextField fx:id="txtEkle" maxWidth="327.0" prefWidth="100.0" />
                                  <HBox id="HBox" fx:id="hBoxButtons" alignment="CENTER" blendMode="DARKEN" 
    spacing="5.0">                             

          <children>
                                          <Button fx:id="btnEkle" mnemonicParsing="false" onAction="#listeyeEkle"
         text="Ekle" />
                                          <Button fx:id="btnSil" mnemonicParsing="false" onAction="#listedenSil"
         text="Sil" />
                                          <Button fx:id="btnOgrenciGoster" mnemonicParsing="false" 
onAction="#listedenSec"
         text="Göster" />
                                        </children>
                                        <padding>
                                          <Insets right="50.0" top="10.0" fx:id="x1a" />
                                        </padding>
                                      </HBox>
                                    </children>
                                    <padding>
                                      <Insets left="15.0" right="5.0" top="5.0" fx:id="x2a" />
                                    </padding>
                                  </VBox>
                                </AnchorPane>
                                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="150.0">
                                  <VBox fx:id="vBoxAna1a" alignment="TOP_RIGHT" layoutX="0.0" layoutY="0.0" 
        maxHeight="-Infinity"   maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" 
    prefHeight="231.0" prefWidth="211.0">
                                    <children>
                                      <ImageView fx:id="myImgView" fitHeight="150.0" fitWidth="140.0" 
pickOnBounds="true" 
            preserveRatio="true" VBox.vgrow="ALWAYS">
                                        <image>
                                          <Image url="@kp.jpg" />
                                    </image>
                                  </ImageView>
                                  <Label fx:id="lblList1Secilen" text="Seçilmedi." />
                                </children>
                              </VBox>
                            </AnchorPane>
                          </items>
                        </SplitPane>
                      </content>
                    </Tab>
                    <Tab fx:id="tab2" text="Ders">
                      <content>
                        <VBox fx:id="vBoxAna2" alignment="TOP_LEFT" minHeight="-Infinity"
 minWidth="-Infinity" prefHeight="423.0">
                          <children>
                            <Label fx:id="lblBaslik2" alignment="TOP_LEFT" text="Ders Listesi" />
                            <ListView fx:id="kpListView2" blendMode="DARKEN" maxHeight="-Infinity"
 maxWidth="-Infinity" 
        minHeight="-Infinity" minWidth="-Infinity" prefHeight="290.0" prefWidth="327.0" VBox.vgrow="ALWAYS" />
                            <Label id="txtYazi2" fx:id="lblYaziEkle2" text="Yazi giriniz.." />
                            <TextField fx:id="txtEkle2" maxWidth="327.0" prefWidth="100.0" />
                            <HBox id="HBox" fx:id="hBoxButtons2" alignment="CENTER" blendMode="DARKEN" 
    spacing="5.0">
                              <children>
                                <Button fx:id="btnEkle2" mnemonicParsing="false" onAction="#listeyeEkle2"
     text="Ekle" />
                                <Button fx:id="btnSil2" mnemonicParsing="false" onAction="#listedenSil2" 
    text="Sil" />
                                <Button fx:id="btnDersGoster" mnemonicParsing="false" text="Göster" />
                              </children>
                              <padding>
                                <Insets right="50.0" top="10.0" fx:id="x1" />
                              </padding>
                            </HBox>
                          </children>
                          <padding>
                            <Insets left="15.0" right="5.0" top="5.0" fx:id="x2" />
                          </padding>
                        </VBox>
                      </content>
                    </Tab>
                  </tabs>
                </TabPane>
              </children>
            </fx:root>

Kontrol sınıfı; Kontrol sınıfı içinde kodsal açıklamalar mevcuttur.
KpFXTabMenuController.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kpfxtabmenu;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
import jfx.messagebox.MessageBox;

/**
 *
 * @author turgay.can
 */
public class KpFXTabMenuController implements Initializable {

    @FXML
    private Button btnEkle, btnEkle2;
    @FXML
    private Button btnSil, btnSil2,btnOgrenciGoster;
    @FXML
    private HBox hBoxButtons, hBoxButtons2;
    @FXML
    private Label lblYaziEkle, lblYaziEkle2,lblList1Secilen;
    @FXML
    private ListView kpListView, kpListView2;
    @FXML
    private Label lblBaslik, lblBaslik2;
    @FXML
    private VBox vBoxAnai, vBoxAna2;
    @FXML
    private TextField txtEkle, txtEkle2;
    @FXML
    private ImageView myImgView;

    final ObservableList listItems = FXCollections.observableArrayList(
            "Listeye Öğrenci ekleyiniz..",
            "Metin Haneden",
            "Ahmet Kural",
            "Turgay Can",
            "Sadi Celil Cengiz",
            "Murat Cemcir");
    final ObservableList listItems2 = FXCollections.observableArrayList(
            "Listeye Ders ekleyiniz..",
            "Drama",
            "Java",
            "JavaFX",
            "J2EE",
            "EJB",
            "Spring");
    private Stage stage = null;

    //Ekle butonu ile tetiklenecek metod
    @FXML
    private void listeyeEkle(ActionEvent action) {
        if (txtEkle.getText() != null && txtEkle.getText().length() > 0) {
            listItems.add(txtEkle.getText());
            txtEkle.setText("");
        } else {
            //3. parti jfxmessagebox-1.1 kütüphanesi ile uyarı mesajı verdiriyoruz
            MessageBox.show(stage, "Metin kutusunu boş bırakmayınız..", "UYARI", 
MessageBox.ICON_INFORMATION);
        }
    }

    //Ekle2 butonu ile tetiklenecek metod
    @FXML
    private void listeyeEkle2(ActionEvent action) {
        if (txtEkle2.getText() != null && txtEkle2.getText().length() > 0) {
            listItems2.add(txtEkle2.getText());
            txtEkle2.setText("");
        } else {
            //3. parti jfxmessagebox-1.1 kütüphanesi ile uyarı mesajı verdiriyoruz
            MessageBox.show(stage, "Metin kutusunu boş bırakmayınız..", "UYARI", 
MessageBox.ICON_INFORMATION);
        }
    }

    //Sil butonu ile tetiklenecek metod
    @FXML
    private void listedenSil(ActionEvent action) {
        if (kpListView.getSelectionModel().getSelectedItem() != null) {
            //jfxmessagebox-1-1.0.jar üçüncü parti kütüphane olarak eklendi
            final int result = MessageBox.show(stage,
                    "Listeden silmek istediğinizden eminmisiniz?",
                    "UYARI",
                    MessageBox.ICON_QUESTION | MessageBox.OK | MessageBox.CANCEL);
            if (result == 65536) {
                if(kpListView.getSelectionModel().getSelectedIndex() >= 0){
                int selectedItem = kpListView.getSelectionModel().getSelectedIndex();
                listItems.remove(selectedItem);
                }else{
                    MessageBox.show(stage, "Listede silinecek eleman kalmadı!", "UYARI", 
MessageBox.ICON_INFORMATION);
                }
            }

        } else {
            //3. parti jfxmessagebox-1.1 kütüphanesi ile uyarı mesajı verdiriyoruz
            MessageBox.show(stage, "Listeden eleman seçiniz..", "UYARI", MessageBox.ICON_INFORMATION);
        }
    }

    //Sil2 butonu ile tetiklenecek metod
    @FXML
    private void listedenSil2(ActionEvent action) {
        if (kpListView2.getSelectionModel().getSelectedItem() != null) {
            //jfxmessagebox-1-1.0.jar üçüncü parti kütüphane olarak eklendi
            final int result = MessageBox.show(stage,
                    "Listeden silmek istediğinizden eminmisiniz?",
                    "UYARI",
                    MessageBox.ICON_QUESTION | MessageBox.OK | MessageBox.CANCEL);
            if (result == 65536) {
                int selectedItem = kpListView2.getSelectionModel().getSelectedIndex();
                listItems2.remove(selectedItem);
            }

        } else {
            //3. parti jfxmessagebox-1.1 kütüphanesi ile uyarı mesajı verdiriyoruz
            MessageBox.show(stage, "Listeden eleman seçiniz..", "UYARI", MessageBox.ICON_INFORMATION);
        }
    }

    static String path = "E:\\TOOLS\\Personal\\fx\\KpFXTabMenu\\src\\kpfxtabmenu\\";
     //Ekle2 butonu ile tetiklenecek metod
    @FXML
    private void listedenSec(ActionEvent action) {
        if (kpListView.getSelectionModel().getSelectedItem() != null 
                && kpListView.getSelectionModel().getSelectedItem().toString().length()>0) {
            lblList1Secilen.setText(kpListView.getSelectionModel().getSelectedItem().toString());
        } else {
            //3. parti jfxmessagebox-1.1 kütüphanesi ile uyarı mesajı verdiriyoruz
            MessageBox.show(stage, "Metin kutusunu boş bırakmayınız..", "UYARI", MessageBox.ICON_INFORMATION);
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
        kpListView.prefWidth(100);
        kpListView2.prefWidth(100);
        kpListView.setItems(listItems);
        kpListView2.setItems(listItems2);
        //Butonların etkinliği pasif etmek
        btnEkle.setDisable(true);
        btnSil.setDisable(true);
        //Butonların etkinliği pasif etmek
        btnEkle2.setDisable(true);
        btnSil2.setDisable(true);
        //TextField'ımızın içeriği değiştiğinde tetiklenecek metod
        txtEkle.focusedProperty().addListener(new ChangeListener() {
            public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {
                if (txtEkle.isFocused()) {
                    btnEkle.setDisable(false);
                }
            }
        });

        //TextField2'ımızın içeriği değiştiğinde tetiklenecek metod
        txtEkle2.focusedProperty().addListener(new ChangeListener() {
            public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {
                if (txtEkle2.isFocused()) {
                    btnEkle2.setDisable(false);
                }
            }
        });
        //ListView içindeki verinin değişmesi ile tetiklenecek metod
        kpListView.focusedProperty().addListener(new ChangeListener() {
            public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {
                if (kpListView.isFocused()) {
                    btnSil.setDisable(false);
                }
            }
        });
        //ListView2 içindeki verinin değişmesi ile tetiklenecek metod
        kpListView2.focusedProperty().addListener(new ChangeListener() {
            public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {
                if (kpListView2.isFocused()) {
                    btnSil2.setDisable(false);
                }
            }
        });

    }
}

Implementasyon sınıfı;
KpFXTabMenu.java

package kpfxtabmenu;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author turgay.can
 */
public class KpFXTabMenu extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("KpFXTabMenu.fxml"));

        Scene scene = new Scene(root);
        stage.setTitle("www.kodlapaylas.com | FX Tab Menu");
        stage.setScene(scene);
        stage.show();
    }

    /**
     * The main() method is ignored in correctly deployed JavaFX application.
     * main() serves only as fallback in case the application can not be
     * launched through deployment artifacts, e.g., in IDEs with limited FX
     * support. NetBeans ignores main().
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}

Çalıştırdığımızda muhtemel ekran çıktısı;

www.kodlapaylas.com
www.kodlapaylas.com
www.kodlapaylas.com

Keyifli kodlamalar.. Kaynak kodları ekleyeceğim.

0 Yorum..

Yorum yapmak için "Giriş yapın" yada "Misafir üye" olarak yorum yapabilirsiniz.

Yorum Yap