Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

JavaFX/FreeLayout

自由にレイアウトする

自由にレイアウトする

既存のレイアウタでは不可能な「おかしなこと」をやりたい時、自身でレイアウトする必要があるが、この方法の一つとして以下がある。 以下ではボタンがテキスト領域の一部に入り込んでレイアウトされる。

If you want to do weired things on layouting which can't be achieved by standard layouters, one of the ways is the following. A Button is layouted overlapping TextArea.

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;

public class FreeLayout extends Application {

  @Override
  public void start(Stage stage) throws Exception {

    TextArea textArea = new TextArea();
    Button button = new Button("some button");    
    Pane pane = new Pane() {
      @Override
      protected void layoutChildren() {
        super.layoutChildren();
        double width = getWidth();
        double height = getHeight();
        textArea.resize(width,  height);
        button.relocate(width - button.getWidth() - 10, height - button.getHeight() - 10);
      }
    };
    pane.getChildren().addAll(textArea, button);    
    stage.setScene(new Scene(pane));
    stage.setWidth(500);
    stage.setHeight(500);
    stage.show();
  }

  public static void main(String[] args) throws Exception {
    launch(args);
  }
}

レイアウトを強制する

レイアウトをわざと強制するには以下。

Forcing layouting on purpose.

import java.util.*;

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;

public class RequestLayout extends Application {

  @Override
  public void start(Stage stage) throws Exception {    
    Button button = new Button("layout"); 
    Pane pane = new Pane() {    
      Random r = new Random();
      @Override
      public void layoutChildren() {
        System.out.println("layoutChildren");
        super.layoutChildren();
        button.relocate(
          (getWidth() - button.getWidth()) * r.nextDouble(), 
          (getHeight() - button.getHeight()) * r.nextDouble()
        );
      }
    };
    button.setOnAction(e-> {  
      System.out.println("clicked");
      pane.requestLayout();              
    });
    pane.getChildren().add(button);
    Scene scene = new Scene(pane);
    stage.setScene(scene);
    stage.setWidth(400);
    stage.setHeight(400);
    stage.show();
  }
  
  public static void main(String[] args) throws Exception {
    launch(args);
  }
}