无法调整JTextFields的大小

时间:2014-03-16 18:00:45

标签: java swing layout applet format

我需要编写一个将char值转换为ascii值的applet。现在我只是试图让applet的布局正确,但由于某种原因,我的JTextFields出现得非常奇怪,而且我不知道如何修复它。一个非常大,另一个非常小。

我在使GridLayout以我想要的方式工作时遇到了一些麻烦,我有些感觉问题与此有关,但我不确定。

Here's a screenshot of the applet

以下是代码:

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;

public class Ex1_2 extends JApplet implements ActionListener
{
private JTextField charInput;
private JLabel display1;
private JLabel dummy;
private JLabel display2;
private JLabel welcome;
private JTextField ascii;
private JLabel error;

Container pane = getContentPane();

public void init()
{
    pane.setLayout(new BorderLayout());
    pane.setBackground(Color.orange);

    display1 = new JLabel("Character", SwingConstants.CENTER);
    display2 = new JLabel("ASCII code", SwingConstants.CENTER);
    dummy = new JLabel("", SwingConstants.CENTER);
    dummy.setBackground(Color.orange);

    welcome = new JLabel("Char <-> ASCII converter", SwingConstants.CENTER);
    welcome.setForeground(Color.blue);
    pane.add(welcome, BorderLayout.NORTH);
    pane.add(dummy, BorderLayout.SOUTH);
    //charInput.addActionListener(this);

    add(addMiddle());
}

JPanel addMiddle()
{
    JPanel p = new JPanel();
    p.setLayout(new GridLayout(0, 2, 10, -5));
    p.setBackground(Color.green);

    p.add(display1, BorderLayout.SOUTH);
    p.add(display2, BorderLayout.SOUTH);
    p.add(dummy);

    p.add(addInnerLeft());  
    p.add(addInnerRight());
    p.add(dummy);

    return p;
}

JPanel addInnerLeft()
{
    JPanel p2 = new JPanel(new GridLayout(0, 2));
    p2.setBackground(Color.yellow);
    pane.add(p2);

    charInput = new JTextField("");
    charInput.setForeground(Color.black);
    //p2.add(charInput);

    return p2;
}

JPanel addInnerRight()
{
    JPanel p3 = new JPanel();       
    p3.setBackground(Color.yellow); 

    ascii = new JTextField("");
    ascii.setForeground(Color.black);
    //p3.add(ascii);

    return p3;
}

public void actionPerformed(ActionEvent e)
{

}
}

2 个答案:

答案 0 :(得分:4)

快速解决方法:
考虑设置JTextFields的列属性。例如,如果您使用:

ascii = new JTextField("", 5);

你的ascii JTextField现在获得了一些首选的大小宽度。

更好的长期解决方案:
学习,学习和使用布局管理器以获得更好的优势。

请注意,JApplet的一个问题是大小是由HTML代码指定的,而不是由布局管理器指定的(据我所知),因此您必须注意确保GUI的大小。大小足够大。

例如,有了布局,我得到了这个:

enter image description here

答案 1 :(得分:4)

第二个文本字段的大小是这样的,因为您初始化它:

ascii = new JTextField("");

这表示文本字段的名称为字符串值,其中字符串的长度为零。文本字段根据其包含的文本自动调整大小。由于它包含一个长度为零的字符串,因此文本字段的大小非常小。

您可以在文本字段上使用setColumns(int columns)方法为其指定固定宽度,以便它可以获得首选大小。