Я хочу помочь кому-то. Я хочу создать JPanel, который появится, когда я нажму кнопку, он должен появиться там, где нажата кнопка, и она не должна влиять на другие компоненты. Примером этого является JDateChooser, когда вы нажимаете на эту кнопку, появляется календарь, но когда вы нажимаете на другое место, эта панель исчезает. то, что я хочу, это поместить список имен на эту панель, когда он появится. Это похоже на JPopupmenu, за исключением того, что когда вы нажимаете в другом месте, он должен исчезнуть.Как создать всплывающее окно JPanel в JFrame
0
A
ответ
3
Я не уверен, что вы делаете, но это, кажется, работает очень хорошо для меня ...
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ButtonPopup {
public static void main(String[] args) {
new ButtonPopup();
}
public ButtonPopup() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
final JPopupMenu popup = new JPopupMenu();
DefaultListModel<String> model = new DefaultListModel<>();
model.addElement("Item 1");
model.addElement("Item 2");
model.addElement("Item 3");
model.addElement("Item 4");
model.addElement("Item 5");
JList list = new JList(model);
popup.setLayout(new BorderLayout());
popup.add(new JScrollPane(list));
final JButton button = new JButton("Pop");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Dimension size = popup.getPreferredSize();
int x = (button.getWidth() - size.width)/2;
int y = button.getHeight();
popup.show(button, x, y);
}
});
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
popup.setVisible(false);
}
});
add(button);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.dispose();
}
}
}
Смежные вопросы
- 1. Всплывающее окно Java JFrame
- 2. Как создать всплывающее окно
- 3. Как создать всплывающее окно
- 4. C# вручную создать окно, например, JFrame, JPanel/Canvas & Graphics
- 5. Java/Swing: получить окно/JFrame изнутри JPanel
- 6. Как только получить всплывающее окно JFrame для закрытия
- 7. Как создать полупрозрачное всплывающее окно?
- 8. Как создать всплывающее окно # 2
- 9. Как создать всплывающее окно Bootstrap?
- 10. Как создать всплывающее окно входа?
- 11. Как создать всплывающее окно справки
- 12. Основные: Как создать всплывающее окно?
- 13. Как создать всплывающее окно HTML?
- 14. Отображать всплывающее окно JFrame под ячейкой JTable?
- 15. Всплывающее окно для кнопки закрытия JFrame
- 16. Создать всплывающее окно браузера
- 17. Создать всплывающее окно
- 18. Как добавить JPanel в JFrame
- 19. JFrame, JPanel, paintComponent как
- 20. Создать всплывающее окно в React
- 21. Создать всплывающее окно в SuiteCommerce
- 22. Очистить JPanel от JFrame
- 23. Как добавить JPanel в JFrame?
- 24. Как Центрировать Jpanel в JFrame?
- 25. показать содержимое JPanel в JFrame
- 26. Добавление JPanel в JFrame
- 27. Центр JPanel в JFrame
- 28. Центрирование JPanel в JFrame
- 29. Два JPanel в JFrame
- 30. Обновление JPanel в JFrame
Ну вы должны обеспечить то, что вы до сих пор. Вам нужно будет использовать слушателей, чтобы установить видимость на false для этого jpanel. Я бы использовал JInnerFrame или что-то, что уже имело JPanel, иначе вам придется играть с многоуровневыми макетами. – porfiriopartida
Почему я не думал о внутренней рамке. Спасибо за предложение –
JPopupMenu должен быть способен предоставить эту функциональность – MadProgrammer