2013-09-03 9 views
5

JMenuItemを追加したい場合は、JMenuを閉じずに追加します。メニューにはJTextFieldが含まれています。テキストフィールドでenterを押すと、メニュー項目が追加されました。私の問題は、追加されたメニュー項目のサイズが小さすぎることです。メニューを閉じずにmenuuitをメニューに動的に追加する

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 
} 

私がEnterキーを押しているとき、メニューはメニュー項目を追加しますが、その幅は小さすぎます。

私はそれをどのように修正することができますか?

+0

なぜ 'メニューを閉じずに'?クイッククローズとオープンは肉眼では見えず、問題を解決します。 –

答えて

2

再ペイントする代わりに、メニューを閉じてから再度開きます。ちょうどそれを試して、それは素晴らしい、それはすぐにその場で塗り直すように動作します。

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

あなたは呼び出し、jMenu1のポップアップメニューを更新する必要があります。

jMenu1.getPopupMenu().pack(); 

代わりの

jMenuItem.repaint(); 
jMenuItem.revalidate(); 
関連する問題