Сделать Jpopupmenu Stick - или вещи для этогоJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сделать Jpopupmenu Stick - или вещи для этого

Сообщение Anonymous »

Я хочу реализовать функцию текстового поиска для моего jtextarea .
Вот моя попытка. Поле поиска действительно появляется и действительно работает, однако, будучи всплывающим окном, он скрыт в любое время, когда я прокручиваю (или, скажем, щелкните за его пределами). Вместо этого он должен придерживаться верхнего левого угла свисталка. Позже я могу добавить немного кнопки «Закрыть», это не проблема. Поля поиска, такие как Google Chrome, были моим вдохновением. Jscrollpane уже имеет Layoutmanager , что, насколько мне известно, не поддерживает какое -либо «липкое» поведение. Замена его чем-то другим может мешать нормальным функциям jscrollpane . Class = "Lang-Java PrettyPrint-Override">

Код: Выделить всё

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.PopupMenuEvent;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

public class TextAreaSearchDemo {

static JPanel mainPanel;
static JTextField searchField;
static JPopupMenu searchPopup;

public static void main(String[] args) {
Container mainPanel = createMainPanel();
JFrame frame = new JFrame("Text Area Search Demo");
frame.setContentPane(mainPanel);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}

static JPanel createMainPanel() {
mainPanel = new JPanel(new BorderLayout());
mainPanel.add(createScroller());
createSearchPopup();
return mainPanel;
}

static JScrollPane createScroller() {
JScrollPane scroller = new JScrollPane();
scroller.setPreferredSize(new Dimension(500, 400));
scroller.setViewportView(createTextArea());
return scroller;
}

static JTextArea createTextArea() {
JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setEditable(false);
textArea.setText(createText());

textArea.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_DOWN_MASK), "search");
textArea.getActionMap().put("search", createSearchAction());
return textArea;
}

static private String createText() {
return "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
"Maecenas bibendum, nulla a tempus volutpat, enim magna scelerisque enim, " +
"et tempor erat urna vel lorem. Curabitur tristique, tortor sit amet bibendum tempus, " +
"elit tellus semper justo, a semper ligula eros nec lectus. Donec lorem risus, posuere " +
"at aliquet eget, aliquet eget mi. Proin viverra erat vehicula fringilla auctor. " +
"Morbi eleifend nisl vitae eros hendrerit posuere. Ut porta tortor eu quam iaculis, vitae " +
"luctus risus elementum. Phasellus ac bibendum eros. Nam quis magna non elit semper luctus quis " +
"non odio. Sed iaculis risus non odio pulvinar, eu maximus felis eleifend. Aliquam aliquam augue " +
"aliquam leo ullamcorper rhoncus.  Suspendisse at nibh ante.";
}

private static Action createSearchAction() {
return new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
searchPopup.show(mainPanel, 0, 0);
}
};
}

private static void createSearchPopup() {
searchPopup = new JPopupMenu();
searchPopup.add(createSearchTextField());
searchPopup.addPopupMenuListener(new PopupMenuAdapter() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
SwingUtilities.invokeLater(() -> searchField.requestFocus());
}

@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
searchField.setText("");
}
});
}

private static JTextField createSearchTextField() {
searchField = new JTextField(10);
searchField.addActionListener(e -> search(searchField.getText()));
return searchField;
}

private static void search(String text) {
System.out.println("Searching for " + text);
}
}
< /code>
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;

public class PopupMenuAdapter implements PopupMenuListener {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {

}

@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {

}

@Override
public void popupMenuCanceled(PopupMenuEvent e) {

}
}



Подробнее здесь: https://stackoverflow.com/questions/796 ... hat-effect
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сделать Jpopupmenu Stick - или вещи для этого
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как включить навигацию с клавиатуры в нефокусируемом JPopupMenu в Java Swing?
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как заставить jpopupmenu показать название, даже если внешний интерфейс диктует иначе?
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • GSAP: Сделайте Hero Banner Stick, пока анимация не будет завершена
    Anonymous » » в форуме Javascript
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Мигание: тайм -аут Sonoff Zigbee Stick 3.0
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»