【问题标题】:Java JTextPane not receiving keystrokesJava JTextPane 不接收击键
【发布时间】:2013-09-14 17:58:34
【问题描述】:

我在JWindow 下方有一小段代码,其中包含JTextPane。当我在 Netbeans 中运行完整代码时,它会创建一个漂亮的窗口,但 JTextPane 不会响应鼠标或键盘事件。当我将鼠标悬停在它上面时,会出现文本鼠标图标,但是当我单击它时,它会选择它后面的 Netbeans 窗口。我尝试用true 调用JTextPanesetFocusable 方法并调用grabFocus。我怎样才能让JTextPane 响应鼠标和键盘事件?

我有两个文件。一个叫做MainClass.java,只是创建了一个新的MainWindow 对象。 MainWindow.java 是问题所在。它有一个人工标题栏、两侧和居中的JTextPanel,这给我带来了问题。

请注意,不能使用JFrame

谢谢!

MainWindow.java

package Window;

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.Rectangle;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.JWindow;
import javax.swing.SpringLayout;

public class MainWindow extends JWindow{
    private Color TitleColor = new Color(18, 15, 65);
    private Color BGColor = new Color(50, 50, 50);

    public MainWindow(){
        GraphicsEnvironment env =
        GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle MaxBounds = env.getMaximumWindowBounds();

        SpringLayout Layout = new SpringLayout();
        Container ContentPane = this.getContentPane();
        this.setLayout(Layout);

        JPanel TitleBar = new JPanel();
        TitleBar.setBackground(TitleColor);
        TitleBar.setPreferredSize(new Dimension(0, 30));
        this.add(TitleBar);

        JPanel LeftPanel = new JPanel();
        LeftPanel.setBackground(BGColor);
        this.add(LeftPanel);

        JPanel RightPanel = new JPanel();
        RightPanel.setBackground(BGColor);
        this.add(RightPanel);

        JTextPane TextPane = new JTextPane();
        TextPane.setBackground(Color.WHITE);
        TextPane.setForeground(Color.BLACK);
        TextPane.setPreferredSize(new Dimension(700, 0));
        TextPane.setFocusable(true);
        TextPane.setMargin(new Insets(20,20,20,20));
        TextPane.grabFocus();
        this.add(TextPane);

        Layout.putConstraint(SpringLayout.EAST, TitleBar, 0, SpringLayout.EAST, ContentPane);
        Layout.putConstraint(SpringLayout.WEST, TitleBar, 0, SpringLayout.WEST, ContentPane);
        Layout.putConstraint(SpringLayout.NORTH, TitleBar, 0, SpringLayout.NORTH, ContentPane);

        Layout.putConstraint(SpringLayout.NORTH, TextPane, 0, SpringLayout.SOUTH, TitleBar);
        Layout.putConstraint(SpringLayout.SOUTH, TextPane, 0, SpringLayout.SOUTH, ContentPane);
        Layout.putConstraint(SpringLayout.HORIZONTAL_CENTER, TextPane, 0, SpringLayout.HORIZONTAL_CENTER, ContentPane);

        Layout.putConstraint(SpringLayout.NORTH, LeftPanel, 0, SpringLayout.SOUTH, TitleBar);
        Layout.putConstraint(SpringLayout.SOUTH, LeftPanel, 0, SpringLayout.SOUTH, ContentPane);
        Layout.putConstraint(SpringLayout.EAST, LeftPanel, 0, SpringLayout.WEST, TextPane);
        Layout.putConstraint(SpringLayout.WEST, LeftPanel, 0, SpringLayout.WEST, ContentPane);

        Layout.putConstraint(SpringLayout.NORTH, RightPanel, 0, SpringLayout.SOUTH, TitleBar);
        Layout.putConstraint(SpringLayout.SOUTH, RightPanel, 0, SpringLayout.SOUTH, ContentPane);
        Layout.putConstraint(SpringLayout.EAST, RightPanel, 0, SpringLayout.EAST, ContentPane);
        Layout.putConstraint(SpringLayout.WEST, RightPanel, 0, SpringLayout.EAST, TextPane);

        this.setBounds(MaxBounds);
        this.setVisible(true);
    }
}

MainClass.java

package Window;

import javax.swing.SwingUtilities;

public class MainClass {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run(){
              new MainWindow();  
            }
        });
    }
}

【问题讨论】:

  • 来自documentation of isFocusableWindow():“对于不是 Frame 或 Dialog 的可聚焦窗口,其可聚焦窗口状态必须设置为 true,其最近的所属 Frame 或 Dialog 必须显示在screen,并且它必须在其焦点遍历循环中包含至少一个 Component。如果不满足这些条件中的任何一个,则此 Window 及其任何子组件都不能成为焦点所有者。”
  • 谢谢!那个文档信息量很大。我会记住这一点的。

标签: java swing netbeans mouseevent jtextpane


【解决方案1】:

【讨论】:

  • 感谢您的回答!我一定会对此进行测试。
  • 我确实知道!
  • @trashgod ...camicrks down_vote 将此信息写入我的脑海中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多