如何使文本字段水平且不可编辑?
Posted
技术标签:
【中文标题】如何使文本字段水平且不可编辑?【英文标题】:How do I make a text fields horizontal and non-editable? 【发布时间】:2021-07-29 07:31:18 【问题描述】:我有一个小程序,可以将两个数字相加并在第三个文本框中显示它们的总和。
https://pastebin.com/4ga1brD1
我希望文本框水平排列,但更重要的是我需要第三个文本框不可编辑。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Question extends Applet implements ActionListener
TextField firstNum, secondNum, resultNum;
public Question()
setLayout(new GridLayout(3, 2, 10, 15));
setBackground(Color.cyan);
firstNum = new TextField(15);
secondNum = new TextField(15);
resultNum = new TextField(15);
secondNum.addActionListener(this);
add(new Label("Enter First Number"));
add(firstNum);
add(new Label("Enter Second Number"));
add(secondNum);
add(new Label("S U M"));
add(resultNum);
public void actionPerformed(ActionEvent e)
String str1 = firstNum.getText();
double fn = Double.parseDouble(str1);
double sn = Double.parseDouble(secondNum.getText());
resultNum.setText("Sum is " + (fn+sn));
【问题讨论】:
在继续之前,我只想确保您了解您没有使用 Swing,并且小程序已过时。你确定这是你想要追求的策略吗?这种方法将使您至少落后 15 年。 @MarsAtomic 是的。 我需要第三个文本框不可编辑。 - 人们不再编写小程序或使用 AWT。因此,如果您想继续沿着这条道路前进,您将需要自己解决问题。其中一部分是阅读 API 以找到要使用的适当方法。 “是的。” 嗯。 为什么? 即使回到我仍然为小程序提供支持的时候,如果是布局/组件问题,我建议先将其分类到Panel
(或JPanel
) 显示在 Frame
(或 JFrame
)中。原因是启动和调试框架更简单。修复后,面板可以直接放入小程序中。现在处于大多数人甚至无法运行小程序的阶段,因此我们提供帮助的机会受到了阻碍。至于AWT,它是很久以前被取代的,以至于我们大多数有经验的人都忘记了大部分细节!
BTW - this 是网格布局的外观,这种布局比将所有标签/字段组合放在一行中要好。为什么用户想要那个“一行”?提供整个 GUI 的预期布局的 ASCII 艺术或简单绘图。
【参考方案1】:
要水平排列TextField
组件,请不要将它们直接添加到Applet。相反,创建一个Panel
,给它一个FlowLayout
,然后将你的TextField
组件添加到Panel
。然后您可以将Panel
直接添加到您的Applet。确保您的 Applet 足够宽,可以并排放置所有三个盒子,否则布局会将第三个盒子堆叠在第一个盒子下面。
注意:我会为你测试这个,但至少五年来没有浏览器支持 Applet。
要使第三个TextField
不可编辑,您需要使用setEnabled()
方法。如果您使用JTextField
,setEditable()
将是完成相同事情的方法,而不是您使用的简单 AWT TextField
。您应该养成查看official documentation 的习惯,在那里很容易找到答案。
resultNum.setEnabled(false);
请注意,禁用的框将显示为灰色,这可能在视觉上没有吸引力。解决方案是转换为 Java Swing,这将允许您使用 setEditable
,这只会阻止您的用户在不更改外观的情况下单击框。 Swing 还允许您使用更加复杂和灵活的布局管理器。
【讨论】:
"..or 布局会将第三个框堆叠在第一个框之下。" 这是流式布局不是我布局的首选的原因之一标签/字段对。我倾向于使用网格 bag 布局,或者 OP 已经在使用的“穷人的等价物”,网格布局将使所有单元格的大小相同。group layout
可以产生与网格包布局相同的结果,但需要更多的努力。
@AndrewThompson 我听到了,但他坚持采用无 Swing 的方法。我有一段时间没有接触过 AWT,所以很可能有更好的布局适合问题的参数,但我故意排除了 Swing 解决方案。
OK 忘记组布局,但GridBagLayout
与GridLayout
和FlowLayout
一样是AWT 的一部分。以上是关于如何使文本字段水平且不可编辑?的主要内容,如果未能解决你的问题,请参考以下文章
c#如何使一个文本框变为不可编辑?但是又可以复制里面的数据?