[当前正在尝试将标题图像添加到基于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中,我已经开发了项目的布局,并且一切看起来不错,但是每次运行该项目时,图像都不会加载(没有错误...
使用@camickr提供的website,我能够使用其“ createImageIcon”方法成功渲染图像。