1

ダブルクリックしたときに、異なる行の特定の列値をターゲットにして(JXTableで)新しいフレームを開くにはどうすればよいですか?

ここに画像の説明を入力してください

私は今のところこのコードを持っています:

myTable.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    JXTable target = (JXTable)e.getSource();
                    int row = target.getSelectedRow();
                    int column = target.getTableColumn(3);  //for example the third column
                    new Detail().setVisible(true);

                }
            }
        });

このコードで解決:

     final JOptionPane pane = new JOptionPane((Frame) null, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION);

     final JDialog d = pane.createDialog((Frame) null, "Comments");
                   d.setModal(false);
                   d.setAlwaysOnTop(true);
                   d.pack();
     myTable.addMouseListener(new MouseAdapter() {
          public void mouseClicked(MouseEvent e) {
                   if (e.getClickCount() == 2) {
                          int row = myTable.rowAtPoint(e.getPoint());
                          Object value1 = myTable.getValueAt(row, 4);
                          pane.setMessage(value1);
                   if (!d.isVisible())
                   d.setLocationRelativeTo(myTable);
                   d.setVisible(true);
                   }
          }
      });

更新1:

@mKorbelが言ったように、私はこの例のようなJPopupMenu (@mKorbelによって提供されます)を使用したいと思います。しかし、JMenuItemがクリックされたときに開くJDialogを実装するにはどうすればよいですか。

private void createPopupMenu() {
        JPopupMenu popup = new JPopupMenu();
        JMenuItem MenuItemComments = new JMenuItem("Show Comments");
        JMenuItem MenuItemReference = new JMenuItem("Show Reference");
        popup.add(MenuItemComments);
        popup.add(MenuItemReference);

        MouseListener popupListener = new PopupListener(popup);
        Table_Employee.addMouseListener(popupListener);
    }

private class PopupListener extends MouseAdapter {
        private JPopupMenu popup;
        PopupListener(JPopupMenu popupMenu) {
            popup = popupMenu;
        }
        @Override
        public void mousePressed(MouseEvent e) {
            maybeShowPopup(e);
        }
        @Override
        public void mouseReleased(MouseEvent e) {
            if (Table_Employee.getSelectedRow() != -1) {
                maybeShowPopup(e);
            }
        }
        private void maybeShowPopup(MouseEvent e) {
            if (e.isPopupTrigger()) {

        // get row that pointer is over
        int row = Table_Employee.rowAtPoint(e.getPoint());

        // if pointer is over a selected row, show popup
        if (Table_Employee.isRowSelected(row)) {
           popup.show(e.getComponent(), e.getX(), e.getY());

        }
            }

        }


    }
4

1 に答える 1

2
  1. 実行時に新しいものを作成しないでくださいJ(X)Frame。このコンテナの内容は同じになります。その理由はありません。一度作成して、このコンテナを再利用し、画面に表示するhide / show)ために(setVisible(false / true)

  2. を作成しないでください。親をJ(X)Frame使用してを作成すると、ダイアログは中央に配置されます。J(X)DialogJXTableJXTables

  3. ListSelectionListener使用することもできますが、単一選択モデルを使用します

  4. JListJTableおよびについてのOracleチュートリアルを読んでくださいListSelectionListener。ロジックも同じでありSwingX components

  5. マウスやキーボードからの迷惑なイベントを避ける ために、JDialogを表示するためのコントロールとしてJPopupを使用します

編集

追加する必要があります

  • d.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE)、その後、にJDialog変更されるだけで閉じられることはありませんsetVisible(false);

  • JTable選択した行から値をコーディングする必要があります。

  • JTables行からにJComponent配置されたsに値を埋める新しい個別のvoidを作成しますJDialog

  • J(X)Tableに変更さselectionModeれていることを確認してくださいsingle selection

  • (必須ではありません)これJDialogで、画面上に配置できますが、画面にJDialogは表示されません

  • その後、を呼び出すd.setVisble(true)ために、このコード行をにラップすることをお勧めしますinvokeLater()。その後JDialog、すべての変更が完了すると表示されます。このイベントを最後に移動します。Event Dispatch Thread

于 2012-08-05T09:40:57.007 に答える