我可以使用Java中每个元素的代码创建动态网格视图吗?

时间:2018-10-05 03:18:37

标签: java javafx

我是Java新手,我在VB.NET上工作,但不适用于我的新项目。
我正在尝试制作POS系统,我想询问一件事。
如果我有一个包含10行的数据库表,并且需要将它们放在网格视图等10个面板中,
在vb.net中,我需要制作10个面板并为每个面板重复代码,如果表具有更多行,请使用隐藏和显示属性,这些属性会耗尽专业知识。
在PHP中,我只需要使用foreach语句来显示整个表,而无需重复任何代码。 那么我可以在Java中创建动态网格视图吗?
那我应该在Java中学什么呢?
谢谢你,我的语言不好。

enter image description here

1 个答案:

答案 0 :(得分:1)

以下是我想您尝试做的一个例子:

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.Window;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) {
    GridPane grid = new GridPane();
    grid.setPadding(new Insets(20));
    grid.setVgap(15);
    grid.setHgap(15);

    buildGrid(grid, getPanelNames());

    primaryStage.setScene(new Scene(grid));
    primaryStage.setTitle("Example App");
    primaryStage.show();

  }

  private void buildGrid(GridPane grid, List<String> panelNames) {
    int row = 0;
    int col = 0;

    for (String name : panelNames) {
      Label label = new Label(name);
      Button btn = new Button("Click Me!");
      btn.setOnAction(event -> {
        event.consume();
        showAlert(grid.getScene().getWindow(), name);
      });

      VBox box = new VBox(10, label, btn);
      box.setPadding(new Insets(10));
      box.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, null, null)));
      box.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
      grid.add(box, col, row);

      if (++col > 3) {
        col = 0;
        row++;
      }
    }

  }

  private List<String> getPanelNames() {
    return IntStream.rangeClosed(0, 13)
        .mapToObj(i -> "Panel #" + i)
        .collect(Collectors.toList());
  }

  private void showAlert(Window owner, String panelName) {
    Alert alert = new Alert(AlertType.INFORMATION);
    alert.initOwner(owner);
    alert.setTitle(panelName);
    alert.setHeaderText(null);
    alert.setContentText("Hello from \"" + panelName + "\"!");
    alert.show();
  }

}