環境:Windows10・eclipse_4_4
前提・実現したいこと
親ウィンドウから、子ウィンドウを開き、データの登録をします。
子ウィンドウからは、連続して追加をさせる仕様のため
追加登録をした際に、親ウィンドウのLstZaikoを更新させたい。
エラー内容に関わる情報を検索してみたものの、static云々の情報がでてくるのですが、
Javaに関して、理解が浅いせいもあり、自分のPGへの置き換えでうまく処理を完結させることができませんでした。
controller・class・modelの関係性があやしいので、
その辺を解説してあるようなサイトや書籍も併せてご教授いただければ幸いです。
### 発生している問題・エラーメッセージ スコープ内で形 Zaiko_Controllerのエンクロージング・インスタンスがアクセス不可能です
<Pane prefHeight="590.0" prefWidth="445.0" stylesheets="@style.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Zaiko.Zaiko_Controller"> <children> <Button layoutX="345.0" layoutY="550.0" prefHeight="25.0" prefWidth="100.0" mnemonicParsing="false" onAction="#SyokuZaiAdd" text="食材追加" style="-fx-font-size: 13px; -fx-font-weight: bold; -fx-text-fill: #0009ff;" /> <Label text="ストック" alignment="CENTER" layoutX="10.0" layoutY="10.0" prefHeight="27.0" prefWidth="67.5" /> <TextField text="冷蔵庫1" alignment="CENTER_LEFT" layoutX="77.5" layoutY="10.0" prefHeight="25.0" prefWidth="202.5"/> <TableView fx:id="LstKousyu" layoutX="10.0" layoutY="40.0" opacity="0.7" prefHeight="508.0" prefWidth="435.0"> <columns> <TableColumn prefWidth="0.0" visible="false"> <cellValueFactory> <PropertyValueFactory property="KousyuID" /> </cellValueFactory> </TableColumn> <TableColumn text="食材" prefWidth="225.0"> <cellValueFactory> <PropertyValueFactory property="Syokuzai" /> </cellValueFactory> </TableColumn> <TableColumn text="購入日" prefWidth="97.5"> <cellValueFactory> <PropertyValueFactory property="BuyingDay" /> </cellValueFactory> </TableColumn> <TableColumn text="賞味期限" prefWidth="97.5" > <cellValueFactory> <PropertyValueFactory property="OpenDate" /> </cellValueFactory> </TableColumn> </columns> </TableView> </children> </Pane>
package Zaiko; public class ZaikoApp extends Application { @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("Zaiko.fxml")); stage.setTitle("在庫画面"); stage.setScene(new Scene(root, 455, 590)); stage.show(); } public static void main(String[] args ) { launch(args); } }
package Zaiko; public class LstZaiko { private final SimpleIntegerProperty ZaikoID = new SimpleIntegerProperty(); private final SimpleStringProperty Syokuzai = new SimpleStringProperty(); private final SimpleStringProperty BuyingDay = new SimpleStringProperty(); private final SimpleStringProperty OpenDate = new SimpleStringProperty(); public LstZaiko() { this( 0, "","","" ); } public LstZaiko( Integer zaikoID, String syokuzai, String buying, String open ) { setZaikoID(zaikoID); setSyokuzai(syokuzai); setBuyingDay(buying); setOpenDate(open); } public Integer getZaikoID() { return ZaikoID.get(); } public void setZaikoID(Integer zaikoID) { ZaikoID.set(zaikoID); } public String getSyokuzai() { return Syokuzai.get(); } public void setSyokuzai(String syokuzai) { Syokuzai.set(syokuzai); } public String getBuyingDay() { return BuyingDay.get(); } public void setBuyingDay(String buying) { BuyingDay.set(buying); } public String getOpenDate() { return OpenDate.get(); } public void setOpenDate(String open) { OpenDate.set(open); } }
package Zaiko; public class Zaiko_Controller implements Initializable { @FXML TableView<LstZaiko> LstKousyu; Integer ZaikoID = 0; @Override public void initialize(URL url , ResourceBundle rb) { LstZaiko_Set(); } // 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 public void LstZaiko_Set() { LstKousyu.getItems().setAll(returnLstZaiko()); LstKousyu.getSelectionModel().select(0); } // 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 private List<LstZaiko> returnLstZaiko() { List<LstZaiko> ll = new LinkedList<LstZaiko>(); LstZaiko roww = new LstZaiko(); roww.setZaikoID(1); roww.setSyokuzai("ハム"); roww.setBuyingDay("12月10日"); roww.setOpenDate("12月20日"); ll.add(roww); roww = new LstZaiko(); roww.setZaikoID(2); roww.setSyokuzai("たまご"); roww.setBuyingDay("12月15日"); roww.setOpenDate("12月30日"); ll.add(roww); // 実際は、Stadのレコードをまわして、Listを構成している return ll; } // 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 @FXML public void SyokuZaiAdd(ActionEvent event) { Syokuzai.Syokuzai.show(ZaikoID, "冷蔵庫1"); } }
<Pane fx:id="root" prefHeight="550.0" prefWidth="360.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Syokuzai.Syokuzai_Controller"> <children> <Button layoutX="10.0" layoutY="520.0" prefHeight="25.0" prefWidth="100.0" mnemonicParsing="false" onAction="#SyokuZaiInsert" text="登 録" style="-fx-font-size: 13px; -fx-font-weight: bold; -fx-text-fill: #0009ff;" /> <TableView fx:id="LstSyokuzaiSelect" layoutX="10.0" layoutY="10.0" opacity="0.7" prefHeight="508.0" prefWidth="337.0"> <columns> <TableColumn prefWidth="0.0" visible="false" > <cellValueFactory> <PropertyValueFactory property="SyokuzaiID" /> </cellValueFactory> </TableColumn> <TableColumn fx:id="colSyokuzai" text="食材" prefWidth="225.0" visible="true"> <cellValueFactory> <PropertyValueFactory property="Syokuzai" /> </cellValueFactory> </TableColumn> <TableColumn fx:id="colDefaltOpen" text="賞味期限" prefWidth="97.5" visible="true" > <cellValueFactory> <PropertyValueFactory property="DefaltOpen" /> </cellValueFactory> </TableColumn> </columns> </TableView> </children> </Pane>
package Syokuzai; public class Syokuzai { private static final Syokuzai frm = new Syokuzai(); static int return_SyokuzaiID; public Syokuzai() { } private void open( Window parentWindow, Integer zaikoID, String name) throws IOException { Stage stage = new Stage(); stage.initOwner(parentWindow); stage.setTitle("食材登録"); stage.setResizable(false); stage.initModality(Modality.APPLICATION_MODAL); stage.initStyle(StageStyle.UTILITY); FXMLLoader loader = new FXMLLoader(getClass().getResource("Syokuzai.fxml")); Parent root = (Parent) loader.load(); try { Syokuzai_Controller controller; controller = (Syokuzai_Controller) loader.getController(); controller.setStage(stage); controller.setZaikoID(zaikoID); controller.LstGyousyu_Create(); Scene sence = new Scene(root); stage.setScene(sence); stage.setY(300.0); stage.showAndWait(); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } public static int show(Integer zaikoID, String name){ Stage mStage; mStage = new Stage(); try { frm.open(mStage, zaikoID , name); } catch (IOException e) { e.printStackTrace(); } return return_SyokuzaiID; } }
package Syokuzai; public class LstSyokuzaiSelect { private final SimpleIntegerProperty SyokuzaiID = new SimpleIntegerProperty(); private final SimpleStringProperty Syokuzai = new SimpleStringProperty(); private final SimpleStringProperty DefaltOpen = new SimpleStringProperty(); public LstSyokuzaiSelect() { this(0, "",""); } public LstSyokuzaiSelect( Integer id, String name, String open) { setSyokuzaiID(id); setSyokuzai(name); setDefaltOpen(open); } public Integer getSyokuzaiID() { return SyokuzaiID.get(); } public void setSyokuzaiID(Integer id) { SyokuzaiID.set(id); } public String getSyokuzai() { return Syokuzai.get(); } public void setSyokuzai(String name) { Syokuzai.set(name); } public String getDefaltOpen() { return DefaltOpen.get(); } public void setDefaltOpen(String open) { DefaltOpen.set(open); } }
public class Syokuzai_Controller implements Initializable { @FXML Pane root; @FXML private TableView<LstSyokuzaiSelect> LstSyokuzaiSelect; @FXML TableColumn<LstSyokuzaiSelect , String> colSyokuzai; @FXML TableColumn<LstSyokuzaiSelect , String> colBuyingDay; int ZaikoID = 0; PreparedStatement pstmt = null; ResultSet rset = null; private Stage mStage; public void initialize(URL url, ResourceBundle rb) { } public void LstGyousyu_Create() { LstSyokuzaiSelect.getItems().setAll(returnLstSyokuzai()); LstSyokuzaiSelect.getSelectionModel().select(0); } private List<LstSyokuzaiSelect> returnLstSyokuzai() { List<LstSyokuzaiSelect> ll = new LinkedList<LstSyokuzaiSelect>(); LstSyokuzaiSelect roww = new LstSyokuzaiSelect(); roww.setSyokuzaiID(1); roww.setSyokuzai("牛乳"); roww.setDefaltOpen("1週間"); ll.add(roww); roww = new LstSyokuzaiSelect(); roww.setSyokuzaiID(2); roww.setSyokuzai("たまご"); roww.setDefaltOpen("2週間"); ll.add(roww); return ll; } @FXML public void SyokuZaiInsert(ActionEvent event) { LstSyokuzaiSelect list = LstSyokuzaiSelect.getSelectionModel().getSelectedItem(); if (list != null) { int SyokuzaiID = list.getSyokuzaiID(); try { ///// ※ SQL処理の実行で、Table[ZAIKO]のInsertされたと仮定します ///// // 初期化!!!! LstGyousyu_Create(); ctl.MsgBox.MsgBoxYESNO.show("登録完了", "登録しました。","INFO"); // 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ///// ※ 連続登録をさせ、都度 Zaiko[LstZaiko]に反映させたい //Error: スコープ内で形 Zaiko_Controllerのエンクロージング・インスタンスがアクセス不可能です Zaiko_Controller.this.LstZaiko_Set(); // 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 } catch (Exception e) { e.printStackTrace(); } } } // ────────────────────────────── public void setStage(Stage stage) { this.mStage = stage; } public void setZaikoID(Integer id) { ZaikoID = id; } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/27 23:28