IllegalComponentStateException在jtabbedpane

时间:2018-02-22 17:44:36

标签: java windows swing jtextfield jtabbedpane

今天我在玩Jtabbenpane的时候,我注意到一个奇怪的(在我看来)错误,这没有任何意义......因为我正在寻找这个超过2个小时,所以无法在网上找到任何东西

看看这个:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.UnsupportedLookAndFeelException;

@SuppressWarnings("serial")
public class WhatTheHeck extends JPanel {
    private final JTabbedPane pane = new JTabbedPane();

    public WhatTheHeck() {
        setLayout(new BorderLayout());
        pane.addTab("1", new JTextField("first tf"));
        pane.addTab("2", new JTextField("second tf"));
        add(pane);
    }

    private void display() {
        JFrame f = new JFrame("TabColors");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.setSize(new Dimension(300, 300));
       // f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new WhatTheHeck().display();
            }
        });
    }
}

我正在编辑第一个并切换到第二个标签。一切都好。

无论其!

如果我编辑第一个文本字段,当我正在编辑它时,我使用alt + shift ...(Windows 7)更改我的键盘语言(从英语到希腊语或反之亦然)并更改为第二个选项卡,我正在获取以下stacktrace:

  

线程中的异常" AWT-EventQueue-0"   java.awt.IllegalComponentStateException:必须显示组件   屏幕确定其位置   java.awt.Component.getLocationOnScreen_NoTreeLock(未知来源)at   java.awt.Component.getLocationOnScreen(未知来源)at   javax.swing.text.JTextComponent中的$ InputMethodRequestsHandler.getTextLocation(未知   来自)sun.awt.im.InputMethodContext.getTextLocation(未知   来源)在sun.awt.windows.WInputMethod $ 1.run(未知来源)at   java.awt.event.InvocationEvent.dispatch(未知来源)at   java.awt.EventQueue.dispatchEventImpl(未知来源)at   java.awt.EventQueue.access $ 500(未知来源)at   java.awt.EventQueue $ 3.run(未知来源)at   java.awt.EventQueue $ 3.run(未知来源)at   java.security.AccessController.doPrivileged(Native Method)at   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   来源)at   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   来自)java.awt.EventQueue $ 4.run(未知来源)at   java.awt.EventQueue $ 4.run(未知来源)at   java.security.AccessController.doPrivileged(Native Method)at   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   来自)java.awt.EventQueue.dispatchEvent(未知来源)at   java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)at at   java.awt.EventDispatchThread.pumpEventsForFilter(未知来源)at   java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源)at   java.awt.EventDispatchThread.pumpEvents(未知来源)at   java.awt.EventDispatchThread.pumpEvents(未知来源)at   java.awt.EventDispatchThread.run(未知来源)

我猜测有什么东西可以改变我的键盘语言吗?

有没有办法避免出现此错误?

0 个答案:

没有答案