2013-03-22 1 views
1

Я использую JDialog с 2 JTextfields и JButtons в нем. Когда Jdialog открывается в первый раз, у меня есть курсор на моем первом текстовом поле. Теперь, если я щелкнул где-то вне Jdialog, а затем попытаюсь щелкнуть JDialog, я не вижу курсора на любом из текстовых полей, и я не могу ничего писать или редактировать что-либо на текстовых полях.Невозможно сфокусироваться на JTextField, используемом в JDialog во второй раз на сервере linux

Я установил, что модальное значение будет истинным. Так что даже если я щелкнул где-нибудь еще, мой диалог все же появляется на экране, но деактивируется.

Эта проблема относится только к серверу linux, а не к окнам. 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); 
} 
+1

может быть неправильным Диалог родительский вопрос (нуль или неправильно JFrame/JDialog) – StanislavL

+1

Измените свой вопрос включать [sscce] (http://sscce.org/), который демонстрирует проблему вы описываете; также укажите версии. – trashgod

+0

привет, где я могу добавить свой код? В разделе комментариев? – user001

ответ

1

Ваш неполный пример не может быть протестирован. В приведенном ниже примере показано ожидаемое поведение в 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(); 
      } 
     }); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^