好吧,所以我创建了一个类来制作自定义文本字段。 该类扩展了JPanel,因此我可以设置边框的颜色。
看起来像这样:
public class textfield {
public static JTextField textF = new JTextField();
public static class TextField extends JPanel{
public TextField(int x, int y, int width, int height, String bgColor, String brColor, String fgColor){
this.setLayout(null);
this.setBounds(x, y, width, height);
this.setBackground(new Color(Integer.parseInt(bgColor.substring(0, 3)), Integer.parseInt(bgColor.substring(3, 6)), Integer.parseInt(bgColor.substring(6, 9))));
this.setBorder(BorderFactory.createLineBorder(new Color(Integer.parseInt(brColor.substring(0, 3)), Integer.parseInt(brColor.substring(3, 6)), Integer.parseInt(brColor.substring(6, 9)))));
textF.setBorder(javax.swing.BorderFactory.createEmptyBorder());
textF.setOpaque(false);
textF.setBounds(width / 20, 0, width, height);
textF.setForeground(new Color(Integer.parseInt(fgColor.substring(0, 3)), Integer.parseInt(fgColor.substring(3, 6)), Integer.parseInt(fgColor.substring(6, 9))));
add(textF);
}
}
}
现在这是一个例子:
TextField userName = new textfield.TextField(1073, 177, 190, 31, "000003006", "120090040", "255255255");
add(userName);
我现在的问题是,我如何才能获得用户在文本字段中输入的文本?如果我只使用1个文本字段,我知道该怎么做,但我使用多个。
提前致谢!
答案 0 :(得分:1)
你的结构对我来说很奇怪,我怀疑你错过了一些基本的面向对象的概念,并且可能只是修改了这个概念,直到你得到它的工作"。
首先,我不认为这些事情应该是static
。这意味着只能有其中一个。另外,这可能只是一个简单的类而不是这个嵌入式类。类上的字段应为private
,并且只在需要时通过setter / getter方法公开访问。
考虑这样的事情:
public class TextField extends JPanel{
private JTextField textF = new JTextField();
// the constructor you already have goes here
// replace "textF" references with "this.textF" as needed
}
现在你有一个TextField
类 一个JPanel
而有(作为内部成员)JTextField
。它们都不是static
,所以你可以根据需要创建它们,并且每个都是完全封装的。
然后,要访问该JTextField
对象中的内容,可以在TextField
对象上公开更多方法:
public class TextField extends JPanel{
private JTextField textF = new JTextField();
// the constructor you already have goes here
// replace "textF" references with "this.textF" as needed
public String getText() {
return textF.getText();
}
}
我们公开的getText()
方法实际上只是getText()
已经在JTextField
上的方法的传递。我们可以通过创建更多方法来展示我们想要的许多操作。如果有很多这样的方法,直接公开textF
变量的getter可能是切实可行的,尽管这在技术上会违反Demeter法。