Java 无法在linux服务器上第二次关注JDialog中使用的JTextField
我正在使用一个JDialog,其中包含2个JTextfields和jButton。当Jdialog第一次打开时,我的第一个文本字段上有一个光标。现在,如果我单击Jdialog之外的某个地方,然后尝试单击回Jdialog,我在任何文本字段上都看不到光标,并且我无法在文本字段上写入或编辑任何内容 我已将模态设置为真。因此,即使我点击其他任何地方,我的对话框仍会出现在屏幕上,但会被停用 此问题仅适用于linux服务器,而不适用于windows。窗户工作得很好 在这里添加一个示例代码以了解问题。 这里TestClass扩展了JFrameJava 无法在linux服务器上第二次关注JDialog中使用的JTextField,java,linux,swing,focus,jdialog,Java,Linux,Swing,Focus,Jdialog,我正在使用一个JDialog,其中包含2个JTextfields和jButton。当Jdialog第一次打开时,我的第一个文本字段上有一个光标。现在,如果我单击Jdialog之外的某个地方,然后尝试单击回Jdialog,我在任何文本字段上都看不到光标,并且我无法在文本字段上写入或编辑任何内容 我已将模态设置为真。因此,即使我点击其他任何地方,我的对话框仍会出现在屏幕上,但会被停用 此问题仅适用于linux服务器,而不适用于windows。窗户工作得很好 在这里添加一个示例代码以了解问题。 这里T
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);
}
无法测试您不完整的示例。下面的示例展示了在Mac OS X和Ubuntu 12上Java 6下的预期行为。特别是,文本字段在从另一个程序切换回后仍保持功能
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();
}
});
}
}
无法测试您不完整的示例。下面的示例展示了在Mac OS X和Ubuntu 12上Java 6下的预期行为。特别是,文本字段在从另一个程序切换回后仍保持功能
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();
}
});
}
}
可能是不正确的对话框的父问题(null或错误的JFrame/JDialog),请编辑您的问题,以包括显示您描述的问题的;还要指定versions.hi我可以在哪里添加代码?在评论部分?编辑你的问题的哪一部分你不明白:-)发生在克利奥帕特拉。。从很长一段时间以来一直在努力解决这个问题。我的思维受阻:)可能是不正确的对话框的父问题(null或错误的JFrame/JDialog)请编辑您的问题,以包含一个显示您描述的问题的对话框;还要指定versions.hi我可以在哪里添加代码?在评论部分?编辑你的问题的哪一部分你不明白:-)发生在克利奥帕特拉。。从很长一段时间以来一直在努力解决这个问题。我的头脑被阻塞了:)