Java 如何在另一个JPanel中显示图像JPanel
我尝试做的是一个带有JLabel和JField的JPanel类,一个带有插入图像选项的JPanel类,但是当我单独运行StdPoto类时,它可以很好地打开JFileChooser并在JPanel上显示图像,但是当我在测试类中运行它时,测试类仅显示StudentData类的组件,缺少StdPhoto 测试课上没有出现的照片面板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
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我不会回复任何人,我只是这样做,所以我将其发布在这里