2013-09-03 34 views
5

Tôi muốn thêm JMenuItem mà không đóng JMenu. Một menu chứa JTextField, Khi tôi nhấn enter trong trường văn bản, nó sẽ thêm một mục menu. Vấn đề của tôi là kích thước của mục menu được thêm quá nhỏ.Tự động thêm menuitem vào menu mà không đóng menu

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JMenuItem; 
import javax.swing.JTextField; 

public class NewJFrame extends javax.swing.JFrame { 

public NewJFrame() { 
    initComponents(); 
    this.jMenu1.addSeparator(); 
    final JTextField jTextField = new JTextField("Menu 1",20); 
    this.jMenu1.add(jTextField); 

    jTextField.addActionListener(new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      final JMenuItem jMenuItem = new JMenuItem(jTextField.getText()); 
      jMenu1.add(jMenuItem); 
      jMenuItem.repaint(); 
      jMenuItem.revalidate(); 

     }  
    }); 

} 

@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 
private void initComponents() { 

    jMenuBar1 = new javax.swing.JMenuBar(); 
    jMenu1 = new javax.swing.JMenu(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jMenu1.setText("File"); 
    jMenuBar1.add(jMenu1); 

    setJMenuBar(jMenuBar1); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 400, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 279, Short.MAX_VALUE) 
    ); 

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

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.JMenu jMenu1; 
private javax.swing.JMenuBar jMenuBar1; 
// End of variables declaration//GEN-END:variables 
} 

Khi tôi nhấn enter, menu thêm một mục trình đơn, nhưng chiều rộng của nó là quá nhỏ.

Làm cách nào để khắc phục sự cố?

+0

Tại sao 'mà không đóng menu'? Việc đóng và mở nhanh không thể nhìn thấy bằng mắt thường và khắc phục sự cố. –

Trả lời

2

Thay vì sơn lại, hãy đóng menu và mở lại. Chỉ cần thử nó và nó hoạt động tuyệt vời, nó nhanh như sơn lại tại chỗ.

jMenu1.add(jMenuItem); 
//jMenuItem.repaint(); 
//jMenuItem.revalidate(); 
MenuElement[] selectionPath = MenuSelectionManager.defaultManager().getSelectedPath(); 
MenuSelectionManager.defaultManager().clearSelectedPath(); 
MenuSelectionManager.defaultManager().setSelectedPath(selectionPath); 
5

Bạn cần phải cập nhật các popupMenu của jMenu1, gọi:

jMenu1.getPopupMenu().pack(); 

thay vì

jMenuItem.repaint(); 
jMenuItem.revalidate(); 
Các vấn đề liên quan