Я сформировал матрицу (в двух отдельных классах).я хотел бы сделать это:
, если я нажимаю на метку (например, метку [1] [2]) с содержимым 0, метка меняется на 1 и сохраняет новое значение в «целое число»(Num [1] [2]).и затем, когда я нажимаю на ярлык с содержимым 1, все происходит с той же функцией, но с 0.
Основной класс:
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.BorderPane;
public class Main extends Application
{
@Override
public void start(Stage primaryStage)
{
try
{
Scene scene = new Scene(new RootBorderPane(),800,400);
primaryStage.setScene(scene);
primaryStage.setTitle("Graph");
primaryStage.show();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
launch(args);
}
public static void showAlert(AlertType alertType, String message)
{
Alert alert = new Alert(alertType, message, ButtonType.OK);
alert.setHeaderText(null);
alert.setTitle("Warning");
alert.showAndWait();
}
}
Класс пограничной области:
package application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
public class RootBorderPane extends BorderPane
{
private Label[][] label = new Label[15][15];
private int[][] num = new int[15][15];
private GridPane choiceGridPane;
private int amount;
private TextField textField;
private Button button;
private FlowPane flowPane;
public RootBorderPane()
{
initComponents();
addComponents();
addHandlers();
}
private void initComponents()
{
choiceGridPane = new GridPane();
choiceGridPane.setPadding(new Insets(20));
button = new Button("ENTER");
flowPane = new FlowPane(Orientation.VERTICAL);
textField = new TextField("between 2-15");
}
private void addComponents()
{
flowPane.getChildren().addAll(textField,button);
setRight(flowPane);
}
private void addHandlers()
{
button.setOnAction(e-> matrixBuilder());
}
private void matrixBuilder()
{
amount = Integer.parseInt(textField.getText());
for(int i=0;i<amount;i++)
{
for(int j=0;j<amount;j++)
{
num[i][j]=0;
label[i][j] = new Label(""+num[i][j]);
label[i][j].setMinWidth(20);
choiceGridPane.add(label[i][j], j+2, i+2);
}
}
setCenter(choiceGridPane);
}
}
я написал этот код, но он снова не работает:
private void matrixBuilder()
{
amount = Integer.parseInt(textField.getText());
for(int i=0;i<amount;i++)
{
for(int j=0;j<amount;j++)
{
num[i][j]=0;
label[i][j] = new Label(""+num[i][j]);
label[i][j].setMinWidth(20);
choiceGridPane.add(label[i][j], j+2, i+2);
label[i][j].setOnMouseClicked(new EventHandler<MouseEvent>()
{
public void handle(MouseEvent t)
{
if(num[i][j]==0)
{
num[i][j]=1;
label[i][j] = new Label(""+num[i][j]);
}
else
{
num[i][j]=0;
label[i][j] = new Label(""+num[i][j]);
}
}
});
}
}
setCenter(choiceGridPane);
}
Ошибка:
локальная переменная, определенная в прилагаемой области видимости ...