目前使用SWING实现一个JMenuBar,其中有两个不同的JMenu。一个叫做gameMenu,另一个叫做addMenuGame。
我在游戏菜单中有几个JMenuItems,都是用这个方法在我的界面控制器中实现的。
public void addGameMenu(JMenu control) {
String fileName = "gamemodes.txt";
try {
FileReader inputFile = new FileReader(fileName);
BufferedReader bufferReader = new BufferedReader(inputFile);
String line;
while ((line = bufferReader.readLine()) != null) {
String split[] = line.split("#");
for (int i = 0; i < split.length; i++) {
control.add(split[i]);
}
}
bufferReader.close();
} catch (Exception e) {
System.out.println("Fejl ved linje:" + e.getMessage());
}
}
它所做的是从文本文件中读取每一行,并将其添加到JMenu,称为gameMenu。但是,我只能将actionlisteners添加到JMenu,而不能添加JMenuItem,即JMenu。在JFrame主空白中,这是我实现它的方式:
public class index extends javax.swing.JFrame {
QuizzControlHandler dd = new QuizzControlHandler();
private JMenuItem dc;
/**
* Creates new form index
*/
public index(){
initComponents();
dd.addGameMenu(menuGame);
}
}
这将正确填充我的菜单,但是,我需要检索用户正在单击的内容。
Camickr抢先我一步。
当您应该添加构造的JMenuItems时,您正在向您的JMenu添加简单的字符串。换句话说,当您可以添加智能对象时,不要将哑对象添加到菜单中。例如:
import java.awt.event.ActionEvent;
import javax.swing.*;
@SuppressWarnings("serial")
public class TestMenus extends JPanel {
public TestMenus() {
}
public void addGameMenu(JMenu control) {
String[] texts = { "One", "Two", "Three", "Four", "Five" };
for (int i = 0; i < texts.length; i++) {
control.add(new JMenuItem(new MenuItemAction(texts[i])));
}
}
private class MenuItemAction extends AbstractAction {
public MenuItemAction(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Menu item: " + e.getActionCommand());
}
}
private static void createAndShowGui() {
TestMenus mainPanel = new TestMenus();
JMenu menu = new JMenu("Menu");
mainPanel.addGameMenu(menu);
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);
JFrame frame = new JFrame("TestMenus");
frame.setJMenuBar(menuBar);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
createAndShowGui();
});
}
}
但是,我只能将actionlisteners添加到JMenu,而不能添加到JMenuItem,
用户单击JMenuItem
,因此您需要将ActionListener
添加到JMenuItem
而不是JMenu。
在调用添加游戏菜单(…)之前 您可以创建一个ActionListener,供所有JMenuItems共享,代码如下:
ActionListener al = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
JMenuItem menuItem = (JMenuItem)e.getSource();
System.out.println(menuItem.getText());
}
}
然后,您可以更改您的addGameMenu(JMenu控件,ActionListener al)以获得第二个参数。
然后在您更改的方法中:
//control.add(split[i]);
JMenuItem menuItem = new JMenuItem( split[I] );
menuItem.addActionListener( al );
control.add( menuItem );
是否可以获取JMenuItem在其JMenu中的位置/索引? 例如,我有一个名为“Search”的JMenu和3个名为“Find”、“Count”和“Replace”的JMenuItems,我只有1个类管理器来管理所有3个JMenuItems。因此,我使用getSource()方法来获取单击了哪些JMenuItems,以便将JMenuItem的索引传递给另一个类的构造函数。 我的问题是,如果想添加
目前正在学习我自己 JavaFX。 我使用场景生成器创建了一个带有按钮和文本字段的简单场景。 为什么我不能点击按钮,并从文本字段中获取文本? FXML代码是:
我有一个包含注入和强制(最终)字段的类。对于common,我可以使用micronatBean factory . get bean(type)或BeanContext.getBean(type)从上下文中获取bean,但是在这种情况下,我必须传递类型和参数。 我为此创建了简单的测试 对象(bean)代码 当我运行它时,我收到异常 io . micro naut . context . except
介绍 (Introduction) JMenuItem类表示菜单中的实际项目。 菜单中的所有项都应该来自JMenuItem类或其子类之一。 默认情况下,它包含一个简单的标签菜单项。 Class 声明 (Class Declaration) 以下是javax.swing.JMenuItem类的声明 - public class JMenuItem extends AbstractButton
每个人我试图通过itext从PDF文件中获取一些带下划线的文本,这对我来说似乎非常困难。我已经搜索了很长时间的解决方案,并学习了如何获取文本的字体系列、字体大小和文本位置。但是,没有下划线。期待您的帮助!非常感谢。
我有一个简单的Spring Boot微服务,负责向/从Google Cloud Storage上传、检索和删除图像。我的服务中的get请求有以下代码: 这是我的控制器部分: 就在响应中获取图像而言,这一切都很好,但我的问题是,图像也会下载到项目的根目录中。许多图像将通过此服务上载,因此这是一个问题。我只想在响应中显示图像,而不需要下载它们。我试着玩代码,但没能让它按我想要的那样工作。