У меня есть небольшой фрагмент кода ниже JWindow
с JTextPane
в нем. Когда я запускаю полный код в Netbeans, он создает красивое окно, но JTextPane
не будет реагировать на события мыши или клавиатуры. Когда я навожу указатель мыши на него, появляется значок текстовой мыши, но когда я нажимаю на него, он выбирает окно Netbeans позади него. Я пытался вызвать метод setFocusable
для JTextPane
с помощью true
, а также вызвал 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();
}
});
}
}
isFocusableWindow()
< /a>: «Для того, чтобы окно, которое не является фреймом или диалоговым окном, могло быть сфокусировано, его состояние фокусируемого окна должно быть установлено на true, его ближайший владеющий фрейм или диалог должен отображаться на экране и он должен содержать хотя бы один компонент. в его цикле обхода фокуса. Если какое-либо из этих условий не выполняется, то ни это окно, ни какой-либо из его подкомпонентов не могут стать владельцем фокуса». - person VGR   schedule 14.09.2013