KodlaPaylas.com'a Hosgeldiniz.. 54.196.204.42

Perşembe, 24 Temmuz 2014

Anasayfa

Anasayfa'ya dön..kodlapaylas.com »


Sosyal Medyada Paylaş

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

  1. 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.

    Uygulamayı İndir Bu uygulama şuana kadar 22 defa indirilmiştir.

    Java/J2EE Developer, FX Enthusiast,Open Sourcer, Newbei Android Developer, Trabzonspor Fan

    Etiketler (Tags)

    Bu yazı defa görüntülenmiştir.

Yorumlar

Uye Yorumlari

Yorum yazabilmeniz için üye olup, giriş yapmalısınız!
Üye olmak yada giriş yapmak için tıklayınız.

Benzer Yazılar