如何将图像添加到自定义JTable行按钮

joepa37

如何将图像添加到自定义的JTable行按钮,我在第一列中有一个带有JButton的JTable,我想放置一个图像,但这仅在单击时显示。

在此处输入图片说明

这是我的形象

在此处输入图片说明

这是将JButton放在JTable行中的JButtonRenderer和JButtonEditor

ButtonRenderer.java

import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;

/**
 *
 * @author joepa37
 */
public class ButtonRenderer extends JButton implements TableCellRenderer {

  public ButtonRenderer() {
    setOpaque(true);
  }

  @Override
  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {
    if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    } else {
      setForeground(table.getForeground());
      setBackground(UIManager.getColor("Button.background"));
    }
    setText((value == null) ? "" : value.toString());
    return this;
  }
}

ButtonEditor.java

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
 *
 * @author joepa37
 */

public class ButtonEditor extends DefaultCellEditor {
  protected JButton button;

  private String label;

  private boolean isPushed;

  public ButtonEditor(JCheckBox checkBox) {
    super(checkBox);
    button = new JButton(new ImageIcon(ButtonEditor.class.getResource("image.png")));
    button.setOpaque(true);
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        fireEditingStopped();
      }
    });
  }

  @Override
  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {
    if (isSelected) {
      button.setForeground(table.getSelectionForeground());
      button.setBackground(table.getSelectionBackground());
    } else {
      button.setForeground(table.getForeground());
      button.setBackground(table.getBackground());
    }
    label = (value == null) ? "" : value.toString();
    button.setText(label);
    isPushed = true;
    return button;
  }

  @Override
  public Object getCellEditorValue() {
    if (isPushed) {
      // 
      // 
      JOptionPane.showMessageDialog(button, label + ": Ouch!");
      // System.out.println(label + ": Ouch!");
    }
    isPushed = false;
    return new String(label);
  }

  @Override
  public boolean stopCellEditing() {
    isPushed = false;
    return super.stopCellEditing();
  }

  @Override
  protected void fireEditingStopped() {
    super.fireEditingStopped();
  }
}

imageRowButtonTable.java

import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;

/**
 *
 * @author joepa37
 */
public class imageRowButtonTable extends JFrame{
    public imageRowButtonTable(){
        super();

        this.add(getPreview());

        setSize(500,500);
        setVisible(true);
    }

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

    public Component getPreview ()
    {
        // Table
        JTable table = new JTable ( new ExampleTableModel () );
        JScrollPane scrollPane = new JScrollPane ( table );

        // Custom column
        TableColumn buttonColumn = table.getColumnModel ().getColumn ( 0 );

        // Custom renderer
        buttonColumn.setCellRenderer(new ButtonRenderer());

        // Custom editor
        buttonColumn.setCellEditor(new ButtonEditor(new JCheckBox()));

        return scrollPane;
    }

    public class ExampleTableModel extends AbstractTableModel
    {
        private String[] columnNames = { "", "Option"};
        private Object[][] data = { { "", "op1"}, 
                                    { "", "op2"}, 
                                    { "", "op3"},
                                };

        public final Object[] longValues = { "", "Option"};

        @Override
        public int getColumnCount ()
        {
            return columnNames.length;
        }

        @Override
        public int getRowCount ()
        {
            return data.length;
        }

        @Override
        public String getColumnName ( int col )
        {
            return columnNames[ col ];
        }

        @Override
        public Object getValueAt ( int row, int col )
        {
            return data[ row ][ col ];
        }

        @Override
        public Class getColumnClass ( int c )
        {
            return longValues[ c ].getClass ();
        }

        @Override
        public boolean isCellEditable ( int row, int col )
        {
            return true;
        }

        @Override
        public void setValueAt ( Object value, int row, int col )
        {
            data[ row ][ col ] = value;
            fireTableCellUpdated ( row, col );
        }
    }
}
alex2410

那是因为你没有设置图标ButtonRenderer,只是在ButtonEditor

1)您可以JButton按照在中实现的方式将图标设置为渲染器ButtonEditor

2)你可以存储Icon模型和dinamically设置为JButtonRenderer/Editor像未来:

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractCellEditor;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

public class TestFrame extends JFrame {

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        DefaultTableModel model = new DefaultTableModel(0,2);
        JTable t = new JTable(model);
        t.getColumnModel().getColumn(0).setCellRenderer(new ButtonCell());
        t.getColumnModel().getColumn(0).setCellEditor(new ButtonCell());
        ImageIcon icon = new ImageIcon(TestFrame.class.getResource("1.png"));
        model.addRow(new Object[]{icon,"test"});
        model.addRow(new Object[]{null,"test2"});
        model.addRow(new Object[]{icon,"test3"});

        add(new JScrollPane(t));
    }


    public static void main(String... s){
        new TestFrame();
    }

    private class ButtonCell extends AbstractCellEditor implements TableCellEditor, TableCellRenderer{

        private JButton btn;

        ButtonCell(){
            btn = new JButton();
            btn.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("clicked");
                }
            });
        }

        @Override
        public Object getCellEditorValue() {
            return null;
        }

        @Override
        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row,
                int column) {
            if(value instanceof Icon){
                btn.setIcon((Icon) value);
            } else {
                btn.setIcon(null);
            }
            return btn;
        }

        @Override
        public Component getTableCellEditorComponent(JTable table,
                Object value, boolean isSelected, int row, int column) {
            if(value instanceof Icon){
                btn.setIcon((Icon) value);
            } else {
                btn.setIcon(null);
            }
            return btn;
        }

    }

}

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将图像添加到自定义JTable行按钮

来自分类Dev

将图像添加到自定义按钮

来自分类Dev

Fullcalendar:如何将“链接”项添加到自定义按钮

来自分类Dev

如何将点击的信号和插槽添加到Qt中的自定义按钮

来自分类Dev

如何将按钮图标添加到自定义键盘iOS 8?

来自分类Dev

Fullcalendar:如何将“链接”项添加到自定义按钮

来自分类Dev

如何将后退按钮添加到自定义的UINavigationBar

来自分类Dev

如何将图像添加到自定义复选框的背面

来自分类Dev

如何将文本颜色按钮添加到高级自定义字段TinyMCE Basic工具栏?

来自分类Dev

如何将图像添加到动态创建的 JTable

来自分类Dev

如何将自定义按钮添加到AVPlayerViewController?

来自分类Dev

如何将自定义按钮添加到UIActivityViewController?

来自分类Dev

如何将自定义按钮添加到Summernote工具栏

来自分类Dev

如何将自定义按钮添加到UIActivityViewController?

来自分类Dev

如何将自定义投票按钮添加到Rails应用

来自分类Dev

如何将自定义图像标记添加到pagedown?

来自分类Dev

如何将自定义的不着色图像添加到UIBarButtonItem

来自分类Dev

如何将自定义EXIF标记添加到图像

来自分类Dev

如何将自定义图像添加到预输入下拉菜单?

来自分类Dev

如何将“复制到剪贴板”添加到自定义IntentChooser?

来自分类Dev

如何将变暗的背景添加到自定义UIPopoverBackgroundView

来自分类Dev

如何将Markdown编辑器添加到自定义django注释?

来自分类Dev

如何将数据添加到自定义HighChart的HighMaps地图?加入?

来自分类Dev

如何将inputAccessoryView添加到自定义键盘(iOS扩展)

来自分类Dev

如何将更多属性值添加到自定义对象

来自分类Dev

如何将结构添加到Azure IoT中心自定义应用程序

来自分类Dev

反应-如何将DOMAttribute添加到自定义组件?

来自分类Dev

如何将项目动态添加到ListView的自定义适配器

来自分类Dev

如何将Selecteditem或Clickevent添加到自定义日历?

Related 相关文章

  1. 1

    如何将图像添加到自定义JTable行按钮

  2. 2

    将图像添加到自定义按钮

  3. 3

    Fullcalendar:如何将“链接”项添加到自定义按钮

  4. 4

    如何将点击的信号和插槽添加到Qt中的自定义按钮

  5. 5

    如何将按钮图标添加到自定义键盘iOS 8?

  6. 6

    Fullcalendar:如何将“链接”项添加到自定义按钮

  7. 7

    如何将后退按钮添加到自定义的UINavigationBar

  8. 8

    如何将图像添加到自定义复选框的背面

  9. 9

    如何将文本颜色按钮添加到高级自定义字段TinyMCE Basic工具栏?

  10. 10

    如何将图像添加到动态创建的 JTable

  11. 11

    如何将自定义按钮添加到AVPlayerViewController?

  12. 12

    如何将自定义按钮添加到UIActivityViewController?

  13. 13

    如何将自定义按钮添加到Summernote工具栏

  14. 14

    如何将自定义按钮添加到UIActivityViewController?

  15. 15

    如何将自定义投票按钮添加到Rails应用

  16. 16

    如何将自定义图像标记添加到pagedown?

  17. 17

    如何将自定义的不着色图像添加到UIBarButtonItem

  18. 18

    如何将自定义EXIF标记添加到图像

  19. 19

    如何将自定义图像添加到预输入下拉菜单?

  20. 20

    如何将“复制到剪贴板”添加到自定义IntentChooser?

  21. 21

    如何将变暗的背景添加到自定义UIPopoverBackgroundView

  22. 22

    如何将Markdown编辑器添加到自定义django注释?

  23. 23

    如何将数据添加到自定义HighChart的HighMaps地图?加入?

  24. 24

    如何将inputAccessoryView添加到自定义键盘(iOS扩展)

  25. 25

    如何将更多属性值添加到自定义对象

  26. 26

    如何将结构添加到Azure IoT中心自定义应用程序

  27. 27

    反应-如何将DOMAttribute添加到自定义组件?

  28. 28

    如何将项目动态添加到ListView的自定义适配器

  29. 29

    如何将Selecteditem或Clickevent添加到自定义日历?

热门标签

归档