【问题标题】:JTextField uneditable in JWindowJTextField 在 JWindow 中不可编辑
【发布时间】:2012-03-12 06:44:33
【问题描述】:

我有一个 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的边框的主要目的是什么?

【问题讨论】:

  • 问题是我用jframe的时候,jwindow和jframe同时出现了..
  • 您确定您阅读了该链接中提供的完整解决方案吗?
  • 是的,我确定(在你的链接中有 Andrew 的代码)
  • 与您的问题无关:不要手动定位/调整组件大小,这是 LayoutManager 的工作

标签: java swing jtextfield


【解决方案1】:

编辑,

  • JWindow 的内容只有在其父级显示在屏幕上时才能访问

  • 对于可编辑和可访问的内容,使用 un_decorated JDialog 而不是 JWindow,jDialog 不会导致 non_accesible 内容,

  • 为什么...,我无法解释,也无法理解为什么,此时此刻,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);

  • 1234563李>

【讨论】:

  • 谢谢,但它在我的机器上不起作用,因为它没有让 JWindow 在没有 JFrame 的情况下出现。
  • @Fff Dgg 不知道什么以及为什么某些东西在您的机器上不起作用,一定是您的代码隐藏了另一个问题,我保证我的代码示例有效,
  • 这是你的代码在我机器上的输出,pzl 看看:flic.kr/p/bCpojk
  • @Fff Dgg 同意,我的问题是 1) JTextField 都是可访问和可编辑的,不是吗? 2) 你想只显示 JWindow ???, 3) 是否有其他问题
  • 是的,两者都是可编辑的,我只想显示 JWindow。谢谢!!
【解决方案2】:

JWindow 应该是可聚焦的。使用public void setFocusable(boolean focusable) 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2015-10-29
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多