KodlaPaylas.com'a Hosgeldiniz.. 54.198.42.213

Pazartesi, 28 Temmuz 2014

Anasayfa

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


Sosyal Medyada Paylaş

JAVAFX > JavaFX ile ListView yapimi ve uygulamasi...

  1. Merhaba,

    FX ile bir uygulama geliştirdiğimizde verilerin listelenmesi, sunulması, düzenlenmesi gibi işlemlerde ListView bileşeni oldukça sık kullanılır. Bu makalemde ListView bileşenini bir örnek uygulama üzerinden anlatmaya çalışacağım.

    ListView bileşeni içinde verileri sunarken elemanlara saklamak, erişmek ve listede düzenleme yapmak için ObservableList sınıfından faydalanırız. Buna ek olarak, aşağıdaki örnek uygulama içerisinde arayüz(UI) ile arka plandaki ilgili sınıfın(controller) entegrasyonu, ekrandaki Button bileşeninin tetiklenlemesi Listener sınıfı ile ListView içindeki nesnenin seçilmesi gibi bir işlem sürkilasyonu uygulama içinde örnek kod ile anlatılmaktadır. Metodlar ile ilgili açıklamalar kod bloğu içinde açıklama(comment) olarak belirtilmiştir.

    Ek olarak kullanıcı bazlı uyarılar için FX için üçüncü parti bir kütüphane olan jfxmessagebox-1.1 kütüphanesini kullanmaktayım.

    KPFXListView.fxml

    <?xml version="1.0" encoding="UTF-8"?>
    
        <?import java.lang.*?>
        <?import java.util.*?>
        <?import javafx.scene.*?>
        <?import javafx.scene.control.*?>
        <?import javafx.scene.layout.*?>
    
        <AnchorPane id="AnchorPane" prefHeight="400" prefWidth="600" xmlns:fx="http://javafx.com/fxm" 
    fx:controller="kpfxlistview.KPFXListViewController">
            <children>
                <VBox fx:id="vBoxAna" alignment="TOP_CENTER" prefHeight="423.0" prefWidth="341.0" 
    AnchorPane.bottomAnchor="40.0" AnchorPane.leftAnchor="100.0" AnchorPane.rightAnchor="100.0"
     AnchorPane.topAnchor="20.0">
                    <children>
                        <Label fx:id="lblBaslik" alignment="TOP_LEFT" text="ListView Örnek"></Label>
                        <ListView fx:id="kpListView" prefHeight="200.0" prefWidth="200.0" />
                        <Label id="txtYazi" fx:id="lblYaziEkle" text="Yazı giriniz.." />
                        <TextField fx:id="txtEkle" prefWidth="200.0" />
                        <HBox id="HBox" fx:id="hBoxButtons" alignment="CENTER" spacing="5.0">
                            <children>
                                <Button fx:id="btnEkle" mnemonicParsing="false" onAction="#listeyeEkle" text="Ekle" />
                                <Button fx:id="btnSil" mnemonicParsing="false" onAction="#listedenSil" text="Sil" />
                            </children>
                        </HBox>
                    </children>
                </VBox>
            </children>
    </AnchorPane>
    

    Uygulamanın ana sınıfı ;
    KPFXListView.java

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package kpfxlistview;
    
    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 KPFXListView extends Application {
    
        @Override
        public void start(Stage stage) throws Exception {
            Parent root = FXMLLoader.load(getClass().getResource("KPFXListView.fxml"));
    
            Scene scene = new Scene(root);
            stage.setTitle("www.kodlapaylas.com | JavaFX ListView");
            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);
        }
    }
    

    Kontrol sınıfı;

    KPFXListViewController .java

    package kpfxlistview;
    
    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.ListView;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    import jfx.messagebox.MessageBox;
    
    /**
     *
     * @author turgay.can
     */
    public class KPFXListViewController implements Initializable {
    
        @FXML
        private Button btnEkle;
        @FXML
        private Button btnSil;
        @FXML
        private HBox hBoxButtons;
        @FXML
        private Label lblYaziEkle;
        @FXML
        private ListView kpListView;
        @FXML
        private Label lblBaslik;
        @FXML
        private VBox vBoxAna;
        @FXML
        private TextField txtEkle;
        final ObservableList listItems = FXCollections.observableArrayList(
                "Listeye metin ekleyiniz..",
                "www.kodlapaylas.com",
                "JavaFX 2.0+",
                "Turgay Can");
        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);
            }
        }
    
        //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) {
                    int selectedItem = kpListView.getSelectionModel().getSelectedIndex();
                    listItems.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);
            }
        }
    
        @Override
        public void initialize(URL url, ResourceBundle rb) {
            // TODO
            kpListView.setItems(listItems);
    
            //Butonların etkinliği pasif etmek
            btnEkle.setDisable(true);
            btnSil.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);
                        }
                    }
                });
    
                //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);
                        }
                    }
                });
    
            }
        }
    

    Uygulamayı çalıştırdığımızdaki alacağınız ekranlar ve işlevleri sırası ile aşağıdaki reismlerde mevcuttur.

    kodlapaylas.com
    kodlapaylas.com
    kodlapaylas.com
    kodlapaylas.com
    kodlapaylas.com

    Keyifli kodlamalar ve bol Java'lı günler ;)

    Uygulamayı İndir Bu uygulama şuana kadar 21 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