Java 如何在另一个JPanel中显示图像JPanel

Java 如何在另一个JPanel中显示图像JPanel,java,swing,Java,Swing,我尝试做的是一个带有JLabel和JField的JPanel类,一个带有插入图像选项的JPanel类,但是当我单独运行StdPoto类时,它可以很好地打开JFileChooser并在JPanel上显示图像,但是当我在测试类中运行它时,测试类仅显示StudentData类的组件,缺少StdPhoto 测试课上没有出现的照片面板 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.MouseAd

我尝试做的是一个带有JLabel和JField的JPanel类,一个带有插入图像选项的JPanel类,但是当我单独运行StdPoto类时,它可以很好地打开JFileChooser并在JPanel上显示图像,但是当我在测试类中运行它时,测试类仅显示StudentData类的组件,缺少StdPhoto

测试课上没有出现的照片面板

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.File;

public class StdPhoto extends JPanel {

    JLabel imageLabel = null;
    Icon stImage = null;
    JFileChooser fileChooser = null;
    FileNameExtensionFilter filter = null;
    File fChoose = null;

    public StdPhoto() {
        setLayout(new BorderLayout());
        fileChooser = new JFileChooser();
        filter = new FileNameExtensionFilter("Image Files", "jpg", "png", "gif", "jpeg");
        fileChooser.setFileFilter(filter);
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int result = fileChooser.showOpenDialog(null);
                if(result == JFileChooser.APPROVE_OPTION)
                    fChoose = fileChooser.getSelectedFile();
                String sName = fChoose.getAbsolutePath();
                stImage = new ImageIcon(sName);
                imageLabel = new JLabel("", stImage, JLabel.CENTER);                
                add(imageLabel, BorderLayout.CENTER);
                setPreferredSize(new Dimension(100, 100));
            }
        });
    }
}
类,该类在测试类中运行良好

import java.awt.Font;
import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class StudentData extends JPanel {

    /**
     * Create the panel.
     */


    public StudentData() {

        GridBagLayout gbLayout = new GridBagLayout();
        setLayout(gbLayout);
        GridBagConstraints gbc = new GridBagConstraints();

        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridheight = 1;
        gbc.gridwidth = 10;
        gbc.weightx = 0.2;
        JLabel stNameLabel = new JLabel("Student Name", SwingConstants.LEFT);
        stNameLabel.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(stNameLabel, gbc);
        add(stNameLabel);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridheight = 1;
        gbc.gridwidth = 5;
        JTextField stNameField = new JTextField(15);
        stNameField.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(stNameField, gbc);
        add(stNameField);

        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.gridheight = 1;
        gbc.gridwidth = 5;
        JLabel fNameLabel = new JLabel("Father Name", SwingConstants.LEFT);
        fNameLabel.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(fNameLabel, gbc);
        add(fNameLabel);

        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        JTextField fNameField = new JTextField(15);
        fNameField.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(fNameField, gbc);
        add(fNameField);


        gbc.gridx = 0;
        gbc.gridy = 3;
        JLabel pAddress = new JLabel("Permenant Address", SwingConstants.LEFT);
        pAddress.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(pAddress, gbc);
        add(pAddress);

        gbc.gridx = 1;
        gbc.gridy = 3;
        JTextField pAddressField = new JTextField(15);
        pAddressField.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(pAddressField, gbc);
        add(pAddressField);


        gbc.gridx = 0;
        gbc.gridy = 4;
        JLabel contactNo = new JLabel("Mobile No.", SwingConstants.LEFT);
        contactNo.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(contactNo, gbc);
        add(contactNo);

        gbc.gridx = 1;
        JTextField contactNoField = new JTextField(15);
        contactNoField.setFont(new Font("Calibri", Font.PLAIN, 14));
        gbLayout.setConstraints(contactNoField, gbc);
        add(contactNoField);

    }

}
测试类,我把两个框架放在一起

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Testing extends JFrame {

    public Testing() {
        setSize(400, 200);
        JPanel jp1 = new JPanel();
        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        jp1.setLayout(gbl);
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbl.setConstraints(new StudentData(), gbc);
        jp1.add(new StudentData());

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbl.setConstraints(new StdPhoto(), gbc);
        jp1.add(new StdPhoto());
        add(jp1);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Testing();
    }

}

“StdPhoto”的正确代码,在本例中工作正常,我首先初始化“JLabel”,然后执行其他工作

   import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.File;

public class StdPhoto extends JPanel {

    JLabel imageLabel = null;
    Icon stImage = null;
    JFileChooser fileChooser = null;
    FileNameExtensionFilter filter = null;
    File fChoose = null;
    Border border = null;
    TitledBorder title = null;

    public StdPhoto() {
        setLayout(new BorderLayout());
        imageLabel = new JLabel();
        border = BorderFactory.createLoweredBevelBorder();
        title = BorderFactory.createTitledBorder(border, "Picutre");
        title.setTitlePosition(TitledBorder.ABOVE_TOP);
        imageLabel.setBorder(title);
        imageLabel.setPreferredSize(new Dimension(150, 150));
        imageLabel.setMinimumSize(getPreferredSize());
        imageLabel.setMaximumSize(getPreferredSize());

        add(imageLabel);
        fileChooser = new JFileChooser();
        filter = new FileNameExtensionFilter("Image Files", "jpg", "png", "gif", "jpeg");
        fileChooser.setFileFilter(filter);
        imageLabel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int result = fileChooser.showOpenDialog(null);
                if(result == JFileChooser.APPROVE_OPTION)
                    fChoose = fileChooser.getSelectedFile();
                String sName = fChoose.getAbsolutePath();
                stImage = new ImageIcon(sName);
                imageLabel.setIcon(stImage);
            }
        });
    }
}

你能在第一段加上一些标点符号吗?这样你就更容易理解你想说的话了?目前很难确定哪些单词属于哪个句子,因此也很难确定它们的实际含义。最大的问题是
StdPhoto
组件的默认大小是
0x0
您是否打算将setPreferredSize()、setMaximumSize()和setMinimumSize()添加到StdPhoto中,如果这样,它就不起作用了“您的意思是……”我对此表示怀疑。但有一个提示:添加@MadProgrammer(或任何人,
@
很重要)以通知此人新的评论。@AndrewThompson我不会回复任何人,我只是这样做,所以我将其发布在这里