Tag: jpopupmenu

右键单击不显示JPopupMenu

import java.awt.FlowLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; public class B extends MouseAdapter { JFrame frame = new JFrame(); JPopupMenu popup = new JPopupMenu(); JMenuItem item1 = new JMenuItem(“ADD”); JMenuItem item2 = new JMenuItem(“DELETE”); public static void main(String arg[]) { new B(); } B() { frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setLayout(new FlowLayout()); frame.addMouseListener(this); popup.add(item1); popup.add(item2); […]

Swing和Nimbus:替换JPopupMenu的背景(附加到JMenu)

Nimbus通常看起来很棒,但对于某些颜色组合,结果是非最佳的。 在我的情况下, JPopupMenu的背景不适合,这就是我想手动设置的原因。 我正在使用Java 7,有趣的是,Nimbus完全忽略了UIManager中某些属性的设置(如PopupMenu.background )。 所以我唯一的选择是创建一个覆盖paintComponent(…)的JPopupMenu的子类。 我知道,这很讨厌,但至少它起作用了。 但是,如果你将JMenu添加到另一个菜单,它会嵌入它自己的JPopupMenu实例,我无法弄清楚如何用我自己的子类替换它。 即使为嵌入式实例分配自己的PopupMenuUI也没有带来任何结果。 如果直接从JPopupMenuinheritance,则调用overriden paint(…)方法,但是,无论我做什么,都没有绘制任何内容。 如果inheritance自javax.swing.plaf.synth.SynthPopupMenuUI paint甚至没有调用,结果就是我根本没有设置自己的PopupMenuUI 。 所以简单的问题是:如何使用Nimbus作为L&F,在Java 7上调整一个JPopupMenu的背景颜色或(如果这样更容易)? 编辑:代码示例 看一下下面的代码和结果: public static void main(final String[] args) { try { UIManager.setLookAndFeel(NimbusLookAndFeel.class.getCanonicalName()); UIManager.getLookAndFeelDefaults().put(“PopupMenu.background”, Color.GREEN); UIManager.getLookAndFeelDefaults().put(“Panel.background”, Color.RED); UIManager.getLookAndFeelDefaults().put(“List.background”, Color.BLUE); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { e.printStackTrace(); } JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200,200); […]

使用Clipboard和AbstractAction进行JTable复制和粘贴

当我尝试使用table.setValueAt()粘贴到JTable单元格时,我粘贴的单元格仍为空白,但setValueAt()似乎正在工作。 此外,当我尝试从一个单元格中剪切或复制时,当我想要粘贴到另一个单元格时,我的JPopupMenu上的粘贴选项仍然处于禁用状态。 我不知道为什么。 我的代码如下。 class CopyAction extends AbstractAction { private JTable table; public CopyAction(JTable table) { this.table = table; } @Override public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); int col = table.getSelectedColumn(); Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); cb.setContents(new CellTransferable(table.getValueAt(row, col)), null); } } class CutAction extends AbstractAction { private JTable table; public CutAction(JTable table) […]

JTable上的JPopupMenu – >获取创建菜单的单元格

我有一种情况,当右键单击JTable时,我创建了一个弹出菜单。 创建弹出菜单的标准方法: aJTable.setComponentPopupMenu(rightClickMenu); 之后在注册的操作中,我无法找到右键单击哪个单元格以显示该弹出菜单。 rightClickMenuItem.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { // Work out what cell was right clicked to generate the menu } }); 关于你如何做到这一点的任何想法?

使用某个左下角坐标进行JPopupMenu显示

假设我想以这样的方式在Java中创建一个按钮,这样当您单击它时,就会出现JPopupMenu 。 它出现的相关代码是menu.show(button, button.getWidth()/2, button.getHeight()/2); ,这使得JPopupMenu的左上角显示在按钮的中心,如下所示: 但是,我希望它能让左下角位于按钮的中央,就像iTunes一样(左下角有一个按钮,大小与+按钮相同)左边): 我试图通过获取JPopupMenu的高度并将其添加到弹出菜单显示的y坐标来实现这一点,但我发现JPopupMenu在可见之前的高度为0,而不是帮助我,因为我试图告诉计算机在哪里可以看到它。 此外,不可能在偏移中进行硬编码,因为弹出窗口中的项目数量不一定相同。 我怎样才能使我的JPopupMenu具有未知的高度,以便它的左下角坐标与给定的坐标相匹配?

当子弹出窗口打开时,JPopupMenu关闭

我在JPopupMenu中有一个JComboBox(以及其他组件)。 事实certificate,每当我打开combobox的弹出窗口(选择一个项目)时,父JPopupMenu就会关闭。 我一直试图找到一种方法来覆盖这个function,但无济于事。 有没有人有任何建议,以防止关闭父JPopupMenu? 谢谢!

JTable设计与后端数据结构同步

我有一个使用表模型从数据结构加载的JTable。数据结构的格式为NavigableMap<Float,NavigableMap> 。示例数据为: Table Format: Range f1,v1 f2,v2 f3,v3 f4,v4 12.1-30.2 30,true 32,false 45,true 50,false 30.2-45.6 30,true 32.4,true 45,true 50.1,true 以上数据格式在DS中表示为 DS Format: Key Value 12.1 <,,,> 30.2 <,,,> 45.6 null 我已经设法使用table-model在Jtable中表示上面给出的数据。一旦数据从DS加载到表我必须允许用户编辑。现在我有问题。我怀疑是否应该保留数据结构与表中的更改同步,或者我应该在用户完成编辑后从表中重新创建DS,然后将其替换为旧的DS。 更多我需要validation数据(例如从上面 – 假设用户想要编辑值30.1。他应该只允许输入12.1和45.6之间的值。因为数据表是字符串的(一旦加载)我是计划使用正则表达式和键监听器,并使用所有用户键按下与正则表达式不匹配的值和不在范围内的值。我不确定这是一个好主意还是含义。我会想得到一些建议。