Hallo,
habe folgendes Problem:
Bei einer Swing-Anwendung habe ich eine JMenuBar-Leiste mit einem JMenu-Objekt. Dieses Objekt erhält eine Kürzel zum Aufruf und eine Hinweisbeschreibung durch TooltipText-Methode:
[CODE lang="java" title="JMenuSwing" highlight="54"]package lection3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SwingFrame extends JFrame{
private JTextField jtfStatus;
private JMenuBar menuLeiste;
private JMenu menu;
private String web, save, help, info, system;
String ttNew, ttWeb, ttSave,ttHelp, ttInfo, ttSystem;
String strNew, strWeb, strSave, strHelp, strInfo, strSystem;
JMenu jmDate, jmOpen;
Action actionOpen, actionNew, actionWeb, actionSave, actionHelp, actionInfo, actionSystem;
JMenuItem jmiNew, jmiWeb, jmiSave, jmiHelp, jmiInfo, jmiSystem;
public SwingFrame(){
super("Swing-Frame mit Menue");
setSize(400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = this.getContentPane();
createMenu();
jtfStatus = new JTextField();
jtfStatus.setBackground(Color.BLACK);
jtfStatus.setForeground(Color.WHITE);
jtfStatus.setEditable(false);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(BorderLayout.SOUTH, jtfStatus);
contentPane.add(BorderLayout.CENTER, panel);
setVisible(true);
}
public static void main(String [] args){ new SwingFrame(); }
public JMenuItem createAbstractActionObject(JMenu jMenu, JMenuItem jMenuItem, Action aa, String item, String inhalt){
aa = new AbstractAction(item){
public void actionPerformed(ActionEvent ae){
jtfStatus.setText(inhalt + "...\" gewählt");
}
};
jMenuItem = jMenu.add(aa);
//jMenuItem
return jMenuItem;
}
public void createMenu(){
menuLeiste = new JMenuBar();
jmDate = new JMenu("Datei");
jmDate.setMnemonic('d');
jmDate.setToolTipText("MenuDatei");
jmOpen = new JMenu("\u00d6ffnen");
jmOpen.setMnemonic('O');
actionNew = new AbstractAction("Neu"){
public void actionPerformed(ActionEvent aa){
jtfStatus.setText("\"Datei - Neu...\" gew\u00e4hlt");
}
};
jmiNew = jmDate.add(actionNew);
jmiNew.setToolTipText("Erstelle eine neue Datei");
jmiNew.setMnemonic('n');
jmDate.add(jmOpen);
jmOpen.setToolTipText("\u00e4ffne eine neue Datei");
jmOpen.setMnemonic('n');
ttWeb = "Webseite besuchen";
strWeb = "Web";
web = "\"Datei - zur Web wechseln...\" gew\u00e4hlt";
jmiWeb = createAbstractActionObject(jmOpen,jmiWeb, actionWeb,strWeb, web);
jmiWeb.setMnemonic('w');
jmiWeb.setToolTipText(ttWeb);
ttSave = "Speichere die Datei";
strSave = "Speichern";
save = "\"Datei - Speichern in...\" gew\u00e4hlt";
jmiSave = createAbstractActionObject(jmDate, jmiSave,actionSave,strSave, save);
jmiSave.setMnemonic('S');
jmiSave.setToolTipText(ttSave);
jmDate.addSeparator();
strHelp = "Hilfe";
help = "\"Datei - Hilfe holen...\" gew\u00e4hlt";
jmiHelp = createAbstractActionObject(jmDate, jmiHelp, actionHelp, strHelp, help);
jmiHelp.setMnemonic('h');
jmiHelp.setToolTipText(ttHelp);
ttInfo = "Information aufrufen";
strInfo = "Info";
info = "\"Datei - Informationen holen...\" gew\u00e4hlt";
jmiInfo = createAbstractActionObject(jmDate, jmiInfo, actionInfo, strInfo, info);
jmiInfo.setMnemonic('i');
jmiInfo.setToolTipText(ttInfo);
ttSystem = "Dateieinstellungen prüfen";
strSystem = "DateiSystem";
system = "\"Datei - Dateieinstellung...\" gew\u00e4hlt";
jmiSystem = createAbstractActionObject(jmOpen, jmiSystem,actionSystem, strSystem, system);
jmiSystem.setMnemonic('b');
jmiSystem.setToolTipText(ttSystem);
//jmDate.add(jmiNew);
//jmDate.add(jmOpen);
//jmDate.add(jmiSave);
//jmDate.addSeparator();
//jmDate.add(jmiHelp);
//jmDate.add(jmiInfo);
//jmOpen.add(jmiSystem);
//jmOpen.add(jmiWeb);
//menuLeiste.add(Box.createHorizontalGlue());
//menuLeiste.setMargin(new Insets(0, 30, 0, 20));
menuLeiste.add(jmDate);
this.setJMenuBar(menuLeiste);
}
}[/CODE]
In einem Endergebnis werden die Kürzeln für Jmenu-Objekt und für seine Item-Objekte erstellt, die ich danach kreiere und zu dem JMenu-Objekt zuweise. Beim JMenu-Objekt kann ich den Kürzel wenigsten aufrufen ALT+D, doch für Item-Objekte funktioniert das nicht.
In der Anwendung habe ich zusetzlich Event-Objekte verwendet (Action von AbstractAction), es heißt, dass diese Objekte können auch die Methode setMnemonic() verwenden, doch nichts da. Deshalb habe ich die Action-Objekte zu den JMenuItem-Objekten umgewandelt, aber die Kürzeln werden weder angezeigt, noch funktionieren sie.
Könnt mir Eine weiterhelfen?
habe folgendes Problem:
Bei einer Swing-Anwendung habe ich eine JMenuBar-Leiste mit einem JMenu-Objekt. Dieses Objekt erhält eine Kürzel zum Aufruf und eine Hinweisbeschreibung durch TooltipText-Methode:
[CODE lang="java" title="JMenuSwing" highlight="54"]package lection3;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SwingFrame extends JFrame{
private JTextField jtfStatus;
private JMenuBar menuLeiste;
private JMenu menu;
private String web, save, help, info, system;
String ttNew, ttWeb, ttSave,ttHelp, ttInfo, ttSystem;
String strNew, strWeb, strSave, strHelp, strInfo, strSystem;
JMenu jmDate, jmOpen;
Action actionOpen, actionNew, actionWeb, actionSave, actionHelp, actionInfo, actionSystem;
JMenuItem jmiNew, jmiWeb, jmiSave, jmiHelp, jmiInfo, jmiSystem;
public SwingFrame(){
super("Swing-Frame mit Menue");
setSize(400, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = this.getContentPane();
createMenu();
jtfStatus = new JTextField();
jtfStatus.setBackground(Color.BLACK);
jtfStatus.setForeground(Color.WHITE);
jtfStatus.setEditable(false);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(BorderLayout.SOUTH, jtfStatus);
contentPane.add(BorderLayout.CENTER, panel);
setVisible(true);
}
public static void main(String [] args){ new SwingFrame(); }
public JMenuItem createAbstractActionObject(JMenu jMenu, JMenuItem jMenuItem, Action aa, String item, String inhalt){
aa = new AbstractAction(item){
public void actionPerformed(ActionEvent ae){
jtfStatus.setText(inhalt + "...\" gewählt");
}
};
jMenuItem = jMenu.add(aa);
//jMenuItem
return jMenuItem;
}
public void createMenu(){
menuLeiste = new JMenuBar();
jmDate = new JMenu("Datei");
jmDate.setMnemonic('d');
jmDate.setToolTipText("MenuDatei");
jmOpen = new JMenu("\u00d6ffnen");
jmOpen.setMnemonic('O');
actionNew = new AbstractAction("Neu"){
public void actionPerformed(ActionEvent aa){
jtfStatus.setText("\"Datei - Neu...\" gew\u00e4hlt");
}
};
jmiNew = jmDate.add(actionNew);
jmiNew.setToolTipText("Erstelle eine neue Datei");
jmiNew.setMnemonic('n');
jmDate.add(jmOpen);
jmOpen.setToolTipText("\u00e4ffne eine neue Datei");
jmOpen.setMnemonic('n');
ttWeb = "Webseite besuchen";
strWeb = "Web";
web = "\"Datei - zur Web wechseln...\" gew\u00e4hlt";
jmiWeb = createAbstractActionObject(jmOpen,jmiWeb, actionWeb,strWeb, web);
jmiWeb.setMnemonic('w');
jmiWeb.setToolTipText(ttWeb);
ttSave = "Speichere die Datei";
strSave = "Speichern";
save = "\"Datei - Speichern in...\" gew\u00e4hlt";
jmiSave = createAbstractActionObject(jmDate, jmiSave,actionSave,strSave, save);
jmiSave.setMnemonic('S');
jmiSave.setToolTipText(ttSave);
jmDate.addSeparator();
strHelp = "Hilfe";
help = "\"Datei - Hilfe holen...\" gew\u00e4hlt";
jmiHelp = createAbstractActionObject(jmDate, jmiHelp, actionHelp, strHelp, help);
jmiHelp.setMnemonic('h');
jmiHelp.setToolTipText(ttHelp);
ttInfo = "Information aufrufen";
strInfo = "Info";
info = "\"Datei - Informationen holen...\" gew\u00e4hlt";
jmiInfo = createAbstractActionObject(jmDate, jmiInfo, actionInfo, strInfo, info);
jmiInfo.setMnemonic('i');
jmiInfo.setToolTipText(ttInfo);
ttSystem = "Dateieinstellungen prüfen";
strSystem = "DateiSystem";
system = "\"Datei - Dateieinstellung...\" gew\u00e4hlt";
jmiSystem = createAbstractActionObject(jmOpen, jmiSystem,actionSystem, strSystem, system);
jmiSystem.setMnemonic('b');
jmiSystem.setToolTipText(ttSystem);
//jmDate.add(jmiNew);
//jmDate.add(jmOpen);
//jmDate.add(jmiSave);
//jmDate.addSeparator();
//jmDate.add(jmiHelp);
//jmDate.add(jmiInfo);
//jmOpen.add(jmiSystem);
//jmOpen.add(jmiWeb);
//menuLeiste.add(Box.createHorizontalGlue());
//menuLeiste.setMargin(new Insets(0, 30, 0, 20));
menuLeiste.add(jmDate);
this.setJMenuBar(menuLeiste);
}
}[/CODE]
In einem Endergebnis werden die Kürzeln für Jmenu-Objekt und für seine Item-Objekte erstellt, die ich danach kreiere und zu dem JMenu-Objekt zuweise. Beim JMenu-Objekt kann ich den Kürzel wenigsten aufrufen ALT+D, doch für Item-Objekte funktioniert das nicht.
In der Anwendung habe ich zusetzlich Event-Objekte verwendet (Action von AbstractAction), es heißt, dass diese Objekte können auch die Methode setMnemonic() verwenden, doch nichts da. Deshalb habe ich die Action-Objekte zu den JMenuItem-Objekten umgewandelt, aber die Kürzeln werden weder angezeigt, noch funktionieren sie.
Könnt mir Eine weiterhelfen?
Anhänge
Zuletzt bearbeitet: