From c86bc67c5eef63c2f7e94118296486aa4966d438 Mon Sep 17 00:00:00 2001 From: Sherwin Price Date: Tue, 17 Feb 2026 22:35:34 -0500 Subject: [PATCH] update project. --- .classpath | 18 +++ .../executionHistory/executionHistory.bin | Bin 93429 -> 93429 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/9.3.1/fileHashes/fileHashes.bin | Bin 24297 -> 24297 bytes .gradle/9.3.1/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../9.3.1/fileHashes/resourceHashesCache.bin | Bin 19245 -> 19279 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .project | 11 ++ .settings/org.eclipse.jdt.core.prefs | 5 + readme.txt | 68 +++++++++ ...iewController.java => ViewController.java} | 50 ++++--- .../java/edu/bookocontacts/model/Address.java | 106 ++++++++++++++ .../java/edu/bookocontacts/model/Contact.java | 131 ++++++++++++++++++ .../edu/bookocontacts/model/EmailAddress.java | 52 +++++++ .../edu/bookocontacts/{ => model}/Person.java | 5 +- .../{ => model}/PersonFactory.java | 6 +- .../edu/bookocontacts/model/PhoneNumber.java | 51 +++++++ src/main/resources/media/TableView.fxml | 2 +- 19 files changed, 479 insertions(+), 26 deletions(-) create mode 100644 .classpath create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 readme.txt rename src/main/java/edu/bookocontacts/{TableViewController.java => ViewController.java} (81%) create mode 100644 src/main/java/edu/bookocontacts/model/Address.java create mode 100644 src/main/java/edu/bookocontacts/model/Contact.java create mode 100644 src/main/java/edu/bookocontacts/model/EmailAddress.java rename src/main/java/edu/bookocontacts/{ => model}/Person.java (90%) rename src/main/java/edu/bookocontacts/{ => model}/PersonFactory.java (89%) create mode 100644 src/main/java/edu/bookocontacts/model/PhoneNumber.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..5dea8e9 --- /dev/null +++ b/.classpath @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/.gradle/9.3.1/executionHistory/executionHistory.bin b/.gradle/9.3.1/executionHistory/executionHistory.bin index 401fdd6f8cf83dc7832818643e1d4cdc3f6733ea..22f042b9a9030cbbe8a9a5f95773d6aaf4308420 100755 GIT binary patch delta 1054 zcmex*llALO)(tmi+drROWL9dLRal;%QIwLGm7JcGoL-h#Y?Pm$R4QQm@Akv)=xC#Q z{as6MFuO&k8hv0POe_7$)1AbT>Csu2aluKPI9S4gquWs+jZ|q-70TjEbxv*0ISBy9^;>zl0c}EPY`{HIAF#K5ac_yn=V~x?NHb1=Yfg%WU!3 zc*B-4=tBO>u2WYEPyZ4WVP_LS7ulSc?9Q@%sRUyfn?Py2N3Y_u(ED{)*m*^EDa@EG zcT8cswmf4FvtaJ-v)7+B%6nfbC z!an)UMj@{KU{wvGjI$;?t{0gsvq_xg04O5Vtr?YA4t@Kyb-S-M;}gc{D`0h()-!@U zA~9j2F$0769tH;SEg+09jY=gH|C5TpTyuGu`Sb}Inntn$=pvgZ-VNuR9J0_;06p|3 zJ3g1(9_r3m!A3;7oX#?tw_ITQ4=zTr?Owr*a~MU!JKlxK&p&DXO{nm~lv^tNF(g8+TfED(#u9xK?+%v=SrV_Qy($(TwuwVfyY2DAYFh zGJ(QKz-=<)bG_-^DvbI%#%U&|8I`FyRYj@EWrE}#4Yog1VLT?nI%_Q`R1R*?VqFDheb`{caUR4nek?ROaiiE|hmDe~7eE4& z<2D*`TmrF-FA0OC)@_u83M}CU3;aF8KKac?A+F0{RSlwyvnD&P7nv-xNu1^C+6z6? z)vXzoSRQPd*0c2TF(gbh{S}6#taPNdl(qRw}3Fdl&iS%Q4`Be!2(09|DB#Jk~~(@Rnr-G!J1&;xL?<8#UFq3(k+b4uFc5_nI$R diff --git a/.gradle/9.3.1/executionHistory/executionHistory.lock b/.gradle/9.3.1/executionHistory/executionHistory.lock index 6e8ec09ba8b2e5735f18aa064e8890cc9f5f7716..6d9f647ec20fd0d6fc71869cb3bffbfcb65eb8da 100755 GIT binary patch literal 17 UcmZSXH>umx74fHr0RlDw05#SH4FCWD literal 17 UcmZSXH>umx74fHr0Rk2R05!z~`~Uy| diff --git a/.gradle/9.3.1/fileHashes/fileHashes.bin b/.gradle/9.3.1/fileHashes/fileHashes.bin index e39a5838025e8fa62993d7d80124274c28e94cb6..761bfc0f1aa09a9eae65eb4deb612c8faf261e20 100755 GIT binary patch delta 333 zcmaF4m+|FZ#trEaEP1`JoHl1iXfU#*?b)q7**riG#L%3a31L`Io(*BxOg;-?*iHTq zV;Ba4728ivhA_*H-3O%=V)Q{) zMozAe1?!2JyfIeKE^W{5C|(S-Axb~o+FrMg?GFQlb?Um`kPSUg(+^!@$rzWh2Nq0I-;Os{jB1 delta 336 zcmaF4m+|FZ#trEaEWV}7UT@Bh&|qXqoFX=BvUz|Wh_PyNCWLW*@@xp>!sN3M#-+*s zVGP4Su;R;;lOc?&lfOpku_PXyl`vU78q7%F92p%2GFn`3a$z_~wYdJ|*dQpQAI4CO zfr`|}LKz!l_3RRNEQ@D=fJ+Pv40^^43=EnK3=E1OED-zDKqVll?%I#er&^08CSG7* zV4RbgcGfUjD+#e#ta|F{Y#$%B!#hb2{&vP}4I@Mcr r4r12wtjVk6q*OLdQ;`aucR%Xw`i7bhM|pf9k}EjD#&u7b4l)h^^)PPM diff --git a/.gradle/9.3.1/fileHashes/fileHashes.lock b/.gradle/9.3.1/fileHashes/fileHashes.lock index 1329746d711968239aa2ca7ae4c04ec57109ceec..260adc6b0ffa3f1510bd09630aacd86de9db7bb7 100755 GIT binary patch literal 17 VcmZS1rUpCa%QyLsQ5#Cqrn5w&5j;# mn3Rke7#JiO7#IXWSfGv3;j7U-mn3se`Gf2(JWLD>3~~UCgBKY9 delta 35 rcmX>org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature + + + 1771249637326 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..9f6d62b --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=ignore +org.eclipse.jdt.core.compiler.codegen.targetPlatform=25 +org.eclipse.jdt.core.compiler.compliance=25 +org.eclipse.jdt.core.compiler.source=25 diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..17eab94 --- /dev/null +++ b/readme.txt @@ -0,0 +1,68 @@ +Project is build as gradle root and child projects. +Gradle handles build and run of program using AspectJ Java runtime. + +Build Environment: +JDK25, +Eclipse 4.38 with Gradle Buildship or VSCode with Extension Pack for Java; vscjava.vscode-java-pack( 0.30.5 ) +AspectJ 1.9.25+ +OpenJFX (** https://gluonhq.com/products/javafx/ **) + This java UI sdk requires you download windows/linux/Mac JMODs libs to your workspace on your host. + refer to the launch.json file, and add the directory location for the jmods you downloaded. + +In Eclipse import project as an Gradle Project. + +Tests with ASPECTJ: + on windows: + gradlew.bat run + / or on linux: + sh ./gradlew edu.addressbook.view:run + AspectJ Referee component will call the Game plays. + + +schema + +CREATE TABLE contact ( +contact_id NUMBER PRIMARY KEY, +first_name TEXT, +last_name TEXT +); + +CREATE TABLE phone ( +contact_id NUMBER FOREIGN KEY, +phone_no TEXT +); + +CREATE TABLE emailaddress ( +contact_id NUMBER FOREIGN KEY, +email TEXT +); + +CREATE TABLE address ( +contact_id NUMBER FOREIGN KEY, +street TEXT, +city TEXT, +state TEXT, +zip TEXT +); + +CREATE TABLE note ( +contact_id NUMBER FOREIGN KEY, +note TEXT +); + +CREATE TABLE activity ( +activity_id NUMBER FOREIGN KEY, +activity_type TEXT, +activity_note TEXT +); + +CREATE TABLE contact_activity ( +activity_id NUMBER FOREIGN KEY, +contact_id NUMBER FOREIGN KEY +); + +CREATE TABLE friends ( +contact_id NUMBER FOREIGN KEY, +friend_contact_id NUMBER FORIEGN KEY +); + diff --git a/src/main/java/edu/bookocontacts/TableViewController.java b/src/main/java/edu/bookocontacts/ViewController.java similarity index 81% rename from src/main/java/edu/bookocontacts/TableViewController.java rename to src/main/java/edu/bookocontacts/ViewController.java index 3392899..bb37565 100755 --- a/src/main/java/edu/bookocontacts/TableViewController.java +++ b/src/main/java/edu/bookocontacts/ViewController.java @@ -4,9 +4,14 @@ */ package edu.bookocontacts; +import java.util.logging.Level; +import java.util.logging.Logger; + +import edu.bookocontacts.model.Person; +import edu.bookocontacts.model.PersonFactory; + import java.net.URL; import java.util.Collections; -import java.util.List; import java.util.Comparator; import java.util.ResourceBundle; import javafx.beans.value.ChangeListener; @@ -29,7 +34,9 @@ import javafx.scene.image.ImageView; * FXML Controller class * */ -public class TableViewController implements Initializable { +public class ViewController implements Initializable { + + Logger logger = Logger.getLogger(getClass().getName()); @FXML private TableView personView = new TableView<>(); @@ -53,30 +60,38 @@ public class TableViewController implements Initializable { private ImageView upImg = new ImageView(new Image("/media/up.png")); private ImageView downImg = new ImageView(new Image("/media/down.png")); - List rawPersons = PersonFactory.getAllPersons(); - ObservableList persons = FXCollections.observableArrayList(rawPersons); - int pageCount = 5; - int itemsPerPage = 4; - int currentPageIndex = 0; - boolean order = true; + + private ObservableList persons = null; + + private int pageCount = 5; + private int itemsPerPage = 4; + private int currentPageIndex = 0; + private boolean order = true; + + private void log(String message){ + logger.log(Level.FINE, message); + } /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { - System.out.println("initialize"); + log("initialize"); + persons = FXCollections.observableArrayList(PersonFactory.getAllPersons()); + log(String.format("Person size: %d" , persons.size())); + sort(); initializeTable(); pageCount = getPageCount(persons.size(), itemsPerPage); - System.out.println("pageCount=" + pageCount); + log("pageCount=" + pageCount); pagination.setPageCount(pageCount); pagination.currentPageIndexProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) { - System.out.println("Pagination Changed from " + oldValue + " , to " + newValue); + log("Pagination Changed from " + oldValue + " , to " + newValue); currentPageIndex = newValue.intValue(); updatePersonView(); } @@ -101,28 +116,27 @@ public class TableViewController implements Initializable { if (order) { Collections.reverse(persons); } - System.out.println(" order = " + order + "; data = " + persons); + log(" order = " + order + "; data = " + persons); order = !order; id.setGraphic((order) ? upImg : downImg); updatePersonView(); - System.out.println(" comparator called"); + log(" comparator called"); } }); } private void sort() { - //persons.sort((Person p1, Person p2) -> p1.id.compareTo(p2.id)); Collections.sort(persons, new Comparator() { @Override public int compare(Person t, Person t1) { - System.out.println(" comparator called"); + log(" comparator called"); return t.getId().compareTo(t1.getId()); } }); } public void updatePersonView() { - System.out.println("updatePersonView"); + log("updatePersonView"); personView.getItems().setAll(persons.subList(currentPageIndex * itemsPerPage, ((currentPageIndex * itemsPerPage + itemsPerPage <= persons.size()) ? currentPageIndex * itemsPerPage + itemsPerPage : persons.size()))); } @@ -135,7 +149,7 @@ public class TableViewController implements Initializable { personViewNameCol.sortTypeProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue paramObservableValue, SortType paramT1, SortType paramT2) { - System.out.println("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2); + log("NAME Clicked -- sortType = " + paramT1 + ", SortType=" + paramT2); id.setGraphic(null); } }); @@ -164,7 +178,7 @@ public class TableViewController implements Initializable { private int getPageCount(int totalCount, int itemsPerPage) { float floatCount = Float.valueOf(totalCount) / Float.valueOf(itemsPerPage); int intCount = totalCount / itemsPerPage; - System.out.println("floatCount=" + floatCount + ", intCount=" + intCount); + log("floatCount=" + floatCount + ", intCount=" + intCount); return ((floatCount > intCount) ? ++intCount : intCount); } } diff --git a/src/main/java/edu/bookocontacts/model/Address.java b/src/main/java/edu/bookocontacts/model/Address.java new file mode 100644 index 0000000..8d7e86c --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/Address.java @@ -0,0 +1,106 @@ +package edu.bookocontacts.model; + +public final class Address{ + + String street; + String city; + String state; + String zip; + + public Address() { + } + + public Address(String street, String city, String state, String zip) { + this.street = street; + this.city = city; + this.state = state; + this.zip = zip; + } + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((street == null) ? 0 : street.hashCode()); + result = prime * result + ((city == null) ? 0 : city.hashCode()); + result = prime * result + ((state == null) ? 0 : state.hashCode()); + result = prime * result + ((zip == null) ? 0 : zip.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Address other = (Address) obj; + if (street == null) { + if (other.street != null) + return false; + } else if (!street.equals(other.street)) + return false; + if (city == null) { + if (other.city != null) + return false; + } else if (!city.equals(other.city)) + return false; + if (state == null) { + if (other.state != null) + return false; + } else if (!state.equals(other.state)) + return false; + if (zip == null) { + if (other.zip != null) + return false; + } else if (!zip.equals(other.zip)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ \"Address\":{"); + sb.append("\"street\": \"" + street + "\","); + sb.append("\"city\": \"" + city + "\","); + sb.append("\"state\": \"" + state + "\","); + sb.append("\"zip\": \"" + zip + "\""); + sb.append("}}"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/edu/bookocontacts/model/Contact.java b/src/main/java/edu/bookocontacts/model/Contact.java new file mode 100644 index 0000000..f0254bd --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/Contact.java @@ -0,0 +1,131 @@ +package edu.bookocontacts.model; + +import java.io.IOException; + +/** + * Concrete account data class for account json storage record. + * Collects account attributes, and hash instance to enforce uniqueness. + */ +public class Contact { + private Integer contact_id = null; + private String phone_number; + private Address mailing_address; + private EmailAddress email_address; + + public Contact() { + + } + + public Contact( + String phone_number, + Address mailing_address, + EmailAddress email_address) throws IllegalArgumentException { + this.phone_number = phone_number; + this.mailing_address = mailing_address; + this.email_address = email_address; + + if (phone_number == null) { + throw new IllegalArgumentException(String.format("%s %s", "Account: requires phone number", + mailing_address.toString())); + } + if (mailing_address == null) { + throw new IllegalArgumentException(String.format("%s %s", "Account: requires mailing address", + phone_number.substring(phone_number.length() - 4))); + } + if (email_address == null) { + throw new IllegalArgumentException(String.format("%s %s", "Account: requires phone number", + mailing_address.toString())); + } + + this.phone_number = phone_number; + this.mailing_address = mailing_address; + this.email_address = email_address; + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("{ \"Account\":{"); + sb.append("\"account_number\": \"").append(contact_id).append("\","); + sb.append("\"phone_number\": \"").append(phone_number).append("\","); + sb.append("\"mailing_address\": ").append(mailing_address).append(","); + sb.append("\"email_address\": ").append(email_address).append(","); + sb.append("}}"); + return sb.toString(); + } + + public static void Write(Contact acct) throws IOException { + } + + public String getPhone_number() { + return phone_number; + } + + public void setPhone_number(String phone_number) { + this.phone_number = phone_number; + } + + public Address getMailing_address() { + return mailing_address; + } + + public void setMailing_address(Address mailing_address) { + this.mailing_address = mailing_address; + } + + public EmailAddress getEmail_address() { + return email_address; + } + + public void setEmail_address(EmailAddress email_address) { + this.email_address = email_address; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((contact_id == null) ? 0 : contact_id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Contact other = (Contact) obj; + if (contact_id == null) { + if (other.contact_id != null) + return false; + } else if (!contact_id.equals(other.contact_id)) + return false; + return true; + } + + public boolean checkValid() throws IllegalArgumentException { + if (email_address == null) { + throw new IllegalArgumentException( + String.format("not valid, email_address %s", this.contact_id)); + } + if (phone_number == null) { + throw new IllegalArgumentException( + String.format("not valid, phone_number: %s", this.contact_id)); + } + if (getMailing_address() == null) { + throw new IllegalArgumentException( + String.format("not valid, mailing_address: %s", this.contact_id)); + } + return true; + } + + public void update(Contact acct) { + this.setEmail_address(acct.email_address); + this.setPhone_number(acct.phone_number); + this.setMailing_address(acct.mailing_address); + } +} \ No newline at end of file diff --git a/src/main/java/edu/bookocontacts/model/EmailAddress.java b/src/main/java/edu/bookocontacts/model/EmailAddress.java new file mode 100644 index 0000000..1c8cc16 --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/EmailAddress.java @@ -0,0 +1,52 @@ +package edu.bookocontacts.model; + +public class EmailAddress{ + String email_address; + + public EmailAddress(String email_address) { + this.email_address = email_address; + } + + public String getEmail_address() { + return email_address; + } + + public void setEmail_address(String email_address) { + this.email_address = email_address; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((email_address == null) ? 0 : email_address.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + EmailAddress other = (EmailAddress) obj; + if (email_address == null) { + if (other.email_address != null) + return false; + } else if (!email_address.equals(other.email_address)) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ \"EmailAddress\":{"); + sb.append("\"email\": \"" + email_address + "\""); + sb.append("}}"); + return sb.toString(); + } + +} diff --git a/src/main/java/edu/bookocontacts/Person.java b/src/main/java/edu/bookocontacts/model/Person.java similarity index 90% rename from src/main/java/edu/bookocontacts/Person.java rename to src/main/java/edu/bookocontacts/model/Person.java index 1597108..c7fa868 100755 --- a/src/main/java/edu/bookocontacts/Person.java +++ b/src/main/java/edu/bookocontacts/model/Person.java @@ -2,10 +2,7 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ -package edu.bookocontacts; - -import java.util.ArrayList; -import java.util.List; +package edu.bookocontacts.model; /** * diff --git a/src/main/java/edu/bookocontacts/PersonFactory.java b/src/main/java/edu/bookocontacts/model/PersonFactory.java similarity index 89% rename from src/main/java/edu/bookocontacts/PersonFactory.java rename to src/main/java/edu/bookocontacts/model/PersonFactory.java index 943c5ae..6339ecf 100755 --- a/src/main/java/edu/bookocontacts/PersonFactory.java +++ b/src/main/java/edu/bookocontacts/model/PersonFactory.java @@ -2,7 +2,7 @@ * To change this template, choose Tools | Templates * and open the template in the editor. */ -package edu.bookocontacts; +package edu.bookocontacts.model; import java.util.ArrayList; import java.util.List; @@ -12,7 +12,8 @@ import java.util.List; */ public class PersonFactory { static int id=0; - static List getAllPersons() { + + public static List getAllPersons() { ArrayList list = new ArrayList<>(); list.add(createPerson("John", 40)); list.add(createPerson("Daisy", 21)); @@ -28,7 +29,6 @@ public class PersonFactory { list.add(createPerson("John", 52)); list.add(createPerson("Daisy", 29)); list.add(createPerson("Martha Has a very Long Name", 18)); - System.out.println("Returning person size: " + list.size()); return list; } diff --git a/src/main/java/edu/bookocontacts/model/PhoneNumber.java b/src/main/java/edu/bookocontacts/model/PhoneNumber.java new file mode 100644 index 0000000..4e846b4 --- /dev/null +++ b/src/main/java/edu/bookocontacts/model/PhoneNumber.java @@ -0,0 +1,51 @@ +package edu.bookocontacts.model; + +public class PhoneNumber { + String phone_number; + + public PhoneNumber(String phone_number) { + this.phone_number = phone_number; + } + + public String getphone_number() { + return phone_number; + } + + public void setphone_number(String phone_number) { + this.phone_number = phone_number; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((phone_number == null) ? 0 : phone_number.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PhoneNumber other = (PhoneNumber) obj; + if (phone_number == null) { + if (other.phone_number != null) + return false; + } else if (!phone_number.equals(other.getphone_number())) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{ \"PhoneNumber\":{"); + sb.append("\"phone\": \"" + phone_number + "\""); + sb.append("}}"); + return sb.toString(); + } +} diff --git a/src/main/resources/media/TableView.fxml b/src/main/resources/media/TableView.fxml index 18979dd..c1746e5 100755 --- a/src/main/resources/media/TableView.fxml +++ b/src/main/resources/media/TableView.fxml @@ -9,7 +9,7 @@ - +