0

我已经应用了该surface.setResizable (false)方法;如何对面板做同样的事情?我一直是这样的:

stage.setMinWidth (w);
stage.setMinHeight (h);
stage.setWidth (w);
stage.setHeight (h);
stage.setMaxWidth (w);
stage.setMaxHeight (h);

pane.setMaxSize (700, 420);
pane.setPrefSize (700, 420);
pane.setMinSize (700, 420);

还有一个小问题!如何使标题居中?

surface.setTitle ("HELLO WORLD");

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

1

使GLWindow成为处理中可调整大小的 P3D 渲染器可能存在问题。从提供的少量信息来看,似乎根本不需要使用P3D。使用默认 ( JAVA2D) 渲染器,窗口将无法调整大小:它是默认值。

关于这个小问题,我也有小问题:为什么?:)

就可用性而言,理想情况下您希望您的应用程序保持一致。

如果您真的很想这样做,一种使文本居中的方法是在“HELLO WORLD”之前添加一些空格。您将需要根据系统字体(每个操作系统和用户偏好可能不同)来确定移动字符串的像素数,如果它是等宽字体(在大多数情况下不是),它会更容易。很多事情要考虑,如果你想把它钉在像素完美上,很多事情可能会出错,从所有这些努力中会得到什么?

无论如何,这是一个测试草图:

void setup(){
  size(300,300, JAVA2D);
  background(0,192,0);
  // don't need this with JAVA 2D: it's the default
  //surface.setResizable(false);
  
  String title = "Hello World";
  // estimated char width: assumes font is monospaced (Arial/Verdana it isn't)
  int charWidth = 6;
  // calculate left margin
  int leftMargin = (width - (title.length() * charWidth)) / 2;
  // calculate the number of chars to prepent
  int chars = leftMargin / charWidth;
  // prepend spaces to move text to the right
  for(int i = 0 ; i < chars; i++){
    title = " " + title;
  }
  
  surface.setTitle(title); 
}

你甚至可以为它制作你想要的动画:

void draw(){
  String title = "->";
  for(int i = 0 ; i < (int)map(sin(frameCount * 0.1), -1, 1, 0, 21); i++){
    title = "-" + title;
  }
  surface.setTitle(title);
}

真的值得付出努力并浪费 CPU 周期吗?可能不是 :)

于 2020-08-13T20:57:47.387 回答
0

你会试试这一些属性吗?

    frame.setResizable(false);
    frame.pack();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

确保在调用 pack 之前总是调用 setResizable

于 2020-08-13T06:43:46.807 回答