我有一个像这个图像的登录表单。
登录按钮是一个带有图标的JLabel。我想要能够按下“进入”和登录。
我已经将登录逻辑放入名为doAction()的方法中;我在login Label上有一个MouseEvent,它按预期工作,并在任何时候单击login JLabel时调用doAction()。我希望同样的事情发生在任何时候,我按下“回车”。我试过这个:
KeyStroke keyStroke = KeyStroke.getKeyStroke("ENTER");
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inputMap = login.getInputMap(condition);
ActionMap actionMap = login.getActionMap();
inputMap.put(keyStroke, keyStroke.toString());
actionMap.put(keyStroke.toString(), new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
doAction();
}
});
问题是,只有当我使用PasswordField中的游标时,这才起作用。如果我在usernameField中使用光标,它就不起作用了
很难说“确切地”发生了什么,因为我们只有一个小的、脱离上下文的片段,但我倾向于避免KeyStroke.getKeyStroke(“Enter”)
,因为它并不总是产生预期的结果。而是直接使用keyevent
虚拟键。
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(new JTextField(10), gbc);
add(new JPasswordField(10), gbc);
add(new JLabel("..."), gbc);
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Login");
am.put("Login", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent evt) {
System.out.println("Do stuff here");
}
});
}
}
}
我正在使用一个功能组件,我需要能够使用componentDidMount()。我在网上发现,通过react钩子,可以将useEffect()用作功能组件中的componentDidMount()。然而,这并不像我想象的那样有效。我原以为在页面加载时会触发,但事实并非如此。有人知道如何让useEffect表现得像componentDidMount吗? 我试着只是简单地这样做,但它创建了一个无限循环,
问题内容: 我有一个位于JButton顶部的JLabel,但它不会显示在顶部。注释掉JButton的代码后,将显示JLabel,这意味着它在其中,但在底部。有没有办法在JButton的顶部显示JLabel? 任何帮助都是极好的。谢谢! 编辑: 为了澄清起见,我需要在游戏中使用该按钮,单击该按钮时,按钮上方会显示一个JLabel,以显示添加的“得分”。在我的游戏中,JLabel将比JButton小,
我到处寻找答案,但一无所获。我不知道是否还有人以前有过这个问题,但我感谢所有的帮助,谢谢。 我有一个100乘100的标签网格,让我解释一下我是如何创建的。我有一个创建和填充Strings数组的方法。下一个方法创建一个标签数组,然后使用setText()方法将String(从上一个方法创建)添加到标签中。之后的方法获取这些JLabels,并将它们添加到网格布局的J面板中。然后,我将JPanel添加到
基本上我有两个账户,SSPUserInput和SSPViewer。我想在SSPUserInput类中按下一个按钮,在SSPViewer中更改一个JLabel名称。这基本上是一个石头剪刀布游戏。这是我第一次在这里发帖,如果我做错了什么,我很抱歉。
我设置了一个JPopupMenu,它将显示用户是否右键单击JList中的某个单元格,但现在必须先选择该单元格,才能显示JPopupMenu。我想知道如何在右键单击后选择该单元格,然后像现在一样显示JPopupMenu。当没有选择任何项目并且鼠标不在列表中的任何项目上时,我也会显示一个菜单。 代码:
我有一个JButton,可以让我的JTextArea可见: 在第一次单击、第三次单击、第五次单击时,。。。在JButton上,JTextArea应该出现: 在第二次单击、第四次单击、第六次单击时,。。。在JButton上,JtextArea应该消失: 帮助被大大评价!