当前位置: 代码迷 >> J2SE >> JTable单元格编辑有关问题
  详细解决方案

JTable单元格编辑有关问题

热度:230   发布时间:2016-04-24 12:30:57.0
JTable单元格编辑问题
如下代码所示,我在表格中的一个单元格中添加了一个面板,上面有一个按钮添加了监听事件。但现在鼠标点击上面的按钮时没反应,好像是鼠标无法获取面板中的组件。不知道怎么解决,恳求各位高手指点一下,不胜感激。
代码如下:
Java code
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableCellRenderer;public class TableDemo extends JFrame {    private String[] columnNames = {"姓  名", "操作"};//记录表格的列名    JTable table;    public TableDemo() {        Container cp = this.getContentPane();        JPanel panel = new JPanel();        table = this.createJTable(columnNames);        table.getColumnModel().getColumn(1).setCellRenderer(new PanelTableCellRender());//让第二列显示一个特定的面板        DefaultTableModel model = (DefaultTableModel) this.table.getModel();        model.addRow(new Object[] {"Zidane", new PanelDemo()});        model.addRow(new Object[] {"Henry", new PanelDemo()});        JScrollPane scrollPane = new JScrollPane(table);                panel.setSize(300, 200);        panel.add(scrollPane);        cp.add(panel);        setVisible(true);        setBounds(300, 200, 500, 300);    }    /**     * 新建一个JTable对象     * @param list     * @param columnNames     * @return     */    public JTable createJTable(String columnNames[]) {        DefaultTableModel model = new DefaultTableModel();        for(int i = 0; i < columnNames.length; i++) {            model.addColumn(columnNames[i]);        }        JTable temporaryTable = new JTable(model);        temporaryTable.setFont(new Font("微软雅黑", Font.ROMAN_BASELINE, 23));        temporaryTable.getTableHeader().setBackground(Color.MAGENTA);        temporaryTable.getTableHeader().setFont(new Font("微软雅黑", Font.BOLD, 20));        temporaryTable.setRowHeight(75);        return temporaryTable;    }    /**     * 该类实现了表格中“操作”那一列单元格的绘制     * @author lxb 2011-08-24     */    class PanelTableCellRender extends PanelDemo implements TableCellRenderer {        @Override        public Component getTableCellRendererComponent(JTable table,                Object value, boolean isSelected, boolean hasFocus, int row,                int column) {            if (hasFocus)                  setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));              else                 setBorder(null);            return this;        }    }    /**     * @param args     */    public static void main(String[] args) {        TableDemo demo = new TableDemo();    }}


Java code
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class PanelDemo extends JPanel implements ActionListener {    JButton button;    JLabel viewLabel;    public PanelDemo() {        button = new JButton("编辑");        button.setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 18));        button.addActionListener(this);        viewLabel = new JLabel();        viewLabel.setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 18));        viewLabel.setSize(80, 40);                this.add(button);        this.add(viewLabel);    }    @Override    public void actionPerformed(ActionEvent e) {        if(e.getSource() == button) {            button.setBackground(Color.magenta);            viewLabel.setText("编辑!");        }    }}



------解决方案--------------------
用的字体是微软雅黑的,这个跨平台使用可能会有影响的
------解决方案--------------------
Swing很久没用了,帮顶一个
------解决方案--------------------
学习下哈
  相关解决方案