2
아래의 테스트 케이스와 비슷한 동작을하는 애플리케이션을 실행 중입니다.Java 8 - 창 전환 후 모든 키보드 입력 또는 포커스 손실.
문제는 포커스를 클릭하고 아래의 응용 프로그램 프레임을 보면서 다른 창으로 이동 한 다음 focusGained
청취자가있는 텍스트 필드를 직접 클릭하여 대화 상자를 닫으면 모든 키 입력이 응용 프로그램의 모든 텍스트 필드에 손실 될 수 있습니다.
응용 프로그램의 아무 곳이나 처음에 작업 표시 줄의 아이콘을 클릭하여 다시 포커스를 얻으면 다시 발생하지 않습니다.
이
자바 8 특정 - 자바 7에서 자바 (9)에 대해 확실하지 초점을 잃지 않을 것입니다하지만 어쨌든테스트 케이스 아래에이 동작을 보여줍니다 옵션을 선택하지 않습니다.
@Override
public void focusGained(FocusEvent e)
{
noFocus.requestFocusInWindow();
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createDialog().setVisible(true);
}
});
}
이 대화 상자가 표시되기 전에 텍스트 필드가 제대로 초점을 얻을 수 있습니다 :
public class FocusTest extends JFrame
{
JTextField noFocus;
public static void main(String[] args)
{
FocusTest ft = new FocusTest();
ft.setVisible(true);
}
public FocusTest()
{
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setBounds(100,100,300,150);
setLayout(new GridLayout(3,1, 2, 2));
setTitle("Losing keyboard...");
noFocus = new JTextField();
add(noFocus);
JTextField jft = new JTextField();
jft.addFocusListener(new FocusAdapter()
{
@Override
public void focusGained(FocusEvent e)
{
createDialog().setVisible(true);
noFocus.requestFocusInWindow();
}
});
add(jft);
JButton jb = new JButton("OPEN");
jb.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("OPEN"))
createDialog().setVisible(true);
}
});
add(jb);
}
private JDialog createDialog()
{
final JDialog jd = new JDialog(this, true);
jd.setLocationRelativeTo(this);
jd.setLayout(new BorderLayout());
jd.getContentPane().add(new JTextField(), BorderLayout.CENTER);
JButton jb = new JButton("Close");
jb.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("Close"))
jd.dispose();
}
});
jd.getContentPane().add(jb, BorderLayout.SOUTH);
jd.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
jd.pack();
return jd;
}
}
그래, 고마워. 나는 이것이 7과 8 사이의 행동을 변화 시켰다는 것을 불안하게 만든다. –