JTextField在JWindow中无法使用

时间:2012-03-12 06:44:33

标签: java swing jtextfield

我有一个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);

所以,我有两个问题:

  1. 为什么JTextField在JWindow中不可编辑,我怎么能让它可编辑?
  2. 使用JFrame作为JWindow边框的主要目的是什么?

3 个答案:

答案 0 :(得分:6)

编辑,

  • JWindow的内容仅在其父级显示在屏幕上时才可访问

  • 对于可编辑和可访问的内容,使用un_decorated 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);

  • 在这种形式下,当前的JVM实例永远不会从RAM中消失,直到您的PC重新启动或关闭,您必须在JButton内添加单独的退出System.exit(0)和代码行ActionListener

答案 1 :(得分:3)

JWindow应该是可以关注的。使用public void setFocusable(boolean focusable)方法。

答案 2 :(得分:1)