[英]how can i display image JPanel in another JPanel
这是我想要做的是一个带有 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);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.