JAVA Swing类的一个问题,怎么让一个菜单项能在两个菜单里共存?
我刚学JAVA,学到了Swing,貌似一个组件是不能在两个地方出现的。我把一个菜单项给了顶部的菜单,然后又给了一个弹出菜单这时顶部菜单就没有那个菜单项了,为啥不让两个地方...
我刚学JAVA,学到了Swing,貌似一个组件是不能在两个地方出现的。
我把一个菜单项给了顶部的菜单,然后又给了一个弹出菜单
这时顶部菜单就没有那个菜单项了,为啥不让两个地方同时出现呢
就比如”复制“这个菜单项,在弹出菜单和顶部菜单里当然都要有了,但只能一个地方有,难道要构造两个一样的菜单项? 展开
我把一个菜单项给了顶部的菜单,然后又给了一个弹出菜单
这时顶部菜单就没有那个菜单项了,为啥不让两个地方同时出现呢
就比如”复制“这个菜单项,在弹出菜单和顶部菜单里当然都要有了,但只能一个地方有,难道要构造两个一样的菜单项? 展开
2个回答
展开全部
public class NewJFrame2 extends javax.swing.JFrame {
/** Creates new form NewJFrame2 */
public NewJFrame2() {
initComponents();
Action action = new AbstractAction("别点了") {
public void actionPerformed(ActionEvent e) {
System.out.println(e.getSource());
}
};
this.jMenu1.add(action);
this.jMenu2.add(action);
}
/** 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">
private void initComponents() {
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenu2 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jMenuBar1.setName("jMenuBar1"); // NOI18N
jMenu1.setText("File");
jMenu1.setName("jMenu1"); // NOI18N
jMenuBar1.add(jMenu1);
jMenu2.setText("Edit");
jMenu2.setName("jMenu2"); // NOI18N
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame2().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
// End of variables declaration
}
把视野放开,按钮作用是激发action,即便你两个一样的按钮目的还是为了激发同一个action,那么实际上你要只是一个action对应两个菜单而已,这就是解决方案。同样如果要两个一模一样的表格你大可不必要求一个JTable两个父容器,这是不可能的,更好的方法是两个JTable 共用一个TableModle就可以了,甚至是多个表格共用都没有问题。这种思想也是mvc的一部分,界面永远都是不同的,相同的只是数据和处理流程。上面的代码是Netbeans自动生成的,所以看起来很乱。
/** Creates new form NewJFrame2 */
public NewJFrame2() {
initComponents();
Action action = new AbstractAction("别点了") {
public void actionPerformed(ActionEvent e) {
System.out.println(e.getSource());
}
};
this.jMenu1.add(action);
this.jMenu2.add(action);
}
/** 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">
private void initComponents() {
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenu2 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jMenuBar1.setName("jMenuBar1"); // NOI18N
jMenu1.setText("File");
jMenu1.setName("jMenu1"); // NOI18N
jMenuBar1.add(jMenu1);
jMenu2.setText("Edit");
jMenu2.setName("jMenu2"); // NOI18N
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame2().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
// End of variables declaration
}
把视野放开,按钮作用是激发action,即便你两个一样的按钮目的还是为了激发同一个action,那么实际上你要只是一个action对应两个菜单而已,这就是解决方案。同样如果要两个一模一样的表格你大可不必要求一个JTable两个父容器,这是不可能的,更好的方法是两个JTable 共用一个TableModle就可以了,甚至是多个表格共用都没有问题。这种思想也是mvc的一部分,界面永远都是不同的,相同的只是数据和处理流程。上面的代码是Netbeans自动生成的,所以看起来很乱。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询