Java 按下enter键时,JFrame中的默认按钮未触发
我有一个Java 按下enter键时,JFrame中的默认按钮未触发,java,swing,netbeans,default,Java,Swing,Netbeans,Default,我有一个JFrame,上面有三个jb按钮。我已将txtSearch(一个JTextField组件)设置为在JFrame加载时具有焦点。其中一个按钮被设置为默认按钮。这是我的代码: private void formWindowOpened(java.awt.event.WindowEvent evt) { // btnRefresh.setMnemonic(KeyEvent.VK_R); // Even if this line
JFrame
,上面有三个jb按钮。我已将txtSearch
(一个JTextField
组件)设置为在JFrame
加载时具有焦点。其中一个按钮被设置为默认按钮。这是我的代码:
private void formWindowOpened(java.awt.event.WindowEvent evt)
{
// btnRefresh.setMnemonic(KeyEvent.VK_R); // Even if this line
// is not commented, but
// still the event wouldn't fire.
this.getRootPane().setDefaultButton(btnRefresh);
}
当它加载时,按钮刚刚被选中,但按下Enter键时它什么也没做。我如何正确地实现它
btnRefresh.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnRefreshActionPerformed(evt);
}
});
private void btnRefreshActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(this, "Pressed!");
// Other codes here (Replace by JOptionPane)
}
当出现
JFrame
时,哪个组件具有焦点?我这样问是因为一些组件“吃”了Enter键事件。例如,一个JEditorPane
就可以做到这一点
此外,当您将
ActionListener
分配给JTextField
时,将调用根窗格的ActionListener
,而不是DefaultButton
。您必须选择使用ActionListener
或DefaultButton
,但不能对同一JTextField
同时使用这两个按钮。我相信这也适用于其他组件。从发布的内容中,我看不出您做得不正确。下面是一个简单的例子。也许它会揭示一些对你有用的东西
import java.awt.BorderLayout;
public class ExampleFrame extends JFrame
{
private JPanel m_contentPane;
private JTextField m_textField;
/**
* Launch the application.
*/
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
ExampleFrame frame = new ExampleFrame();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ExampleFrame()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
m_contentPane = new JPanel();
m_contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
m_contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(m_contentPane);
m_textField = new JTextField();
m_contentPane.add(m_textField, BorderLayout.NORTH);
m_textField.setColumns(10);
JButton btnNewButton = new JButton("Default");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(ExampleFrame.this, "Default.");
}
});
m_contentPane.add(btnNewButton, BorderLayout.CENTER);
JButton btnNewButton_1 = new JButton("Not default");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(ExampleFrame.this, "Not default.");
}
});
m_contentPane.add(btnNewButton_1, BorderLayout.WEST);
m_textField.requestFocus();
getRootPane().setDefaultButton(btnNewButton);
}
}
我已经设置了<代码> JTraceField:/Cuto >当代码> jFrase Load。正确的分析,而不是一个解决方案:-“JunttotWuo从您接受这一点,我假设它指向一个解决方案的方向-您可能会考虑用这个解决方案来编辑您的问题…我的密码字段中有一个actionListener,但未能找出这是defaultbutton没有响应的原因。Thanxadd一个actionListener到textField,看看会发生什么:-)你搞定了kleopatra!当我放入ActionListener时,默认按钮未能启动。johntotetwoo,您需要删除操作侦听器才能激活默认按钮。我发现最简单的方法是在JFrame可见后调用requestFocusInWindow()来设置默认按钮。希望这对别人有帮助。