0

我正在构建的网络小程序是一个交互式 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);
4

0 回答 0