JTextField обновляет размер только при изменении размера окна - PullRequest
0 голосов
/ 01 ноября 2018

Я установил переменную JTextField для обновления текста, когда я установил флажок с помощью переменной ItemListener. Хотя текст обновляется, размер не обновляется, НО только обновляет, когда я увеличиваю или уменьшаю окно. Ты хоть представляешь, почему это происходит?

Вот мой код:

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import javax.swing.JFrame;
import javax.swing.JCheckBox;
import javax.swing.JTextField;

class Fruitbox extends JFrame
{
    private JTextField Atext;
    private final JCheckBox Abox;
    private final JCheckBox Bbox;
    private String currentString;

        public Fruitbox()
        {
            super("Hey you da best");
            setLayout(new FlowLayout());

            Atext = new JTextField("Fruit");
            Abox = new JCheckBox("Apple");
            Bbox = new JCheckBox("Banana");

            add(Abox);
            add(Bbox);
            add(Atext);

            Trigger t = new Trigger();
            Abox.addItemListener(t);
            Bbox.addItemListener(t);
        }
            class Trigger implements ItemListener
            {
                    @Override
                    public void itemStateChanged(ItemEvent e)
                    {
                    String S = "Fruit";
                    if(Abox.isSelected() && Bbox.isSelected())
                        S = "Apple and Banana";

                    else if(Abox.isSelected())
                        S = "Apple";

                    else if(Bbox.isSelected())
                        S = "Banana";

                    else
                        S = "Fruit";

                    Atext.setText(S);
                    }
            }
    }



    class MainFruit
    {
       public static void main(String[] args)
     {
        Fruitbox Fruit = new Fruitbox();
        Fruit.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Fruit.setSize(300,300);
        Fruit.setVisible(true);
     }
    }

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете изменить размер JTextField, вызвав revalidate() в контейнере, который содержит JTextField из слушателя после установки его текста, так как это заставит ваших менеджеров компоновки перекомпоновать удерживаемые компоненты, но в целом лучше сделать JTextField больше для начала, используя конструктор, который поможет вам установить его столбцы. то есть измените это:

Atext = new JTextField("Fruit");

к этому:

Atext = new JTextField("Fruit", 25); // or some suitable value

или еще лучше

// avoid "magic" numbers by using constants and variables
Atext = new JTextField("Fruit", COLUMNS);  // where COLUMNS is a constant

Обратите внимание, что имена переменных по соглашению должны начинаться с буквы в нижнем регистре, и что, следуя этим соглашениям, другие смогут легче понять ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...