JFrame не открывается в Eclipse Mac - PullRequest
0 голосов
/ 11 апреля 2019

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

Я на Mac Mojave и Eclipse Версия: Oxygen.2 Release (4.7.2)

Это работает нормально, если яЯ запускаю программу через командную строку

Ниже мой код

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import org.saurav.simpletests.io.HttpClientTester;

public class HelloWorldSwing {

    public static void main (String[] args) {

        JFrame  frame  = new JFrame("Swing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel usernameLabel = new JLabel("Username");
        frame.getContentPane().add(usernameLabel);

        JTextField userText = new JTextField();
        frame.getContentPane().add(userText);


        JLabel passwordLabel = new JLabel("password");
        frame.getContentPane().add(passwordLabel);

        JTextField passwordText = new JTextField();
        frame.getContentPane().add(passwordText);

        JButton button = new JButton("Submit");
        frame.getContentPane().add(button);
        button.addActionListener(e -> {
            // TODO Auto-generated method stub
            String userName = userText.getText();

            String password = passwordText.getText();

            HttpClientTester httpClientTester = new HttpClientTester();
            httpClientTester.executeHttp(Constants.URL, userName, password);
        });
        frame.setSize(100,100);
        frame.pack();
        frame.setVisible(true);
    }
}

Ответы [ 3 ]

3 голосов
/ 11 апреля 2019

См. Комментарии в следующих MCVE:

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class HelloWorldSwing {

    public static void main (String[] args) {

        JFrame  frame  = new JFrame("Swing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        /*
         * JFrame (content pane) uses BorderLayout as default.
         * getContentPane().add(c) adds c to BorderLayout.CENTER location which
         * can hold only one component, so each add() overwrite the previous one.
         * One solution is to use another layout manager like FlowLayout
         */
        frame.getContentPane().setLayout(new FlowLayout());

        JLabel usernameLabel = new JLabel("Username");
        frame.getContentPane().add(usernameLabel);

        JTextField userText = new JTextField(10); //set text field size
        frame.getContentPane().add(userText);

        JLabel passwordLabel = new JLabel("password");
        frame.getContentPane().add(passwordLabel);

        JTextField passwordText = new JTextField(10); //set text field size
        frame.getContentPane().add(passwordText);

        JButton button = new JButton("Submit");
        frame.getContentPane().add(button);
        button.addActionListener(e -> {});//this is not needed to demonstrate the problem
        //frame.setSize(100,100); do not set size. Let pack set the size 
        frame.pack();
        frame.setVisible(true);
    }
}

enter image description here

2 голосов
/ 11 апреля 2019

A setSize вызов с последующим вызовом pack не имеет особого смысла. Что делает pack :

Устанавливает размер этого окна в соответствии с предпочтительным размером и компоновкой его подкомпонентов. Результирующая ширина и высота окна автоматически увеличиваются, если любое из измерений меньше минимального размера, указанного в предыдущем вызове метода setMinimumSize. [...]

Либо не pack, если вы строго хотите, чтобы размер вызова вызывал setSize, либо не setSize и у вас есть подходящие предпочтительные размеры (и, если необходимо, минимальные размеры) для компонентов в вашем окне.

0 голосов
/ 11 апреля 2019

Проблема была связана с загрузкой классов.

У меня было несколько классов, которые использовали зависимости SWT, которые были в пути к классам. Похоже, что у SWT и Swing есть проблемы для сосуществования.

Как только я удалил зависимости SWT, на экране появилась рамка.

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