我需要编写一个将char值转换为ascii值的applet。现在我只是试图让applet的布局正确,但由于某种原因,我的JTextFields出现得非常奇怪,而且我不知道如何修复它。一个非常大,另一个非常小。
我在使GridLayout以我想要的方式工作时遇到了一些麻烦,我有些感觉问题与此有关,但我不确定。
以下是代码:
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)
{
}
}
答案 0 :(得分:4)
快速解决方法:
考虑设置JTextFields的列属性。例如,如果您使用:
ascii = new JTextField("", 5);
你的ascii JTextField现在获得了一些首选的大小宽度。
更好的长期解决方案:
学习,学习和使用布局管理器以获得更好的优势。
请注意,JApplet的一个问题是大小是由HTML代码指定的,而不是由布局管理器指定的(据我所知),因此您必须注意确保GUI的大小。大小足够大。
例如,有了布局,我得到了这个:
答案 1 :(得分:4)
第二个文本字段的大小是这样的,因为您初始化它:
ascii = new JTextField("");
这表示文本字段的名称为字符串值,其中字符串的长度为零。文本字段根据其包含的文本自动调整大小。由于它包含一个长度为零的字符串,因此文本字段的大小非常小。
您可以在文本字段上使用setColumns(int columns)
方法为其指定固定宽度,以便它可以获得首选大小。