How to get JTextArea requestFocus
When I use JBPopupFactory.getInstance().createComponentPopupBuilder to make a Popups, I can't do any thing in my JTextArea? How can I fix it?
public class RouseAssistantAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent anActionEvent) {
System.out.println("双击Alt唤醒智能助手");
// 创建需要执行的任务
Project project = anActionEvent.getProject();
if (null == project) {
return;
}
AssistantUi assistantUi = new AssistantUi(project);
JBPopup jbPopup = JBPopupFactory.getInstance().createComponentPopupBuilder(assistantUi, null).createPopup();
jbPopup.showCenteredInCurrentWindow(project);
}
}
public class AssistantUi extends JPanel {
private final AssistantInputUi assistantInputUi;
private final Dimension dimension = new Dimension(400, 300);
public AssistantUi(Project project) {
setLayout(new GridBagLayout());
setSize(dimension);
assistantInputUi = new AssistantInputUi(project);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridy = 0;
c.gridx = 0;
c.gridwidth = 1;
c.weightx = 1;
add(assistantInputUi, c);
}
}
public class AssistantInputUi extends JPanel {
private static final String PLACEHOLDER = "请描述你的需求";
private Project project;
private JTextArea inputArea;
private JScrollPane jbScrollPane;
private JLayeredPane layeredPane;
public AssistantInputUi(Project project) {
this.project = project;
this.initComponents();
this.addListener();
}
/**
* 注册监听事件
* @author cms
* @since 2024年12月11日15:49:17
*/
public void addListener() {
// 添加输入框键盘事件监听
inputArea.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
if (!e.isControlDown() && !e.isMetaDown()) {
if (e.getModifiersEx() == 0) {
e.consume();
// TODO 根据输入内容提交给AI模型
}
} else {
e.consume();
inputArea.insert("\n", inputArea.getCaretPosition());
}
inputArea.revalidate();
}
}
});
inputArea.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
if (inputArea.getText().equals(PLACEHOLDER)) {
inputArea.setText("");
}
}
@Override
public void focusLost(FocusEvent e) {
if (inputArea.getText().isEmpty()) {
inputArea.setText(PLACEHOLDER);
}
}
});
// 添加输入框鼠标点击事件监听
inputArea.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (inputArea.getText().equals(PLACEHOLDER)) {
inputArea.setText("");
}
}
});
}
private void initComponents() {
layeredPane = new JLayeredPane();
inputArea = new JTextArea();
jbScrollPane = new JScrollPane();
inputArea.setBackground(AiUiUtil.getEditorBg());
inputArea.setForeground(JBColor.BLACK);
inputArea.setLineWrap(true);
inputArea.setWrapStyleWord(true);
inputArea.setBorder(JBUI.Borders.emptyRight(15));
inputArea.requestFocus();
// inputArea.setFont();
setToolTipText("福小智");
jbScrollPane.setAutoscrolls(true);
inputArea.setText(PLACEHOLDER);
inputArea.setColumns(20);
inputArea.setRows(1);
jbScrollPane.setViewportView(inputArea);
layeredPane.setLayer(jbScrollPane, javax.swing.JLayeredPane.DEFAULT_LAYER);
javax.swing.GroupLayout layeredPaneLayout = new javax.swing.GroupLayout(layeredPane);
layeredPane.setLayout(layeredPaneLayout);
layeredPaneLayout.setHorizontalGroup(
layeredPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jbScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 542, Short.MAX_VALUE)
);
layeredPaneLayout.setVerticalGroup(
layeredPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layeredPaneLayout.createSequentialGroup()
.addContainerGap()
.addComponent(jbScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 38, Short.MAX_VALUE)
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(layeredPane)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(layeredPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE))
);
}
}
Please sign in to leave a comment.
Try:
Also, try to pass your JTextArea into
createComponentPopupBuilder
aspreferableFocusComponent
.