gpt4 book ai didi

java - 无法在 linux 服务器上第二次获得 JDialog 中使用的 JTextField 的焦点

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:20 26 4
gpt4 key购买 nike

我正在使用一个带有 2 个 JTextfields 和 JButtons 的 JDialog。当 Jdialog 第一次打开时,我的第一个文本字段上有一个光标。现在,如果我单击 Jdialog 外部的某处,然后尝试返回 JDialog,我在任何文本字段上都看不到光标,并且我无法在文本字段上编写或编辑任何内容。

我已将模态设置为 true。因此,即使我单击其他任何地方,我的对话框仍会出现在屏幕上,但会被停用。

此问题仅出现在 linux 服务器上,而不会出现在 windows 上。 Windows 完美运行。

在此处添加示例代码以了解问题的一些图片。这里 TestClass 正在扩展 JFrame。

public TestClass(){
setSize(new Dimension(600,500));
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);

myPanel = new JPanel();


JButton openDialog = new JButton("Click here");
openDialog.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
dialog = new JDialog(myFrame,true);
dialog.setSize(new Dimension(400,400));

JTextField myField = new JTextField(10);
JPanel innerPanel = new JPanel();
innerPanel.add(myField);

dialog.add(innerPanel);
dialog.setVisible(true);
//add(dialog);
}
});


myPanel.add(openDialog);
add(myPanel);
}

最佳答案

无法测试您的不完整示例。下面的示例展示了 Java 6 在 Mac OS X 和 Ubuntu 12 上的预期行为。特别是,文本字段在从另一个程序切换回来后仍然有效。

image

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
* @see http://stackoverflow.com/a/15576897/230513
*/
public class TestClass extends JFrame {

private static JFrame myFrame;

public TestClass() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton openDialog = new JButton("Click here");
JPanel myPanel = new JPanel();
myPanel.add(new JButton(new AbstractAction("Click here") {
@Override
public void actionPerformed(ActionEvent e) {
JDialog dialog = new JDialog(myFrame, true);
JTextField myField = new JTextField(10);
JPanel innerPanel = new JPanel();
innerPanel.add(myField);
dialog.add(innerPanel);
dialog.pack();
dialog.setSize(new Dimension(160, 120));
dialog.setLocationRelativeTo(myFrame);
dialog.setVisible(true);
}
}));
add(myPanel);
pack();
setSize(new Dimension(320, 240));
setLocationRelativeTo(null);
setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myFrame = new TestClass();
}
});
}
}

关于java - 无法在 linux 服务器上第二次获得 JDialog 中使用的 JTextField 的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15568260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com