我正在构建的网络小程序是一个交互式 3D 显示建筑 3D 模型,上面覆盖有按钮和文本输入字段,允许用户登录。当在处理草图中使用 awt 文本字段时,它会在从处理 IDE 运行时正确显示和运行,但是当草图导出为小程序并通过任何浏览器加载时,所有文本字段都会呈现纯黑色。
该小程序可以在此视频中看到 - https://vimeo.com/68475579 ,实际上您可以在尝试登录或创建新用户时遇到问题 - http://www.boxinacloud.com/biac /
一般来说,处理中的 GUI 库很少,例如 controlP5,在使用 awt 的 TextField 之前,我已经尝试过使用所有这些库。原因是:ControlP5 的所有 UI 组件都有相同的问题 - 它们在浏览器中呈现黑色。其他库(G4P、interfascia 等)要么没有适用于 Processing 1.51 的版本,要么不提供 Textfield 类,或者在以清晰的图形显示文本时出现问题 - 可能是因为我的 P3D 显示模式案子。
不幸的是,必须使用 Processing 1.5.1 而不是最新的 2.0。这是因为 PeasyCam 库和迄今为止编写的代码的其他细节与 Processing 2.0 不兼容。
我愿意接受有关其他 TextField 类的建议或任何可能导致 AWT 中内置的 TextField 呈现黑色问题的提示。
下面是用于使用 awt 生成 TextFields 的代码
import java.awt.*;
/// textfields
Panel dummyPanel = new Panel(); // voodoo
//
Panel usernamePanel = new Panel(); // holder for input field
TextField usernameField = new TextField("");
//
Panel passwordPanel = new Panel(); // holder for input field
TextField passwordField = new TextField("");
//
Panel password2Panel = new Panel(); // holder for input field
TextField password2Field = new TextField("");
//
Panel emailPanel = new Panel(); // holder for input field
TextField emailField = new TextField("");
// give all the containers a layout
setLayout(new BorderLayout()); // main container (window?)
usernamePanel.setLayout(new BorderLayout());
passwordPanel.setLayout(new BorderLayout());
password2Panel.setLayout(new BorderLayout());
emailPanel.setLayout(new BorderLayout());
// add the containers to the main container
// Now we can set the bounds of the text fields // left, top, width, height
int borderSize = 100; // for calculating size of fields
int inputHeight = 20; // height of input field
usernamePanel.setBounds(618, 85, 1000-618-15, inputHeight);
passwordPanel.setBounds(618, 135, 1000-618-15, inputHeight);
password2Panel.setBounds(618, 185, 1000-618-15, inputHeight);
emailPanel.setBounds(618, 235, 1000-618-15, inputHeight);
//
usernamePanel.setBackground(new Color(128, 128, 128, 0));
passwordPanel.setBackground(new Color(128, 128, 128, 0));
password2Panel.setBackground(new Color(128, 128, 128, 0));
emailPanel.setBackground(new Color(128, 128, 128, 0));
// Don't know why this works but it does.
// The dummy is held by the main container and doesn't contain anything
// yet without it, the input field inexplicably expands to contain the output field
// (try commenting it out).
// It also needs to be placed in the center.
dummyPanel.setBackground(new Color(128, 128, 128, 0));
add(dummyPanel, BorderLayout.CENTER);
passwordField.setEchoChar('*');
password2Field.setEchoChar('*');
//
add(usernamePanel);
add(passwordPanel);
add(password2Panel);
add(emailPanel);
usernamePanel.add(usernameField);
passwordPanel.add(passwordField);
password2Panel.add(password2Field);
emailPanel.add(emailField);