- 正在通过数据库添加我的菜单项。
- 如果用户选择了特定的菜单项,我必须执行诸如打开新 jframe 之类的操作。
- 此处将菜单维度添加到 Menubar ,并在其下添加各种菜单项,例如从数据库中获取的 Period 、 Entity 。
现在我想在点击 Period menuitem 时打开一个新的 jframe。
public void MenuExp(){ JMenu DimensionMenu = new JMenu("Dimension"); JMenu editMenu = new JMenu("Help"); jMenuBar1.add(DimensionMenu); jMenuBar1.add(editMenu); //JMenuItem newAction = new JMenuItem("Account"); //fileMenu.add(newAction); //JMenuItem newPeriod = new JMenuItem("Period"); //fileMenu.add(newPeriod); try{ Class.forName("oracle.jdbc.OracleDriver"); Connection comm = (Connection)DriverManager.getConnection("jdbc:oracle:thin:@192.168.100.25:1521:orcl","SYSTEM","Admin123"); Statement st = comm.createStatement(); String Query = "select OBJECT_NAME from RAHUL_APP1.HSP_OBJECT where OBJECT_TYPE = 2 AND OBJECT_ID <> 30" ; //and User_Name ='" + jTextField1.getText()+"'"; ResultSet rs = st.executeQuery(Query); while(rs.next()){ JMenuItem newAction = new JMenuItem(rs.getString(1)); DimensionMenu.add(newAction); rs.close(); st.close(); comm.close(); newAction.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0){ System.out.println("You have clicked on the Account"); } }); } } catch(Exception e){ JOptionPane.showMessageDialog(this,e); } }
最佳答案
您需要对框架进行一些参数化,或者将例如框架类也存储在数据库中并使用反射对其进行初始化...
更新:
实现可以是这样的:
package betlista.so.swing.menuitemdialogsfromdb;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class MainFrame extends JFrame {
public MainFrame() {
super("Frame");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
add(createMenu());
pack();
}
private JMenuBar createMenu() {
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Open");
menu.add(new DialogCreatingMenuItem("Dialog 1", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog1"));
menu.add(new DialogCreatingMenuItem("Dialog 2", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog2"));
menuBar.add(menu);
return menuBar;
}
class DialogCreatingMenuItem extends JMenuItem implements ActionListener {
String className;
public DialogCreatingMenuItem(String text, String className) throws HeadlessException {
super(text);
this.className = className;
addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent ae) {
try {
Class<JDialog> clazz = (Class<JDialog>)Class.forName(this.className);
JDialog dialog = clazz.newInstance();
dialog.setVisible(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public static class MyDialog1 extends JDialog {
public MyDialog1() {
setTitle("Dialog 1");
add(new JLabel("Dialog 1"));
pack();
}
}
public static class MyDialog2 extends JDialog {
public MyDialog2() {
setTitle("Dialog 2");
add(new JLabel("Dialog 2"));
pack();
}
}
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
}
字符串在
menu.add(new DialogCreatingMenuItem("Dialog 1", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog1"));
menu.add(new DialogCreatingMenuItem("Dialog 2", "betlista.so.swing.menuitemdialogsfromdb.MainFrame$MyDialog2"));
从数据库中检索...
关于java - 如何将 Action 列表器添加到 jmenuitem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25746846/