繁体   English   中英

如何在JTable上添加JButton

[英]How to add JButton at JTable

我有7列的JTable。 我想在第七栏添加带有图标的JButton。

所以我有这个:

mappa= modelManager.getContoBancarioManager().getContiBancari(null,WFConst.CONTO_BANCARIO_PUBBLICO);
//fontTable = new Font("Century Gothic", Font.PLAIN, 15);
tableModelContiBancari = new MyTableModelContiBancari();
tableContiBancari= new JTable(tableModelContiBancari);

tableModelContiBancari.stampaTabella(mappa);
tableContiBancari.addMouseListener(new MyMouseAdapterTableConti());
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(tableContiBancari);
jScrollPane.setPreferredSize(dTabella);


Toolkit t = Toolkit.getDefaultToolkit();
Dimension screenSize = t.getScreenSize();
Double larghezza =screenSize.getWidth()*0.95;
//    System.out.println(larghezza);
int lar = (int) (larghezza /90);
int lar2 = (int)(larghezza /5);
tableContiBancari.getColumnModel().getColumn(0).setPreferredWidth(10);
tableContiBancari.getColumnModel().getColumn(1).setPreferredWidth(lar2);
tableContiBancari.getColumnModel().getColumn(2).setPreferredWidth(lar);
tableContiBancari.getColumnModel().getColumn(3).setPreferredWidth(lar);
tableContiBancari.getColumnModel().getColumn(4).setPreferredWidth(lar);
tableContiBancari.getColumnModel().getColumn(5).setPreferredWidth(lar);
tableContiBancari.getColumnModel().getColumn(6).setPreferredWidth(lar);

Action delete = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
    //to do
    System.out.println("pp");
    }
};

ButtonColumn buttonColumn = new ButtonColumn(tableContiBancari, delete, 7);
buttonColumn.setMnemonic(KeyEvent.VK_D);

这是ButtonColumn类:

public void daiProprietaJTableContiBancari(){
    mappa= modelManager.getContoBancarioManager().getContiBancari(null,WFConst.CONTO_BANCARIO_PUBBLICO);
    //fontTable = new Font("Century Gothic", Font.PLAIN, 15);
    tableModelContiBancari = new MyTableModelContiBancari();
    tableContiBancari= new JTable(tableModelContiBancari);
    tableContiBancari.addKeyListener(new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_F5)
                cambiaTipologiaConti();
        }
    });
    tableModelContiBancari.stampaTabella(mappa);
    //tableContiBancari.setFont(fontTable);
    tableContiBancari.addMouseListener(new MyMouseAdapterTableConti());
    jScrollPane = new JScrollPane();
    jScrollPane.setViewportView(tableContiBancari);
    jScrollPane.setPreferredSize(dTabella);

    tableContiBancari.setRowHeight(25);

    Toolkit t = Toolkit.getDefaultToolkit();
    Dimension screenSize = t.getScreenSize();
    Double larghezza =screenSize.getWidth()*0.95;
    //    System.out.println(larghezza);
    int lar = (int) (larghezza /90);
    int lar2 = (int)(larghezza /5);
    tableContiBancari.getColumnModel().getColumn(0).setPreferredWidth(10);
    tableContiBancari.getColumnModel().getColumn(1).setPreferredWidth(lar2);
    tableContiBancari.getColumnModel().getColumn(2).setPreferredWidth(lar);
    tableContiBancari.getColumnModel().getColumn(3).setPreferredWidth(lar);
    tableContiBancari.getColumnModel().getColumn(4).setPreferredWidth(lar);
    tableContiBancari.getColumnModel().getColumn(5).setPreferredWidth(lar);
    tableContiBancari.getColumnModel().getColumn(6).setPreferredWidth(lar);

    DefaultTableCellRenderer renderer_archivi = new DefaultTableCellRenderer();
    renderer_archivi.setHorizontalAlignment(SwingConstants.RIGHT);
    tableContiBancari.getColumnModel().getColumn(4).setCellRenderer(renderer_archivi);
    tableContiBancari.getColumnModel().getColumn(5).setCellRenderer(renderer_archivi);
    tableContiBancari.getColumnModel().getColumn(6).setCellRenderer(renderer_archivi);

    Action delete = new AbstractAction()
    {
        public void actionPerformed(ActionEvent e)
        {
        //to do
        System.out.println("pp");
        }
    };

    ButtonColumn buttonColumn = new ButtonColumn(tableContiBancari, delete, 7);
    buttonColumn.setMnemonic(KeyEvent.VK_D);
    //tableContiBancari.getColumnModel().getColumn(7).setCellRenderer(new ButtonRenderer());
    //tableContiBancari.getColumnModel().getColumn(7).setCellEditor(new ButtonEditor(new JCheckBox()));
    //setUpColumnButton(tableContiBancari, tableContiBancari.getColumnModel().getColumn(7));
}

如果尝试运行代码,则在最后一列中有一个带有JButton的JTable,但是如果尝试单击一个JButton,则该动作将不会执行。

您需要实现自己TableCellRenderer并使其方法getTableCellRendererComponent返回JButton为您列。 请参阅教程

查看“ 表格按钮列”中的一种方法。

您将文本添加到列中的方式与处理任何其他列相同,然后将ButtonColumn类用作:

  1. renderer -使文本显示在按钮上
  2. editor -因此您可以单击按钮以调用操作。

您还必须为ButtonColumn类提供一个Action Action将有权访问单击按钮的行。 您可以轻松地使用行号来删除该行,例如,也可以使用该行从表中获取数据并进行其他处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM