JavaFX ile ListView yapimi ve uygulamasi

javafx
  • Turgay Can
  • Tarih

    23 Jan, 2013
  • Yorum

    6
  • Görüntüleme

    2507
  • İndirme

    24

JavaFX ile ListView yapimi ve uygulamasi

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 ;)

6 Yorum..

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

minik bir yorum.

  • Misafir
  • 06 Dec, 2015 09:01:39

adfkjsdn fsdf sdf sdf

  • Misafir
  • 06 Dec, 2015 08:47:53

yorum -> yorum - > yorumladım!

  • Misafir
  • 04 Dec, 2015 09:28:19

turgay yest sdfsdf

  • Misafir
  • 23 Nov, 2015 12:35:48

test tekrar yorum..

  • Misafir
  • 23 Nov, 2015 12:33:59

test to comment..

  • Misafir
  • 23 Nov, 2015 12:31:06

Yorum Yap