简体   繁体   English

java:带有2个按钮的对话框,用于事件“点击Jtable单元格”?

[英]java: dialog with 2 button for event “click on Jtable cell”?

I have a jtable with "data" in my java project: 我的java项目中有一个带有“data”的jtable:

DefaultTableModel model=(DefaultTableModel)jTablePolicyView.getModel();
            for(Policy policy : sngltn.GetPerPolicies(cstmr.getPer()))
            {
                model.addRow(new Object[] {String.valueOf(policy.getPolicyId()),...,....});
            }

I want that : 我要那个 :

  1. for clicking on each cell in my jtable , will spring a dialog (not Form...). 单击我的jtable中的每个单元格将弹出一个对话框 (而不是Form ...)。
  2. will be two buttons (with "my label") on this dialog . 在此对话框中两个按钮 (带有“我的标签”)。
  3. i will be able to determine what action will happen (this action should use the contents of the cell ) for clicking each button . 我将能够确定将发生什么操作 (此操作应使用单元格的内容来单击每个按钮

So what I'm asking? 那我在问什么?

  1. Is it possible? 可能吗?

  2. Example code, greatly help me... 示例代码,对我有很大帮助......

Thank! 谢谢!


i try this code for my first mission(for clicking on each cell in my jtable)... but it's didnt work, why? 我尝试这个代码用于我的第一个任务(点击我的jtable中的每个单元格)......但它没有用,为什么?

my code: 我的代码:

 public class UpdateCstmrForm extends javax.swing.JFrame 
 {
    ......        
       public UpdateCstmrForm(long person_id) throws Exception 
       {
               DefaultTableModel model=(DefaultTableModel)jTablePolicyView.getModel();
                .....
               initComponents();
               .....
                  for(Policy policy : sngltn.GetPerPolicies(cstmr.getPer()))
                  {
                    model.addRow(new Object[]  {......});
                  }                         
               jTablePolicyView.addMouseListener(new MouseAdapter() 
               {
                 public void mouseClicked(MouseEvent e) 
                 {
                   if (e.getClickCount() == 2) 
                   {
                        JTable target = (JTable)e.getSource();
                        int row = target.getSelectedRow();
                        int column = target.getSelectedColumn();
                        System.out.println(model.getValueAt(row, column));
                   }
                 }
               }
         ..... 
      }
 }

You need to use a custom editor. 您需要使用自定义编辑器。 The following example should get you started: 以下示例可以帮助您入门:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

/*
 * The editor button that brings up the dialog.
 */
//public class TablePopupEditor extends AbstractCellEditor
public class TablePopupEditor extends DefaultCellEditor
    implements TableCellEditor
{
    private PopupDialog popup;
    private String currentText = "";
    private JButton editorComponent;

    public TablePopupEditor()
    {
        super(new JTextField());

        setClickCountToStart(1);

        //  Use a JButton as the editor component

        editorComponent = new JButton();
        editorComponent.setBackground(Color.white);
        editorComponent.setBorderPainted(false);
        editorComponent.setContentAreaFilled( false );

        // Make sure focus goes back to the table when the dialog is closed
        editorComponent.setFocusable( false );

        //  Set up the dialog where we do the actual editing

        popup = new PopupDialog();
    }

    public Object getCellEditorValue()
    {
        return currentText;
    }

    public Component getTableCellEditorComponent(
        JTable table, Object value, boolean isSelected, int row, int column)
    {

        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                popup.setText( currentText );
//              popup.setLocationRelativeTo( editorComponent );
                Point p = editorComponent.getLocationOnScreen();
                popup.setLocation(p.x, p.y + editorComponent.getSize().height);
                popup.show();
                fireEditingStopped();
            }
        });

        currentText = value.toString();
        editorComponent.setText( currentText );
        return editorComponent;
    }

    /*
    *   Simple dialog containing the actual editing component
    */
    class PopupDialog extends JDialog implements ActionListener
    {
        private JTextArea textArea;

        public PopupDialog()
        {
            super((Frame)null, "Change Description", true);

            textArea = new JTextArea(5, 20);
            textArea.setLineWrap( true );
            textArea.setWrapStyleWord( true );
            KeyStroke keyStroke = KeyStroke.getKeyStroke("ENTER");
            textArea.getInputMap().put(keyStroke, "none");
            JScrollPane scrollPane = new JScrollPane( textArea );
            getContentPane().add( scrollPane );

            JButton cancel = new JButton("Cancel");
            cancel.addActionListener( this );
            JButton ok = new JButton("Ok");
            ok.setPreferredSize( cancel.getPreferredSize() );
            ok.addActionListener( this );

            JPanel buttons = new JPanel();
            buttons.add( ok );
            buttons.add( cancel );
            getContentPane().add(buttons, BorderLayout.SOUTH);
            pack();

            getRootPane().setDefaultButton( ok );
        }

        public void setText(String text)
        {
            textArea.setText( text );
        }

        /*
        *   Save the changed text before hiding the popup
        */
        public void actionPerformed(ActionEvent e)
        {
            if ("Ok".equals( e.getActionCommand() ) )
            {
                currentText = textArea.getText();
            }

            textArea.requestFocusInWindow();
            setVisible( false );
        }
    }

    private static void createAndShowUI()
    {
        String[] columnNames = {"Item", "Description"};
        Object[][] data =
        {
            {"Item 1", "Description of Item 1"},
            {"Item 2", "Description of Item 2"},
            {"Item 3", "Description of Item 3"}
        };

        JTable table = new JTable(data, columnNames);
        table.getColumnModel().getColumn(1).setPreferredWidth(300);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane(table);

        // Use the popup editor on the second column

        TablePopupEditor popupEditor = new TablePopupEditor();
        table.getColumnModel().getColumn(1).setCellEditor( popupEditor );

        JFrame frame = new JFrame("Popup Editor Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JTextField(), BorderLayout.NORTH);
        frame.add( scrollPane );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }

}

It demonstrates how to use a JTextArea as an editor for a cell. 它演示了如何使用JTextArea作为单元格的编辑器。

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

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