我在使用弹出菜单和多行文本时遇到一些问题。第一次显示弹出菜单时,仅第一行可见。这是第一次点击后的样子
第二次点击后
我应该怎样做才能使其在第一次点击后显示整个文本?
我尝试验证、无效、重新验证和重新绘制各种组件。我什至尝试pack the ancestor window (当时弹出菜单的内容是动态的,我认为这就是导致问题的原因)。如果我使用多行 JLabel(使用 html 内容),它的行为方式相同。
编辑:更多研究
文本组件的首选大小可能是错误的。弹出菜单第一次显示之前,首选高度是21,显示后是51,所以是按照错误的首选尺寸显示的。 有没有办法提前计算出首选尺寸?
我将问题归结为以下最小示例:
public class PopupMenuFail extends JFrame {
public PopupMenuFail() {
final JTextPane text = new JTextPane();
text.setText("Some text long enough to be split into several lines.");
text.setMaximumSize(new Dimension(150, 1000)); // limit the width
final JPopupMenu popupMenu = new JPopupMenu();
popupMenu.add(text);
final JButton button = new JButton();
button.setAction(new AbstractAction("Click me") {
@Override
public void actionPerformed(ActionEvent e) {
popupMenu.show(button, 0, button.getHeight());
}
});
add(button);
}
private static void createAndShowGUI() {
JFrame frame = new PopupMenuFail();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
我运行的是 64 位 Linux,
# java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)
最佳答案
例如,您可以简单地使用 popupMenu.setPopupSize(500, 500)
为 JPopupMenu 设置默认的最小大小,这样就可以了。
但是,如果您尝试创建菜单,则应该检查 JMenu
和 JMenuItem
http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenu.html http://docs.oracle.com/javase/7/docs/api/javax/swing/JMenuItem.html
关于java - 首次单击后如何在弹出菜单中显示整个多行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27989593/