我有一个Jwindow,当我向其中添加Jtextfield时,该文本字段变得不可编辑。

JWindow window = new JWindow();
window.setBounds(400, 100, 700,500);
window.setVisible(true);
window.setLayout(null);
JTextField text = new JTextField();
text.setBounds(300, 300, 150, 30);
text.setEditable(true);
window.getContentPane().add(text);

但是当我尝试使用Jframe作为Jwindow的所有者时,文本字段现在是可编辑的,但是该框架与jwindow一起出现了:
JFrame frame = new JFrame();
frame.setVisible(true);
JWindow window = new JWindow();
window.setBounds(400, 100, 700,500);
window.setVisible(true);
window.setLayout(null);
JTextField text = new JTextField();
text.setBounds(300, 300, 150, 30);
text.setEditable(true);
window.getContentPane().add(text);

所以,我有两个问题:
  • 为什么JTextField在JWindow中不可编辑,我如何使其可编辑?
  • 使用JFrame作为JWindow的边界的主要目的是什么?
  • 最佳答案

    编辑,

    仅当其父项显示在屏幕上时,才能访问JWindow

  • 内容
    对于可编辑和可访问内容的
  • 使用未修饰的JDialog而不是JWindow,jDialog不会导致不可访问的内容
  • 的原因...,我无法解释,不明白为什么,在这一刻,API并没有告诉我有关可访问,可编辑的信息...




  • 1. Why JTextField is uneditable in JWindow and how could i let it able to edit?
    

    真的不知道
    import java.awt.*;
    import javax.swing.*;
    
    public class WindowTest {
    
        private JFrame frame;
    
        public JPanel createContentPane() {
            JTextField text = new JTextField("Whatewer");
            JPanel panel = new JPanel();
            panel.add(text);
            createAndShowWindow();
            return panel;
        }
    
        void createAndShowGUI() {
            frame = new JFrame("Window Test");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.setContentPane(createContentPane());
            frame.setLocation(50, 50);
            frame.pack();
            frame.setVisible(true);
        }
    
        private void createAndShowWindow() {
            JTextField text = new JTextField("Whatewer");
            JWindow win = new JWindow(frame);
            win.setLayout(new GridLayout(0, 1));
            win.add(text);
            win.pack();
            win.setLocation(150, 50);
            win.setVisible(true);
        }
    
        public static void main(String args[]) {
            EventQueue.invokeLater(new Runnable() {
    
                public void run() {
                    new WindowTest().createAndShowGUI();
                }
            });
        }
    }
    

    编辑
    Yes, both are editable, and i wannt only JWindow to be displayed. Thanks!!
    

    默认情况下,
  • JWindow需要JFrame才能正确解决
  • 没有人告诉这个JFrame必须是可见的(对GUI有效),然后从frame.setDefaultClose ....中删除这些代码行....包括我的示例
  • 中的frame.setVisible(true); 这种形式的
  • 永远不会从RAM中消失,直到您的PC重新启动或关闭之前,您必须在JButton
  • 中添加带有代码行System.exit(0)的单独的退出ActionListener

    10-06 12:49