GridBagLayout是否会影响JLabel图像?

问题描述 投票:0回答:1

[当前正在尝试将标题图像添加到基于JFrame的GUI中,我已经开发了项目的布局,并且一切看起来都很好,但是每次运行该项目时,图像都不会加载(没有错误消息)。 >

我的代码(部分):

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.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;


public class DeltaFlightFrame extends JFrame implements ActionListener, ChangeListener{
    //<SNIPPED CODE FOR EASE OF VIEWING>



    //Labels for inputs
    //<SNIPPED CODE FOR EASE OF VIEWING>
    private JLabel deltaLogo;

    //icon
    private Icon logo;

   //<SNIPPED CODE FOR EASE OF VIEWING>


    DeltaFlightFrame() {
        GridBagConstraints layoutConst = null;


        //<SNIPPED CODE FOR EASE OF VIEWING>

        setTitle("Delta Flight Price Estimator");

        //<SNIPPED CODE FOR EASE OF VIEWING>

        //initialize delta logo
        logo = new ImageIcon("../img/logo.png");
        deltaLogo = new JLabel(logo);

        System.out.println("Height" + logo.getIconHeight());
        System.out.println("Width" + logo.getIconWidth());

        //<SNIPPED CODE FOR EASE OF VIEWING>

        // Create frame and add components using GridBagLayout
        setLayout(new GridBagLayout());
        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        //layoutConst.anchor = GridBagConstraints.LINE_START;
        layoutConst.gridx = 0;
        layoutConst.gridy = 0;
        //layoutConst.gridwidth = 4;
        add(deltaLogo, layoutConst);

        //<SNIPPED CODE FOR EASE OF VIEWING>
    }




    //TODO: this
    public void stateChanged(ChangeEvent event) {
    }

    //TODO, also: this
    public void actionPerformed(ActionEvent event) {

    }


    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception ignored){}
        DeltaFlightFrame myFrame = new DeltaFlightFrame();

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack();
        myFrame.setVisible(true);

    }
}

我的完整代码(我不想说全部,这真是令人作呕,我是大一学生,所以这不是...很好...哈哈哈):

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.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;


public class DeltaFlightFrame extends JFrame implements ActionListener, ChangeListener{
    //Text Fields
    private JTextField desCityField;  // Holds destination city abbreviation,
    private JTextField depCityField;  // Holds departure city abbreviation.
    private JTextField finalOutputField; //Shows final price

    //Drop Down
    //=====TODO

    //Labels for inputs
    private JLabel desCityLabel;
    private JLabel depCityLabel;
    private JLabel tripTypeLabel;
    private JLabel seatTypeLabel;
    private JLabel adultTravelerCountLabel;
    private JLabel childTravelerCountLabel;
    private JLabel finalOutput; //final price
    private JLabel flightTitle;
    private JLabel passengerTitle;
    private JLabel deltaLogo;

    //icon
    private Icon logo;

    //dropdown
    String[] seatClassChoices = { "Basic Economy", "Business+ Comfort", "First Class" };
    private JComboBox seatClassDrop;

    //JSpinners
    private JSpinner adultTravelerCount;
    private JSpinner childTravelerCount;

    //radio button
    private JRadioButton oneWay;
    private JRadioButton roundTrip;

    //Buttons
    private JButton calculateButton;



    /* Constructor creates GUI components and adds GUI components
      using a GridBagLayout. */

    DeltaFlightFrame() {
        GridBagConstraints layoutConst = null;
        SpinnerNumberModel spinnerModelAdult = null;
        SpinnerNumberModel spinnerModelChild = null;


        String desInit = "ATL";
        String depInit = "JFK";
        double priceInit = 150.00;

        int passCountMin = 0;
        int passCountMax = 9;
        int passAdultInit = 1;
        int passChildInit = 0;



        //Set Frame Title
        setTitle("Delta Flight Price Estimator");

        //create labels
        depCityLabel = new JLabel("Departure City: ");
        desCityLabel = new JLabel("Destination City: ");
        tripTypeLabel = new JLabel("Trip Type: ");
        seatTypeLabel = new JLabel("Seat Class: ");
        adultTravelerCountLabel = new JLabel("Travelling Adults: ");
        childTravelerCountLabel = new JLabel("Travelling Children: ");
        finalOutput = new JLabel("Price: ");


        flightTitle = new JLabel("Flight Information");
        flightTitle.setFont(new Font("Sans-Serif", Font.BOLD, 20));

        passengerTitle = new JLabel("Passenger Information");
        passengerTitle.setFont(new Font("Sans-Serif", Font.BOLD, 20));


        //create dropdown
        seatClassDrop = new JComboBox<String>(seatClassChoices);

        //create spinners
        spinnerModelAdult = new SpinnerNumberModel(passAdultInit, passCountMin, passCountMax, 1);
        adultTravelerCount = new JSpinner(spinnerModelAdult);

        spinnerModelChild = new SpinnerNumberModel(passChildInit, passCountMin, passCountMax, 1);
        childTravelerCount = new JSpinner(spinnerModelChild);

        //initialize delta logo
        logo = new ImageIcon("../img/logo.png");
        deltaLogo = new JLabel(logo);
        System.out.println("Height" + logo.getIconHeight());
        System.out.println("Width" + logo.getIconWidth());

        //initialize text fields
        desCityField = new JTextField("JFK");
        desCityField.setEditable(true);
        desCityField.setDocument(new LengthRestrictedDocument(3));
        desCityField.setColumns(3);

        depCityField = new JTextField("ATL");
        depCityField.setEditable(true);
        depCityField.setDocument(new LengthRestrictedDocument(3));
        depCityField.setColumns(3);

        //radio button
        oneWay = new JRadioButton("One Way");
        roundTrip = new JRadioButton("Round Trip");


        //button
        calculateButton = new JButton("Calculate");
        calculateButton.addActionListener(this);

        ButtonGroup tripType = new ButtonGroup();
        tripType.add(oneWay);
        tripType.add(roundTrip);

        // Create frame and add components using GridBagLayout


        setLayout(new GridBagLayout());
        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        //layoutConst.anchor = GridBagConstraints.LINE_START;
        layoutConst.gridx = 0;
        layoutConst.gridy = 0;
        //layoutConst.gridwidth = 4;
        add(deltaLogo, layoutConst);

        setLayout(new GridBagLayout());
        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        layoutConst.anchor = GridBagConstraints.LINE_START;
        layoutConst.gridx = 0;
        layoutConst.gridy = 1;
        layoutConst.gridwidth = 4;
        add(flightTitle, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        layoutConst.anchor = GridBagConstraints.LINE_START;
        layoutConst.gridx = 0;
        layoutConst.gridy = 2;
        layoutConst.gridwidth = 1;
        add(desCityLabel, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        layoutConst.anchor = GridBagConstraints.LINE_START;
        layoutConst.gridx = 2;
        layoutConst.gridy = 2;
        layoutConst.gridwidth = 1;
        add(depCityLabel, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 10);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 1;
        layoutConst.gridy = 2;
        layoutConst.gridwidth = 1;

        add(desCityField, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 10);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 3;
        layoutConst.gridy = 2;
        layoutConst.gridwidth = 1;
        add(depCityField, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 0;
        layoutConst.gridy = 4;
        layoutConst.gridwidth = 1;
        add(roundTrip, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 10);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 2;
        layoutConst.gridy = 4;
        layoutConst.gridwidth = 2;
        add(seatClassDrop, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 1, 1);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 0;
        layoutConst.gridy = 5;
        layoutConst.gridwidth = 1;
        add(oneWay, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(50, 10, 1, 1);
        layoutConst.anchor = GridBagConstraints.LINE_START;
        layoutConst.gridx = 0;
        layoutConst.gridy = 6;
        layoutConst.gridwidth = 4;
        add(passengerTitle, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 10, 1);
        layoutConst.fill = GridBagConstraints.LINE_START;
        layoutConst.gridx = 0;
        layoutConst.gridy = 7;
        layoutConst.gridwidth = 1;
        add(adultTravelerCountLabel, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 10, 10);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 1;
        layoutConst.gridy = 7;
        layoutConst.gridwidth = 1;
        add(adultTravelerCount, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 10, 10);
        layoutConst.fill = GridBagConstraints.LINE_START;
        layoutConst.gridx = 2;
        layoutConst.gridy = 7;
        layoutConst.gridwidth = 1;
        add(childTravelerCountLabel, layoutConst);

        layoutConst = new GridBagConstraints();
        layoutConst.insets = new Insets(10, 10, 10, 10);
        layoutConst.fill = GridBagConstraints.HORIZONTAL;
        layoutConst.gridx = 3;
        layoutConst.gridy = 7;
        layoutConst.gridwidth = 1;
        add(childTravelerCount, layoutConst);
    }




    //TODO: this
    public void stateChanged(ChangeEvent event) {
    }

    //TODO, also: this
    public void actionPerformed(ActionEvent event) {

    }


    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception ignored){}
        DeltaFlightFrame myFrame = new DeltaFlightFrame();

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack();
        myFrame.setVisible(true);

    }
}

我确实在这里弄乱了。

logo = new ImageIcon("../img/logo.png");
deltaLogo = new JLabel(logo);
System.out.println("Height: " + logo.getIconHeight());
System.out.println("Width: " + logo.getIconWidth());

结果是:

高度:-1宽度:-1

如果这是一个起点,我确实觉得很奇怪。

所以,我的问题是:我用GridBagLayout进行的设置是否会影响JLabel图像的显示?

当前正在尝试将标题图像添加到基于JFrame的GUI中,我已经开发了项目的布局,并且一切看起来不错,但是每次运行该项目时,图像都不会加载(没有错误...

java swing jlabel imageicon
1个回答
1
投票

使用@camickr提供的website,我能够使用其“ createImageIcon”方法成功渲染图像。

© www.soinside.com 2019 - 2024. All rights reserved.