JTextField не редактируется в JWindow - PullRequest
5 голосов
/ 12 марта 2012

У меня есть Jwindow, и когда я добавил в него поле Jtext, текстовое поле стало недоступным для редактирования.

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);

Итак, у меня есть 2 вопроса:

  1. Почему JTextField не редактируется в JWindow и как я могу сделать его редактируемым?
  2. Какова основная цель использования JFrame в качестве границы JWindow?

Ответы [ 3 ]

6 голосов
/ 12 марта 2012

РЕДАКТИРОВАТЬ,

  • содержимое 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();
            }
        });
    }
}

EDIT

Yes, both are editable, and i wannt only JWindow to be displayed. Thanks!! 
  • по умолчанию JWindow требуется JFrame для правильного обхода

  • никто не скажет, что этот JFrame должен быть видимым (действительно для GUI), затем удалите эти строки кода из frame.setDefaultClose .... включая frame.setVisible(true); из моего примера

  • в этой форме текущий экземпляр JVM никогда не исчезает из ОЗУ, пока ваш компьютер не будет перезагружен или выключен, вы должны добавить отдельный выход JButton с строкой кода System.exit(0) внутри ActionListener

3 голосов
/ 12 марта 2012

JWindow должно быть фокусируемым. Используйте метод public void setFocusable(boolean focusable).

1 голос
/ 12 марта 2012

используйте эту ссылку ... вы получите представление ... http://www.velocityreviews.com/forums/t366288-jtextfield-inactive-in-a-jwindow.html

...