Глюк загрузки JFrame - PullRequest
       32

Глюк загрузки JFrame

0 голосов
/ 23 декабря 2018

Может кто-нибудь помочь мне с моим кодом, пожалуйста.Я испытываю странное поведение в Eclipse.

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

После загрузки отображения графического интерфейсаправильно только когда я изменяю размеры границ JFrame, но я хотел бы загружать каждый раз правильно.Я думаю, у меня есть некоторые проблемы в моем коде, но я не могу его найти.И, между прочим, я использую Linux Mint 19.1 Tarra с java-11-openjdk-amd64.Вот код для основного класса:

package gui;


public class Main {

/**
 * @param args
 */
public static void main(String[] args) {
    new Dakijevstina();
}

}

А вот код класса GUI:

package gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;


@SuppressWarnings("serial")
public class Dakijevstina extends JFrame{

Font font = new Font("TimesNew Roman", Font.PLAIN, 12);

public Dakijevstina() {
    initComponents();
}

public void initComponents() {
    //setting up JFrame     
    setTitle("Market garden financial software");
    setFont(font);
    setLayout(new BorderLayout());
    setSize(640, 480);
    setDefaultCloseOperation(Dakijevstina.EXIT_ON_CLOSE);
    setLocationByPlatform(true);
    setVisible(true);

    //setting up North JPanel
    JPanel pnlNorth = new JPanel(new FlowLayout(FlowLayout.LEFT));
    pnlNorth.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    add(pnlNorth, BorderLayout.NORTH);

    //setting up StatusBar
    JPanel pnlSouth = new JPanel(new FlowLayout(FlowLayout.LEFT));
    pnlSouth.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    add(pnlSouth, BorderLayout.SOUTH);

    //adding buttons to north JPanel
    //About
    JButton btnAbout = new JButton();
    JButton btnExit = new JButton();
    try {
        Image img = ImageIO.read(getClass().getResource("/images/about.png"));
        Image img2 = ImageIO.read(getClass().getResource("/images/exit.png"));
        btnAbout.setIcon(new ImageIcon(img));
        btnExit.setIcon(new ImageIcon(img2));
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(this, ex);
    }
    btnAbout.setPreferredSize(new Dimension(40, 40));
    btnAbout.setMinimumSize(new Dimension(40, 40));
    btnAbout.setToolTipText("Information about author");
    btnExit.setPreferredSize(new Dimension(40, 40));
    btnExit.setMinimumSize(new Dimension(40, 40));
    btnExit.setToolTipText("Exit application");
    btnExit.addActionListener(e -> exitApp());
    pnlNorth.add(btnAbout);
    pnlNorth.add(btnExit);

    //adding StatusBar to south JPanel
    JLabel status = new JLabel("Welcome to Dakijevstina software");
    status.setFont(font);
    pnlSouth.add(status);
}

//event handlers
public void exitApp() {
    this.dispose();
}

Это то, что я получаю большую часть времени: нежелательное поведение

И вот как это должно быть: это то, что я хочу

...