2
我创建了一个'日期选择器'组件,它只是一个控制器(JComponent
)和一个显示器(JPopupMenu
扩展)。我希望显示弹出窗口在用户使用箭头控制日期时保持显示。我试着拨popup.show(...)
mouseReleased
按钮试图重置弹出窗口,但它不像往常一样隐藏。如何在保持JPopupMenu
的通常行为的同时实现此目标?如何保持JPopupMenu关闭?
当然我可以使用JWindow
,但后来我不得不担心使用焦点等模拟显示/隐藏行为,我非常想避免这种行为。
谢谢。 :)
SSCCEE
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class PopupSSCCE {
private JFrame frame = new JFrame();
private JPanel controller = new JPanel();
private JLabel controllerLabel = new JLabel("Controller");
private JLabel display = new JLabel("Display");
private JPopupMenu popup = new JPopupMenu();
private JButton prev = new JButton("<");
private JButton next = new JButton(">");
private PopupSSCCE() {
controllerLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
if (controllerLabel.contains(e.getPoint()))
popup.show(controllerLabel, -50, controllerLabel.getHeight());
}
});
frame.setPreferredSize(new Dimension(250, 300));
popup.setPreferredSize(new Dimension(200, 200));
controller.setPreferredSize(new Dimension(200, 50));
prev.setPreferredSize(new Dimension(50, 50));
next.setPreferredSize(new Dimension(50, 50));
controllerLabel.setPreferredSize(new Dimension(100, 50));
controller.add(prev);
controller.add(controllerLabel);
controller.add(next);
popup.add(display);
frame.getContentPane().add(controller);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new PopupSSCCE();
}
}
的[SSCCE]( http://sscce.org/)比截图更有用。 –
@AndrewThompson确定SSCCE会很有用,但从应用程序中提取组件并不容易。如果没有SSCCE,建议的方法肯定会很容易。 – rtheunissen
我(一般)不建议任何东西,除非我可以先在代码中测试它。特别是我以前没有尝试过的'有点不同寻常'。嘿,但这是你的问题和你的选择。 –