`
ansjsun
  • 浏览: 199742 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
package ljsearchapp;

import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class Test1 extends JFrame {

    JTable t;

    public Test1() {
        setBounds(100, 100, 200, 200);
        JPanel pane = new JPanel();

        DefaultTableModel dm = new DefaultTableModel();
        dm.setDataVector(new Object[][]{{"Button 1", "foo"},
                    {"Button 2", "bar"},{"Button 2", "bar"},{"Button 2", "bar"},{"Button 2", "bar"},{"Button 2", "bar"}},
                new Object[]{"Button", "String"});

        t = new JTable(dm);




        t.getColumn("Button").setCellRenderer(new ButtonRenderer());
        t.getColumn("Button").setCellEditor(new ButtonEditor(new JTextField()));

        pane.setLayout(new FlowLayout());
        pane.add(t);
        this.add(pane);
        setVisible(true);
    }
}

class ButtonEditor extends DefaultCellEditor {

    protected JButton button;
    private String label;
    private boolean isPushed;

    public ButtonEditor(JTextField checkBox) {
        super(checkBox);
        this.setClickCountToStart(1);
        button = new JButton();
        button.setOpaque(true);
        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                fireEditingStopped();
            }
        });

    }

    public Component getTableCellEditorComponent(final 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);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(table.getSelectedRow()) ;
                System.out.println(table.getSelectedColumn()) ;
            }
        });
        isPushed = true;
        return button;
    }

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

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

    @Override
    public boolean shouldSelectCell(EventObject anEvent) {
        System.out.println(1);
        return super.shouldSelectCell(anEvent);
    }
    
    
    public static void main(String[] args){
        Test1 test1 = new Test1() ;
    }
}

class ButtonRenderer extends JButton implements TableCellRenderer {

    public ButtonRenderer() {
        setOpaque(true);
    }

    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("UIManager"));
        }
        setText((value == null) ? "" : value.toString());
        return this;
    }
}
分享到:
评论

相关推荐

    Swing中JTABLE中添加JBUTTON控件

    swing 中JTABLE中添加控件的例子 可以引申出添加很多控件

    使用 AbstractTableModel 构建Table 在表格中添加JButton按钮

    使用 AbstractTableModel 构建Table 在表格中添加JButton按钮,之前在网上找了2天没有找到好用的程序,最终终于找到一个好用的例子。 不要使,我退你们分。。 sing the Swing JTable class can quickly become a ...

    JTable表格单元加按钮,并且响应点击事件Demo.rar

    用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...

    如何在JTable的单元格里添加图片,Button组件,Label组件等等组件

    组件(JButton,JLable...)继承相应的组件,并且implements TableCellRenderer,图片的方式是,将图片添加该组件中就可以了,具体方式是加入到重写的方法中.this.setIcon("path"),就可以了 3.设置Table的...

    超市管理系统 Java Swing + MySQL JDBC开发

    添加2个JButton,分别用来实现商品查询及添加商品,效果图如图1所示。 2、在“商品名称”对应的JTextField中输入商品名称,单击“查询”:如果存在该商品,则显示如图2所示的窗体;若输入的名称不存在,则弹出“没...

    java+通讯录

    JButton tj=new JButton("添加"); JButton sc=new JButton("删除"); JButton cz=new JButton("查找"); JMenuBar bar=new JMenuBar(); JMenu wj=new JMenu("文件"); JMenu bj=new JMenu("编辑"); JMenu bz=new...

    JDBC实验报告.doc

    " "(3)左边面板中输入学生信息,点击"添加"按钮,将此学生信息插入stuinfo表 " "中,弹出插入是否成功的提示框。 " "(4)点击"删除"按钮,依据上边学号值删除该学生记录,弹出删除是否成功的提" "示框。 " "(5...

    Hostel-Management-System-FingerprintID:一个简单的 java SE 应用程序演示指纹识别系统。 初学者入门的好方法

    它使用所有可能的 Swing GUI 组件(jtable、jdatepicker、itext、Login、Signout、iReport、jtable、jtabbedpane、jbutton、jradiobutton、jcombobox、jslider、jtextarea、jmanubar、jtoolbar、jfilechooser、...

    列车管理系统

    jb_add=new JButton("添加"); jb_add.addActionListener(this); jb_rec=new JButton("修改"); jb_rec.addActionListener(this); jb_del=new JButton("删除"); jb_del.addActionListener(this); Create...

    学生信息系统

    JOptionPane.showMessageDialog(null, "添加成功", "温馨提示", JOptionPane.INFORMATION_MESSAGE); mf.freshTable("select * from 学生信息表"); 学号.setText(""); 姓名.setText(""); ...

    cyber_kustom_component:该框架旨在帮助开发接口,为组件提供易于编辑的特征

    要将新组件添加到netbeans面板,请。 可以通过下载Jar 版本0.1.0具有以下组件: -KTextField == JTextField; -KPasswordField == JPasswordField; -KButton == JButton; -KTable == JTable; -KComboBox == ...

    javaSE代码实例

    17.1.2 JavaSE 5.0中固定尺寸线程池的基本知识 374 17.1.3 自定义尺寸固定线程池的使用 375 17.1.4 单任务线程池的使用 377 17.1.5 可变尺寸线程池的使用 378 17.1.6 延迟线程池的使用 380 17.1.7 使用...

    Java开发技术大全 电子版

    14.8.2按钮(JButton)使用示例491 14.8.3文本框(JTextField)和密码框(JPasswordField)使用示例492 14.8.4文本区(JTextArea)使用示例496 14.8.5复选框(JcheckBox)使用示例498 14.8.6单选按钮...

    java初学者必看

    10.1.7 接口中定义常量 10.1.8 Cloneable接口 10.1.9 Cloneable接口应用 10.1.10 抽象类与接口区别 10.2 内部类概念 10.3 成员内部类 10.3.1 创建内部类对象 10.3.2 内部类的this引用 10.3.3 成员内部类的...

Global site tag (gtag.js) - Google Analytics