我在弹出菜单和多行文字方面遇到了一些麻烦。第一次显示弹出菜单时,只显示第一行。这是第一次点击后的样子
并在第二次点击后
如何在第一次点击后显示整个文字?
我尝试验证,无效,重新验证和重新绘制各种组件。我甚至尝试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)
答案 0 :(得分:0)
您可以使用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