簡體   English   中英

Java在表格單元格中添加JLayeredPane?

[英]Java add JLayeredPane in a table cell?

是否可以在JTable添加JLayeredPane()

我試過了:

     JLayeredPane agentPicturePane = new JLayeredPane();
     String agentPicture = "http://www.domain.com/uploads/thumb_23.jpg";

     try {
         final BufferedImage image = resize(new URL(agentPicture), new Dimension(60, 60));
         jLabel1.setIcon(new javax.swing.ImageIcon(image));
     } catch (Exception ex) {

     }

     jLabel6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/imageBg.png")));

     jLabel1.setBounds(13, 13, 60, 60);
     jLabel6.setBounds(0, 0, 86, 86);
     agentPicturePane.setPreferredSize(new Dimension(86, 86));
     agentPicturePane.add(jLabel6, new Integer(50));
     agentPicturePane.add(jLabel1, new Integer(100));

     visitorModel.addRow(new Object[] {
         agentPicturePane, visitorName, visitorClose
     });

使用模型:

        visitorModel = new DefaultTableModel(productss, colNamee) { 
            @Override
            public boolean isCellEditable(int row, int column) {
               //all cells false
               return false;
            }     
            public Class getColumnClass(int column) {
            //  return getValueAt(0, column).getClass();
                return (column == 0 || column == 2) ? Icon.class : Object.class;
            }
        }; 

有什么想法可以做到這一點?

你混淆了你的責任范圍。 TableModel僅假設攜帶數據。 由視圖決定如何呈現數據。

如果您需要提供某種自定義渲染,那么您需要提供TableCellRenderer

此示例使用復合JLabelEmptyBorder來提供疊加功能。

所以使用下面的兩張圖片......

在此輸入圖像描述在此輸入圖像描述

我能夠生產......

在此輸入圖像描述

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class LayeredCellRenderer {

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

    public LayeredCellRenderer() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }

                    BufferedImage pic = ImageIO.read(new File("Photo01.jpg"));

                    DefaultTableModel model = new DefaultTableModel(
                            new Object[][]{{pic, "Sophia", ""}},
                            new Object[]{"Picture", "Name", "Close"});

                    JTable table = new JTable(model);
                    table.setRowHeight(86);
                    table.getColumnModel().getColumn(0).setCellRenderer(new SecutiryBadgeTableCellRenderer());

                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new JScrollPane(table));
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
    }

    public static class SecutiryBadgeTableCellRenderer extends DefaultTableCellRenderer {

        protected static BufferedImage background;
        private JLabel subImage;

        public SecutiryBadgeTableCellRenderer() {
            try {
                background = ImageIO.read(new File("Background.jpg"));
                setIcon(new ImageIcon(background));
                setLayout(new GridBagLayout());
                subImage = new JLabel();
                subImage.setHorizontalAlignment(JLabel.LEFT);
                subImage.setVerticalAlignment(JLabel.TOP);
                subImage.setBorder(new EmptyBorder(30, 10, 0, 0));
                add(subImage);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, null, isSelected, hasFocus, row, column);
            if (value instanceof Image) {
                Image img = (Image) value;
                subImage.setIcon(new ImageIcon((Image) value));
                subImage.setSize(subImage.getPreferredSize());
            } else {
                subImage.setIcon(null);
            }
            return this;
        }
    }
}

有關更多詳細信息,請參閱使用自定義渲染器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM