2017-04-02 40 views
0

我是Java新手,正在尝试运行此代码。以下代码中可能出现错误 - 我的JTextFieldtxtfld显示为一行而不是全文框?textfield未显示大小合适

public class calculator 
{ 
    public static void main(String s[]) 
    { 
     JFrame j=new JFrame(); 
     j.setSize(400,600); 

     JPanel p1=new JPanel(); 
     JPanel p2=new JPanel(); 
     p1.setSize(400, 100); 
     p2.setSize(400, 500); 
     p1.setLocation(0, 0); 
     p2.setLocation(0, 100); 

     p2.setLayout(new GridLayout(4,4)); 
     j.add(p1); 
     j.add(p2); 


     JTextField txtfld=new JTextField(); 
     txtfld.setSize(390, 92); 
     txtfld.setLocation(5, 2); 
     //txtfld.setVisible(true);  
     p1.add(txtfld); 

     j.setVisible(true); 

    } 
} 
+2

我相信你不会写你的代码左对齐,所以修正代码的格式,使我们更容易阅读代码。类名也应以大写字母开头。遵循Java标准。 – camickr

+0

您可以发送'JTextField'的屏幕截图吗? – ostrichofevil

+0

1)使用缩进代码行和块的逻辑和一致形式。缩进旨在使代码的流程更易于遵循! 2)请学习常用的Java命名规则(命名约定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'UPPER_CASE_CONSTANT')并且一致地使用它。 3)请参阅[我是否应避免使用Java Swing中的set(Preferred | Maximum | Minimum)Size方法?](http://stackoverflow.com/q/7229226/418556)(是) –

回答

3
JTextField txtfld=new JTextField(); 

你需要给一个提示布局管理器大小应该是什么。

所以,你应该使用类似:

JTextField txtfld=new JTextField(10); 

现在的首选大小将使得10“W”字符需要滚动之前显示在文本字段中。

你也应该包()使它可见之前的框架:

j.pack(); 
j.setVisible(); 

这将使框来显示他们的首选大小的所有组件。

另外,摆脱所有的setSize()和setLocation()语句。布局经理的职责是设置大小和位置。这些值将由布局管理器重新计算。

j.add(p1); 
j.add(p2); 

一个框架的默认布局管理器是一个BorderLayout。所以上面的代码将导致p2替换帧上的p1。

基本上你的整个代码是错误的。

首先阅读有关How to Use Layout Managers的Swing教程的部分,以获取更多信息和工作示例以帮助您入门。也许从BorderLayout例子开始,因为这是你需要首先理解它的工作原理的默认布局。

+0

感谢您的答复。实际上,我正在制作一个计算器,因此我将尺寸和位置设置为在两侧和两个按钮之间留下一些填充。我是否仍然使用布局管理器? –

+0

*“在边上和按钮之间留下一些填充”* Java GUI必须使用不同语言环境中使用不同PLAF的不同操作系统,屏幕大小,屏幕分辨率等。因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及**布局填充和[*空白*]边框(http://stackoverflow.com///418556)。** –

+0

@kamalpreetkaur, - '我设定的大小和位置留下一些填充两侧和按钮之间 - 阅读教程。有一个关于如何使用边框的部分,用于在边上留出空间。每个布局管理器也将有不同的参数或方法来在组件之间添加空间。 – camickr