почему иногда качается JPanel макет автоматически изменяется до минимума - PullRequest
0 голосов
/ 05 декабря 2018

, когда я дважды щелкаю по банке, отображается обычная кнопка, текстовое поле и метка отображаются, как и ожидалось.enter image description here, но через некоторое время размер JPanel автоматически изменяется до минимального, как показано ниже.Я уже установил фрейм setResizable (false) enter image description here Кто-нибудь может дать некоторые идеи?

    public TestSwing() {
        super(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        log = new JTextArea(18, 45);
        log.setMargin(new Insets(5, 5, 5, 5));
        log.setEditable(true);
        logScrollPane = new JScrollPane(log);
        DefaultCaret caret = (DefaultCaret) log.getCaret();
        caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

        btn_source = new JButton("open");
        btn_dest = new JButton("open");
        lbl_sourceFile = new JLabel("Source Excel File:");
        lbl_destFile = new JLabel("Destination XML Folder:");
        txt_source = new JTextField(45);
        txt_dest = new JTextField(45);
        btn_convert = new JButton("Convert");

        c.fill = GridBagConstraints.VERTICAL;
        c.insets = new Insets(0, 0, 0, 0);
        c.gridx = 0;
        c.gridy = 0;
        c.gridwidth = 1;
        add(lbl_sourceFile, c);

        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;
        c.gridy = 0;
        c.gridwidth = 1;
        add(txt_source, c);

        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 2;
        c.gridy = 0;
        c.insets = new Insets(0, 10, 2, 0);
        c.gridwidth = 1;
        add(btn_source, c);
    }

    public void actionPerformed(ActionEvent e) {}

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("TestLink Converter");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TestSwing());
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                UIManager.put("swing.boldMetal", Boolean.FALSE);
                createAndShowGUI();
            }
        });
    }
}

1 Ответ

0 голосов
/ 05 декабря 2018
frame.add(new TLSwing());

Мы не знаем, что такое класс "TLSing ()", но я думаю, что это панель, которая использует GridBagLayout.Если для отображения компонента в его предпочтительном размере недостаточно места, компонент будет отображаться с минимальным размером, поэтому ваши текстовые компоненты уменьшаются.

Я уже установил фрейм setResizable (false)

Вы должны установить состояние изменения размера ДО того, как упакуете () кадр.

frame.setResizable(false);
frame.pack();
frame.setVisible(true);
//frame.setResizable(false);
...