JPopupMenu trong TextPane(vùng sọn thảo) dùng Eclipse

jb_hoangluan

Member
10/10/10
82
0
6
Khai Báo:
PHP:
private JPopupMenu pMenu = null;
Cài đặt:
PHP:
	private JPopupMenu getPMenu() {
		if (pMenu == null) {
			pMenu = new JPopupMenu();

			pMenu.add(getPMenuItemUndo());
			pMenu.addSeparator();
			pMenu.add(getPMenuItemCut());
			pMenu.add(getPMenuItemCopy());
			pMenu.add(getPMenuItemPaste());
			pMenu.add(getPMenuItemDel());
			pMenu.addSeparator();
			pMenu.add(getJMenuItemSel());
		}
		return pMenu;
	}
Sử dụng:
PHP:
	private JTextPane getTxtPane() {
		if (txtPane == null) {
			txtPane = new JTextPane();
			txtPane.setFont(new Font("Courier New", Font.PLAIN, 16));

			txtPane.addKeyListener(new KeyAdapter() {
				public void keyTyped(KeyEvent e){
					if(!DocumentIsSaved){
						mnuItemSave.setEnabled(true);
						mnuItemUndo.setEnabled(true);
						mnuItemFind.setEnabled(true);
						
						DocumentIsSaved = true;
					}
				}
			});
			
			txtPane.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseReleased(java.awt.event.MouseEvent e) {
					if(e.isPopupTrigger()){
						pMenu.show(e.getComponent(), e.getX(), e.getY());
						e.consume();
					}
				}
			});
		}
		return txtPane;
	}
Không tài nào add JPopupMenu vào TextPane được....
Có người kêu, Dùng Jface để làm. Mong cái bạn chỉ giáo...

Mình đã bỏ 1 ngày vì cái này...huhu
Chậm quá...

Mong các bạn giúp với...
 

jb_hoangluan

Member
10/10/10
82
0
6
Ðề: JPopupMenu trong TextPane(vùng sọn thảo) dùng Eclipse

không làm như thế này được
getPMenu().setLocation(evt.getLocation())
//evt.getLocation() lấy vị trí click chuột
getPMenu().setVisible(true);
chỉ:
getPMenu().setLocation(e.getLocationOnScreen());
Và ko chạy được
 

JackV

Administrator
Staff member
Ðề: JPopupMenu trong TextPane(vùng sọn thảo) dùng Eclipse

=)) quy tắc là vậy, chạy được hay không là do code và cấu trúc chương trình của bạn, ai biết được.

PHP:
public class NewJFrame extends javax.swing.JFrame {

    /** Creates new form NewJFrame */
    public NewJFrame() {
        initComponents();
        setSize(400, 400);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPopupMenu1 = new javax.swing.JPopupMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        jCheckBoxMenuItem1 = new javax.swing.JCheckBoxMenuItem();
        jRadioButtonMenuItem1 = new javax.swing.JRadioButtonMenuItem();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextPane1 = new javax.swing.JTextPane();

        jMenuItem1.setText("jMenuItem1");
        jPopupMenu1.add(jMenuItem1);

        jMenuItem2.setText("jMenuItem1");
        jPopupMenu1.add(jMenuItem2);
        jPopupMenu1.add(jSeparator1);

        jCheckBoxMenuItem1.setSelected(true);
        jCheckBoxMenuItem1.setText("jCheckBoxMenuItem1");
        jPopupMenu1.add(jCheckBoxMenuItem1);

        jRadioButtonMenuItem1.setSelected(true);
        jRadioButtonMenuItem1.setText("jRadioButtonMenuItem1");
        jPopupMenu1.add(jRadioButtonMenuItem1);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        jTextPane1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTextPane1MouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jTextPane1);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(60, 70, 239, 125);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTextPane1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextPane1MouseClicked
        if (evt.getButton() == evt.BUTTON3){
            jPopupMenu1.setLocation(evt.getLocationOnScreen());
            jPopupMenu1.setVisible(true);
        }
    }//GEN-LAST:event_jTextPane1MouseClicked

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JCheckBoxMenuItem jCheckBoxMenuItem1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JPopupMenu jPopupMenu1;
    private javax.swing.JRadioButtonMenuItem jRadioButtonMenuItem1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JTextPane jTextPane1;
    // End of variables declaration//GEN-END:variables

}
PHP:
        if (evt.getButton() == evt.BUTTON3){
            jPopupMenu1.setLocation(evt.getLocationOnScreen());
            jPopupMenu1.setVisible(true);
        }
cũng chỉ 2 thao tác là set location và hiện thị thôi.
 

jb_hoangluan

Member
10/10/10
82
0
6
Ðề: JPopupMenu trong TextPane(vùng sọn thảo) dùng Eclipse

ok...

vậy Huy biết code Eclipse hả?
Cứ tưởng là ko bít...

Mong được chỉ giáo nhiu..^^