Проблема с определением размеров JTextFields

1

Мне нужно написать апплет, который преобразует значения char в значения ascii. Прямо сейчас я просто пытаюсь получить макет апплета правильно, но почему-то мои JTextFields появляются очень странно, и я не знаю, как это сделать. Один очень большой, а другой очень маленький.

У меня возникли проблемы с тем, что GridLayout работал так, как я хотел, и у меня есть ощущение, что проблемы имеют к этому какое-то отношение, но я не знаю точно.

Изображение 174551

Здесь код:

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)
{

}
}
Теги:
format
layout
swing
applet

2 ответа

4
Лучший ответ

Быстрое исправление:
Рассмотрим настройку свойства столбца JTextFields. Например, если вы используете:

ascii = new JTextField("", 5);

ваш ascii JTextField теперь получает некоторую предпочтительную ширину.

Лучшее долгосрочное исправление:
Изучите, изучите и используйте менеджеров компоновки для лучшей выгоды.

Обратите внимание, что проблема с JApplets заключается в том, что размер указан кодом HTML, а не менеджерами компоновки (насколько я понимаю вещи), поэтому вам следует позаботиться о том, чтобы размер графического интерфейса был достаточно большим.

например, с макетами, я получил следующее:

Изображение 174551

  • 0
    Спасибо! Это отлично работает для ascii JTestField, но ничего не делает для charInput. Это просто проблема с моим использованием GridLayout?
  • 0
    @Slavic_Donut: компонент GridLayout будет полностью заполнять каждую ячейку сетки. Если вы не хотите, чтобы это произошло, не используйте GridLayout таким образом.
Показать ещё 1 комментарий
4

Второе текстовое поле имеет такой размер, потому что вы его инициализировали:

ascii = new JTextField("");

Это означает, что текстовое поле имеет строковое значение для его имени, где длина строки равна нулю. Текстовое поле автоматически настраивается в соответствии с текстом, который он содержит. Поскольку он содержит строку с нулевой длиной, размер текстового поля настолько мал.

Вы можете использовать метод setColumns(int columns) в текстовом поле, чтобы получить фиксированную ширину, чтобы он мог получить предпочтительный размер.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню