setUndecorated (true) содержимое JFrame не отображается - PullRequest
0 голосов
/ 29 марта 2019

Я создаю графический интерфейс с Java-свингом, который должен быть реализован на сенсорном ЖК-экране.Графический интерфейс будет занимать весь экран и не должен быть закрытым.Так что «setUndecorated (true)» имеет важное значение.Проблема, когда я использую его, все содержимое фрейма не отображается, только кнопки появляются, когда я наводю на них мышь.Тогда весь контент появляется, когда я максимизирую и минимизирую кадр.Вот код, который я использую:

public static void main(String[] args) {

    //Création de notre JFrame
    fenetre = new JFrame();
    fenetre.setTitle("IHM");
    fenetre.setSize(800, 600);
    fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fenetre.setLocationRelativeTo(null);

    support = new JPanel();

///////Adding content to the JPanel()/////////////

    fenetre.setContentPane(support);
    fenetre.setUndecorated(true);
    fenetre.setVisible(true);

}

Единственное решение, которое я нашел до сих пор, это изменить размер кадра после установки видимого кадра следующим образом:

fenetre.setSize(801, 601);
fenetre.setSize(800, 600);

Но я не совсем исправляю проблему, просто обхожу ее.

(РЕДАКТИРОВАТЬ) Мои извинения за этот неполный код.Вот полный пример, который вы можете проверить сами.Сначала протестируйте его с undecorated до false, затем попробуйте с undecorated до true и визуализируйте содержимое окна, максимизируя и минимизируя графический интерфейс.Наконец, попробуйте с помощью быстрого исправления в нижней части кода.

код:

package test;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class test {

    //Declarations
    private static JFrame fenetre;
    private static JPanel support;
    private static JLabel l1, l2;
    private static JComboBox<String> c1, c2;
    private static JButton b1, b2;

    //List to initiate the comboBoxes
    private static String[] listC1 = {"Peter", "Alex", "Jhon", "Bran"};
    private static String[] listC2 = {"10", "20", "32", "45"};

    public static void main(String[] args) {

        //Initialisation of the JFrame
        fenetre = new JFrame();
        fenetre.setTitle("IHM");
        fenetre.setSize(800, 600);
        fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenetre.setLocationRelativeTo(null);

        //Initialisation of the JPanel
        support = new JPanel();
        support.setBackground(Color.red);
        support.setPreferredSize(fenetre.getSize());

        //Initialisation of the components
        l1 = new JLabel("What's my name");
        l2 = new JLabel("What's my age");
        c1 = new JComboBox<String>(listC1);
        c2 = new JComboBox<String>(listC2);
        b1 = new JButton("validate name");
        b2 = new JButton("validate age");

        //Creating layout
        support.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        //Adding components
        gbc.fill = GridBagConstraints.BOTH;
        gbc.insets = new Insets(20, 20, 0, 0);
        gbc.gridx = 0;
        gbc.gridy = 0;
        support.add(l1, gbc);
        gbc.gridy = 1;
        support.add(c1, gbc);
        gbc.insets = new Insets(20, 20, 20, 0);
        gbc.gridy = 2;
        support.add(b1, gbc);

        gbc.insets = new Insets(20, 20, 0, 20);
        gbc.gridx = 1;
        gbc.gridy = 0;
        support.add(l2, gbc);
        gbc.gridy = 1;
        support.add(c2, gbc);
        gbc.insets = new Insets(20, 20, 20, 20);
        gbc.gridy = 2;
        support.add(b2, gbc);

        //Adding Listeners
        b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("My name is " + c1.getSelectedItem());
            }
        });

        b2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("My age is " + c2.getSelectedItem());
            }
        });

        //Adding the JPanel to the content pane of the JFrame
        fenetre.setContentPane(support);

        //Setting undecorated true (switch between true and false for testing)
        fenetre.setUndecorated(false);
        fenetre.setVisible(true);

        //Quick fix, uncomment to test
        //fenetre.setSize(801, 601);
        //fenetre.setSize(800, 600);

    }
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Проблема, когда я использую его, все содержимое фрейма не отображается, только кнопки появляются, когда я наводю на них мышь.

Компоненты должны быть добавлены к панели / рамке ДО того, как рамка станет видимой.

Если вы добавляете компоненты к видимому фрейму, тогда основная логика:

panel.add(...);
panel.revalidate(); // to invoke the layout manager
panel.repaint(); // make sure panel is repainted
0 голосов
/ 29 марта 2019

Вы не добавляете какие-либо кнопки к вашему JPanel, так как вы ожидаете, что они будут отображаться?

В любом случае, вот простой пример отображения кнопки:

JFrame fenetre = new JFrame();
fenetre.setTitle("IHM");
fenetre.setExtendedState(JFrame.MAXIMIZED_BOTH);
fenetre.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
fenetre.setLocationRelativeTo(null);

JPanel support = new JPanel();
JButton button = new JButton("button");
support.add(button);
fenetre.setContentPane(support);
fenetre.setVisible(true);

Обратите внимание, что вы должны использовать правильный макет .

Я также добавил setExtendedState(JFrame.MAXIMIZED_BOTH) для заполнения экрана и setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)так как вы не хотели, чтобы экран закрывался.

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