开发者社区> 问答> 正文

java中如何在表格中添加组件

getColumnModel().getColumn(1).setCellRenderer()能告诉我怎样在表格中添加组件,如何是按钮,能点击那种

展开
收起
蛮大人123 2016-05-31 14:46:45 3698 0
2 条回答
写回答
取消 提交回答
  • 不要直接用系统的,自定义CellRenderer接口,实现自己的render组件即可
    2019-07-17 19:21:56
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪
    class JTableButtonRenderer implements TableCellRenderer {
     private TableCellRenderer __defaultRenderer;
    
     public JTableButtonRenderer(TableCellRenderer renderer) {
      __defaultRenderer = renderer;
     }
    
     public Component getTableCellRendererComponent(JTable table, Object value,
       boolean isSelected, boolean hasFocus, int row, int column) {
      if (value instanceof Component)
       return (Component) value;
      return __defaultRenderer.getTableCellRendererComponent(table, value,
        isSelected, hasFocus, row, column);
     }
    }
    
    class JTableButtonModel extends AbstractTableModel {
     private Object[][] __rows = { { "One", new JButton("Button One") },
       { "Two", new JButton("Button Two") },
       { "Three", new JButton("Button Three") },
       { "Four", new JButton("Button Four") } };
    
     private String[] __columns = { "Numbers", "Buttons" };
    
     public String getColumnName(int column) {
      return __columns[column];
     }
    
     public int getRowCount() {
      return __rows.length;
     }
    
     public int getColumnCount() {
      return __columns.length;
     }
    
     public Object getValueAt(int row, int column) {
      return __rows[row][column];
     }
    
     public boolean isCellEditable(int row, int column) {
      return false;
     }
    
     public Class getColumnClass(int column) {
      return getValueAt(0, column).getClass();
     }
    }
    
    class JTableButtonMouseListener implements MouseListener {
     private JTable __table;
    
     private void __forwardEventToButton(MouseEvent e) {
      TableColumnModel columnModel = __table.getColumnModel();
      int column = columnModel.getColumnIndexAtX(e.getX());
      int row = e.getY() / __table.getRowHeight();
      Object value;
      JButton button;
      MouseEvent buttonEvent;
    
      if (row >= __table.getRowCount() || row < 0
        || column >= __table.getColumnCount() || column < 0)
       return;
    
      value = __table.getValueAt(row, column);
    
      if (!(value instanceof JButton))
       return;
    
      button = (JButton) value;
    
      buttonEvent = (MouseEvent) SwingUtilities.convertMouseEvent(__table, e,
        button);
      button.dispatchEvent(buttonEvent);
      // This is necessary so that when a button is pressed and released
      // it gets rendered properly. Otherwise, the button may still appear
      // pressed down when it has been released.
      __table.repaint();
     }
    
     public JTableButtonMouseListener(JTable table) {
      __table = table;
     }
    
     public void mouseClicked(MouseEvent e) {
      __forwardEventToButton(e);
     }
    
     public void mouseEntered(MouseEvent e) {
      __forwardEventToButton(e);
     }
    
     public void mouseExited(MouseEvent e) {
      __forwardEventToButton(e);
     }
    
     public void mousePressed(MouseEvent e) {
      __forwardEventToButton(e);
     }
    
     public void mouseReleased(MouseEvent e) {
      __forwardEventToButton(e);
     }
    }
    --------------------------------------------
    
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Window;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    
    import javax.swing.*;
    import javax.swing.table.TableCellRenderer;
    
    public final class JTableButton extends JFrame {
     private JTable __table;
     private JScrollPane __scrollPane;
    
     public JTableButton() {
      super("JTableButton Demo");
      TableCellRenderer defaultRenderer;
    
      __table = new JTable(new JTableButtonModel());
      defaultRenderer = __table.getDefaultRenderer(JButton.class);
      __table.setDefaultRenderer(JButton.class, new JTableButtonRenderer(
        defaultRenderer));
      __table.setPreferredScrollableViewportSize(new Dimension(400, 200));
      __table.addMouseListener(new JTableButtonMouseListener(__table));
    
      __scrollPane = new JScrollPane(__table);
      setContentPane(__scrollPane);
     }
    
     public static void main(String[] args) {
      Frame frame;
      WindowListener exitListener;
    
      exitListener = new WindowAdapter() {
       public void windowClosing(WindowEvent e) {
        Window window = e.getWindow();
        window.setVisible(false);
        window.dispose();
        System.exit(0);
       }
      };
    
      frame = new JTableButton();
      frame.addWindowListener(exitListener);
      frame.pack();
      frame.setVisible(true);
     }
    }
    2019-07-17 19:21:56
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载