{"id":2336,"date":"2022-07-07T12:53:14","date_gmt":"2022-07-07T04:53:14","guid":{"rendered":"http:\/\/localhost\/bpoint\/?p=2336"},"modified":"2022-07-07T12:53:14","modified_gmt":"2022-07-07T04:53:14","slug":"javafx-tableview%e8%87%aa%e8%a8%82%e7%be%a9%e6%8e%92%e5%ba%8f","status":"publish","type":"post","link":"https:\/\/bpoint.space\/?p=2336","title":{"rendered":"JavaFX TableView\u81ea\u8a02\u7fa9\u6392\u5e8f"},"content":{"rendered":"<p>package funcion;<\/p>\n<p>import java.util.Comparator;<\/p>\n<p>import javafx.application.Application;<br \/>\nimport javafx.beans.property.SimpleStringProperty;<br \/>\nimport javafx.collections.FXCollections;<br \/>\nimport javafx.collections.ObservableList;<br \/>\nimport javafx.geometry.Insets;<br \/>\nimport javafx.scene.Group;<br \/>\nimport javafx.scene.Scene;<br \/>\nimport javafx.scene.control.Label;<br \/>\nimport javafx.scene.control.TableColumn;<br \/>\nimport javafx.scene.control.TableView;<br \/>\nimport javafx.scene.control.cell.PropertyValueFactory;<br \/>\nimport javafx.scene.layout.VBox;<br \/>\nimport javafx.scene.text.Font;<br \/>\nimport javafx.stage.Stage;<br \/>\nimport javafx.util.Callback;<\/p>\n<p>\/**200921-GDK-tableview\u81ea\u8a02\u7fa9\u6392\u5e8f\u7bc4\u4f8b-\u6578\u5b57\u683c\u5f0f\u5316\u6392\u5e8f*\/<br \/>\npublic class TableViewCostumerSort extends Application {<\/p>\n<p>    private TableView table = new TableView();<br \/>\n    private ExtraPerson extraPerson = new ExtraPerson(&#8220;Ninja Village&#8221;);<\/p>\n<p>    private final ObservableList data = FXCollections<br \/>\n            .observableArrayList(<br \/>\n                    new Person(&#8220;Jacob&#8221;, &#8220;1,111&#8221;, &#8220;jacob.smith@example.com&#8221;),<br \/>\n                    new Person(&#8220;Isabella&#8221;, &#8220;1,123&#8221;,<br \/>\n                            &#8220;isabella.johnson@example.com&#8221;),<br \/>\n                    new Person(&#8220;Ethan&#8221;, &#8220;111&#8221;,<br \/>\n                            &#8220;ethan.williams@example.com&#8221;),<br \/>\n                    new Person(&#8220;Emma&#8221;, &#8220;222,222&#8221;, &#8220;emma.jones@example.com&#8221;),<br \/>\n                    new Person(&#8220;Michael&#8221;, &#8220;312&#8221;, &#8220;michael.brown@example.com&#8221;),<br \/>\n                    extraPerson);<\/p>\n<p>    public static void main(String[] args) {<br \/>\n        launch(args);<br \/>\n    }<\/p>\n<p>    @Override<br \/>\n    public void start(Stage stage) {<br \/>\n        Scene scene = new Scene(new Group());<br \/>\n        stage.setTitle(&#8220;Table View Sample&#8221;);<br \/>\n        stage.setWidth(450);<br \/>\n        stage.setHeight(500);<\/p>\n<p>        final Label label = new Label(&#8220;Address Book&#8221;);<br \/>\n        label.setFont(new Font(&#8220;Arial&#8221;, 20));<\/p>\n<p>        table.setEditable(true);<\/p>\n<p>        TableColumn firstNameCol = new TableColumn(&#8220;First Name&#8221;);<br \/>\n        firstNameCol.setMinWidth(100);<br \/>\n        firstNameCol<br \/>\n                .setCellValueFactory(new PropertyValueFactory(<br \/>\n                        &#8220;firstName&#8221;));<\/p>\n<p>        TableColumn moneyCol = new TableColumn(&#8220;Money&#8221;);<br \/>\n        moneyCol.setMinWidth(100);<br \/>\n        moneyCol<br \/>\n                .setCellValueFactory(new PropertyValueFactory(<br \/>\n                        &#8220;Money&#8221;));<\/p>\n<p>        TableColumn emailCol = new TableColumn(&#8220;Email&#8221;);<br \/>\n        emailCol.setMinWidth(200);<br \/>\n        emailCol.setCellValueFactory(new PropertyValueFactory(<br \/>\n                &#8220;email&#8221;));<\/p>\n<p>        \/**<br \/>\n         * Adding comparator to extraPerson<br \/>\n         * \u8986\u5bebsort\u5224\u65b7<br \/>\n         *\/<\/p>\n<p>        table.sortPolicyProperty().set(<br \/>\n                new Callback&lt;TableView, Boolean&gt;() {<\/p>\n<p>                    \/*\u81ea\u52d5\u751f\u6210*\/<br \/>\n                    @Override<br \/>\n                    public Boolean call(TableView param) {<br \/>\n                        Comparator comparator = new Comparator() {<br \/>\n                            @Override<br \/>\n                            public int compare(Person r1, Person r2) {<\/p>\n<p>                                \/*\u8cc7\u6599\u5f62\u5f0f\u8f49\u63db*\/<br \/>\n                                double r1_d = 0.0;<br \/>\n                                double r2_d = 0.0;<br \/>\n                                    if (param.getComparator() != null) {<br \/>\n                                        r1_d = Double.parseDouble(r1.getMoney().replaceAll(&#8220;,&#8221;, &#8220;&#8221;).trim());<br \/>\n                                        r2_d = Double.parseDouble(r2.getMoney().replaceAll(&#8220;,&#8221;, &#8220;&#8221;).trim());<br \/>\n                                    }<\/p>\n<p>                                \/*\u8cc7\u6599\u7a7a\u503ctry-catch*\/<br \/>\n                                String col_s = &#8220;&#8221;;<br \/>\n                                String _sort_s = &#8220;&#8221;;<\/p>\n<p>                                try {<br \/>\n                                    col_s = param.getSortOrder().get(0).getText();<br \/>\n                                    _sort_s = param.getSortOrder().get(0).getSortType().toString();<br \/>\n                                } catch (java.lang.IndexOutOfBoundsException e) {<br \/>\n                                    System.out.println(e);<br \/>\n                                }<\/p>\n<p>                                \/*\u8a2d\u5b9a\u9078\u53d6Money\u6b04\u4f4d\u6642\u52d5\u4f5c*\/<br \/>\n                                if (col_s.equals(&#8220;Money&#8221;) &amp;&amp; !col_s.equals(&#8220;&#8221;)) {<br \/>\n                                    if (_sort_s.equals(&#8220;ASCENDING&#8221;)) {<br \/>\n                                        if (r1_d &gt; r2_d) {<br \/>\n                                            \/* 0&amp;-1\u662f\u4e0d\u6392\u5e8f1\u662f\u6392\u5e8f *\/<br \/>\n                                            return 1;<br \/>\n                                        } else if (r1_d &lt; r2_d) {<br \/>\n                                            \/* 0&amp;-1\u662f\u4e0d\u6392\u5e8f1\u662f\u6392\u5e8f *\/<br \/>\n                                            return -1;<br \/>\n                                        } else if (param.getComparator() == null) {<br \/>\n                                            \/* 0&amp;-1\u662f\u4e0d\u6392\u5e8f1\u662f\u6392\u5e8f *\/<br \/>\n                                            return 0;<br \/>\n                                        } else {<br \/>\n                                            \/*\u9810\u8a2d\u5224\u65b7*\/<br \/>\n                                            return param.getComparator().compare(r1, r2);<br \/>\n                                        }<br \/>\n                                    } else if (_sort_s.equals(&quot;DESCENDING&quot;)) {<br \/>\n                                        if (r1_d  r2_d) {<br \/>\n                                            \/* 0&amp;-1\u662f\u4e0d\u6392\u5e8f1\u662f\u6392\u5e8f *\/<br \/>\n                                            return -1;<br \/>\n                                        } else if (param.getComparator() == null) {<br \/>\n                                            \/* 0&amp;-1\u662f\u4e0d\u6392\u5e8f1\u662f\u6392\u5e8f *\/<br \/>\n                                            return 0;<br \/>\n                                        } else {<br \/>\n                                            \/*\u9810\u8a2d\u5224\u65b7*\/<br \/>\n                                            return param.getComparator().compare(r1, r2);<br \/>\n                                        }<br \/>\n                                    } else {<br \/>\n                                        \/*\u9810\u8a2d\u5224\u65b7*\/<br \/>\n                                        return param.getComparator().compare(r1, r2);<br \/>\n                                    }<br \/>\n                                } else {<br \/>\n                                    try {<br \/>\n                                        \/*\u9810\u8a2d\u5224\u65b7*\/<br \/>\n                                        return param.getComparator().compare(r1, r2);<br \/>\n                                    } catch (java.lang.NullPointerException e) {<br \/>\n                                        \/*\u6392\u5e8f*\/<br \/>\n                                        System.out.println(e);<br \/>\n                                        return 0;<br \/>\n                                    }<br \/>\n                                }<\/p>\n<p>                            }<br \/>\n                        };<\/p>\n<p>                        \/*\u9810\u8a2d\u8907\u5beb\u72c0\u614b\u6210\u7acb*\/<br \/>\n                        FXCollections.sort(table.getItems(), comparator);<br \/>\n                        return true;<br \/>\n                    }<br \/>\n                });<\/p>\n<p>        table.setItems(data);<br \/>\n        table.getColumns().addAll(firstNameCol, moneyCol, emailCol);<br \/>\n        \/\/ table.getColumns().hashCode();<br \/>\n        final VBox vbox = new VBox();<br \/>\n        vbox.setSpacing(5);<br \/>\n        vbox.setPadding(new Insets(10, 0, 0, 10));<br \/>\n        vbox.getChildren().addAll(label, table);<\/p>\n<p>        ((Group) scene.getRoot()).getChildren().addAll(vbox);<\/p>\n<p>        stage.setScene(scene);<br \/>\n        stage.show();<br \/>\n    }<\/p>\n<p>    public static class Person {<\/p>\n<p>        private final SimpleStringProperty firstName;<br \/>\n        private final SimpleStringProperty money;<br \/>\n        private final SimpleStringProperty email;<\/p>\n<p>        private Person(String fName, String money, String email) {<br \/>\n            this.firstName = new SimpleStringProperty(fName);<br \/>\n            this.money = new SimpleStringProperty(money);<br \/>\n            this.email = new SimpleStringProperty(email);<br \/>\n        }<\/p>\n<p>        public String getFirstName() {<br \/>\n            return firstName.get();<br \/>\n        }<\/p>\n<p>        public void setFirstName(String fName) {<br \/>\n            firstName.set(fName);<br \/>\n        }<\/p>\n<p>        public String getMoney() {<br \/>\n            return money.get();<br \/>\n        }<\/p>\n<p>        public void setMoney(String Money) {<br \/>\n            money.set(Money);<br \/>\n        }<\/p>\n<p>        public String getEmail() {<br \/>\n            return email.get();<br \/>\n        }<\/p>\n<p>        public void setEmail(String Email) {<br \/>\n            email.set(Email);<br \/>\n        }<br \/>\n    }<\/p>\n<p>    public static class ExtraPerson extends Person {<\/p>\n<p>        private final SimpleStringProperty address;<\/p>\n<p>        private ExtraPerson(String address) {<br \/>\n            super(&#8220;Itachi&#8221;, &#8220;333&#8221;, &#8220;leaf@village.ninja&#8221;);<br \/>\n            this.address = new SimpleStringProperty(address);<br \/>\n        }<\/p>\n<p>        public String getAddress() {<br \/>\n            return address.get();<br \/>\n        }<\/p>\n<p>        public void setAddress(String address) {<br \/>\n            this.address.set(address);<br \/>\n        }<\/p>\n<p>    }<br \/>\n}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>package funcion; import java.util.Comparator; import ja [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[45],"class_list":["post-2336","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-45"],"_links":{"self":[{"href":"https:\/\/bpoint.space\/index.php?rest_route=\/wp\/v2\/posts\/2336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bpoint.space\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bpoint.space\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bpoint.space\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/bpoint.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2336"}],"version-history":[{"count":0,"href":"https:\/\/bpoint.space\/index.php?rest_route=\/wp\/v2\/posts\/2336\/revisions"}],"wp:attachment":[{"href":"https:\/\/bpoint.space\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bpoint.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bpoint.space\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}