Мне нужно написать апплет, который преобразует значения char в значения ascii. Прямо сейчас я просто пытаюсь получить макет апплета правильно, но почему-то мои 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)
{
}
}
Быстрое исправление:
Рассмотрим настройку свойства столбца JTextFields. Например, если вы используете:
ascii = new JTextField("", 5);
ваш ascii JTextField теперь получает некоторую предпочтительную ширину.
Лучшее долгосрочное исправление:
Изучите, изучите и используйте менеджеров компоновки для лучшей выгоды.
Обратите внимание, что проблема с JApplets заключается в том, что размер указан кодом HTML, а не менеджерами компоновки (насколько я понимаю вещи), поэтому вам следует позаботиться о том, чтобы размер графического интерфейса был достаточно большим.
например, с макетами, я получил следующее:
Второе текстовое поле имеет такой размер, потому что вы его инициализировали:
ascii = new JTextField("");
Это означает, что текстовое поле имеет строковое значение для его имени, где длина строки равна нулю. Текстовое поле автоматически настраивается в соответствии с текстом, который он содержит. Поскольку он содержит строку с нулевой длиной, размер текстового поля настолько мал.
Вы можете использовать метод setColumns(int columns)
в текстовом поле, чтобы получить фиксированную ширину, чтобы он мог получить предпочтительный размер.