Java 在以下示例中,调整图片大小以适合jpanel
我已经做了这个程序,但我需要在jpanel图片的大小…不是与滚动条 有人能帮我吗 代码如下:Java 在以下示例中,调整图片大小以适合jpanel,java,eclipse,swing,Java,Eclipse,Swing,我已经做了这个程序,但我需要在jpanel图片的大小…不是与滚动条 有人能帮我吗 代码如下: public class ImageList { private JPanel gui; private JFileChooser fileChooser; FilenameFilter fileNameFilter; private JMenuBar menuBar; DefaultListModel model; ImageList() { gui = new JPanel(new G
public class ImageList {
private JPanel gui;
private JFileChooser fileChooser;
FilenameFilter fileNameFilter;
private JMenuBar menuBar;
DefaultListModel model;
ImageList() {
gui = new JPanel(new GridLayout());
JPanel imageViewContainer = new JPanel(new GridBagLayout());
final JLabel imageView = new JLabel();
imageViewContainer.add(imageView);
model = new DefaultListModel();
final JList imageList = new JList(model);
imageList.setCellRenderer(new IconCellRenderer());
ListSelectionListener listener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
Object o = imageList.getSelectedValue();
if (o instanceof BufferedImage) {
imageView.setIcon(new ImageIcon((BufferedImage)o));
}
}
};
imageList.addListSelectionListener(listener);
fileChooser = new JFileChooser();
String[] imageTypes = ImageIO.getReaderFileSuffixes();
FileNameExtensionFilter fnf = new FileNameExtensionFilter("Images", imageTypes);
fileChooser.setFileFilter(fnf);
File userHome = new File(System.getProperty("user.home"));
fileChooser.setSelectedFile(userHome);
fileNameFilter = new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return true;
}
};
menuBar = new JMenuBar();
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem browse = new JMenuItem("Browse");
menu.add(browse);
browse.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent ae) {
int result = fileChooser.showOpenDialog(gui);
if (result==JFileChooser.APPROVE_OPTION) {
File eg = fileChooser.getSelectedFile();
// this will be an image, we want the parent directory
File dir = eg.getParentFile();
try {
loadImages(dir);
} catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
gui,
e,
"Load failure!",
JOptionPane.ERROR_MESSAGE);
}
}
}
});
gui.add(new JSplitPane(
JSplitPane.HORIZONTAL_SPLIT,
new JScrollPane(
imageList,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER),
new JScrollPane(imageViewContainer)));
}
public void loadImages(File directory) throws IOException {
File[] imageFiles = directory.listFiles(fileNameFilter);
BufferedImage[] images = new BufferedImage[imageFiles.length];
model.removeAllElements();
for (int ii=0; ii<images.length; ii++) {
model.addElement(ImageIO.read(imageFiles[ii]));
}
}
public Container getGui() {
return gui;
}
public JMenuBar getMenuBar() {
return menuBar;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
ImageList imageList = new ImageList();
JFrame f = new JFrame("Image Browser");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.add(imageList.getGui());
f.setJMenuBar(imageList.getMenuBar());
f.setLocationByPlatform(true);
f.pack();
f.setSize(800,600);
f.setVisible(true);
}
});
}
}
class IconCellRenderer extends DefaultListCellRenderer {
private static final long serialVersionUID = 1L;
private int size;
private BufferedImage icon;
IconCellRenderer() {
this(100);
}
IconCellRenderer(int size) {
this.size = size;
icon = new BufferedImage(size,size,BufferedImage.TYPE_INT_ARGB);
}
@Override
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (c instanceof JLabel && value instanceof BufferedImage) {
JLabel l = (JLabel)c;
l.setText("");
BufferedImage i = (BufferedImage)value;
l.setIcon(new ImageIcon(icon));
Graphics2D g = icon.createGraphics();
g.setColor(new Color(0,0,0,0));
g.clearRect(0, 0, size, size);
g.drawImage(i,0,0,size,size,this);
g.dispose();
}
return c;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
}
公共类图像列表{
私有JPanel gui;
私有JFileChooser文件选择器;
FilenameFilter FilenameFilter;
私人杰门努巴·梅努巴;
默认列表模型;
ImageList(){
gui=newjpanel(newgridlayout());
JPanel imageViewContainer=新的JPanel(新的GridBagLayout());
最终JLabel imageView=新JLabel();
imageViewContainer.add(imageView);
model=新的DefaultListModel();
最终JList图像列表=新JList(型号);
setCellRenderer(新的IconCellRenderer());
ListSelectionListener=新建ListSelectionListener(){
@凌驾
公共作废值已更改(ListSelectionEvent lse){
对象o=imageList.getSelectedValue();
if(o BuffereImage的实例){
setIcon(新的ImageIcon((BufferedImage)o));
}
}
};
imageList.addListSelectionListener(listener);
fileChooser=newjfilechooser();
字符串[]imageTypes=ImageIO.GetReaderFileSuffix();
FileNameExtensionFilter fnf=新FileNameExtensionFilter(“图像”,图像类型);
setFileFilter(fnf);
File userHome=新文件(System.getProperty(“user.home”);
fileChooser.setSelectedFile(userHome);
fileNameFilter=newfilenamefilter(){
@凌驾
公共布尔接受(文件、字符串名称){
返回true;
}
};
menuBar=newjmenubar();
JMenu菜单=新JMenu(“文件”);
菜单栏。添加(菜单);
JMenuItem browse=新的JMenuItem(“浏览”);
菜单.添加(浏览);
browse.addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效行动(行动事件ae){
int result=fileChooser.showOpenDialog(gui);
if(result==JFileChooser.APPROVE\u选项){
File eg=fileChooser.getSelectedFile();
//这将是一个图像,我们需要父目录
File dir=例如getParentFile();
试一试{
加载图像(dir);
}捕获(例外e){
e、 printStackTrace();
JOptionPane.showMessageDialog(
桂,,
E
“负载故障!”,
JOptionPane.ERROR\u消息);
}
}
}
});
添加(新的JSplitPane)(
JSplitPane.HORIZONTAL_SPLIT,
新JScrollPane(
图像列表,
JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.水平滚动条,
新的JScrollPane(imageViewContainer));
}
公共void加载映像(文件目录)引发IOException{
File[]imageFiles=directory.listFiles(fileNameFilter);
BuffereImage[]images=新的BuffereImage[imageFiles.length];
model.removeAllElements();
对于(int ii=0;ii也许你应该看一看,听听一些想法。因为我知道有人会提到它,看看我在stackoverflow主题和其他方面尝试了很多方法,但我没有成功……如果你能帮我编写一个代码……我会很感激的。你可以使用,而不是使用ImageIcon,它会根据标签可用空间。因此,两个完全可运行的示例无法帮助您解决问题?不确定我们还能做些什么