首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改JPopupMenu/JMenuItem外观

修改JPopupMenu/JMenuItem外观
EN

Stack Overflow用户
提问于 2021-02-26 16:29:59
回答 1查看 65关注 0票数 3

我正在尝试创建一个自定义的JPopupMenu,它具有不同的颜色和圆角边框。我尝试了以下代码,但PopupMenu的外观没有任何变化。

代码语言:javascript
复制
JButton button = new JButton("Test");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e){
        TPopupMenu popup = new TPopupMenu();
        JMenuItem item1 = new JMenuItem("Item 1");
        JMenuItem item2 = new JMenuItem("Item 2");
        popup.add(item1);
        popup.add(item2);
    }
}

自定义PopupMenu

代码语言:javascript
复制
public class TPopupMenu extends JPopupMenu{

    public TPopupMenu(){
        super();
        super.setOpaque(false);
        init();
    }
    
    private void init(){
        setBackground(Color.green);
    }
    
    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        
        g.setColor(Color.pink);
        
        int w = getWidth();
        int h = getHeight();
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTILIAS_ON);
        
        g2.fillRoundRect(0,0,w-1, h-1, 10, 10);
        g2.drawRoundRect(0,0,w-1, h-1, 10, 10);
        
        g2.setBackground(Color.red);
        g2.setColor(Color.green);
    }

}

这是我希望我的圆形弹出菜单看起来像这样:

我在paintComponent方法中做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-03-08 09:43:06

您的弹出窗口永远不可见,请调用show​(Component invoker, int x, int y)方法以显示JPopupMenu类。

在组件调用器...的坐标空间中的x,y位置显示弹出菜单

代码语言:javascript
复制
      JPopupMenu popup = new JPopupMenu();
      JMenuItem item = new JMenuItem("Item");
      popup.add(item);
      popup.show(frame, frame.getWidth()/2, frame.getHeight()/2);

或者,您也可以调用JPopupMenu.setVisible(boolean b)方法。

请参阅,

自定义

对于圆角边框,可以使用new LineBorder(Color.black, 2, true)LineBorder doc

如果你想要更大的定制,我建议你使用/编写一个外观。请参阅tutorial|uiswing

这是我的测试:

代码语言:javascript
复制
    public class Test {
    
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("HelloWorldSwing");
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
            JButton button = new JButton("Test");
    
            JPopupMenu popup = new JPopupMenu();
            popup.setBorder(new LineBorder(Color.black, 2, true));
    
            {
                JMenuItem item = new JMenuItem("Cut");
                item.setForeground(Color.ORANGE);
                popup.add(item);
            }
    
            {
                JMenuItem item = new JMenuItem("Copy");
                item.setBackground(Color.RED);
                popup.add(item);
            }
    
            {
                JMenuItem item = new JMenuItem("Paste");
                popup.add(item);
            }
    
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    popup.show(frame, frame.getWidth() / 2, frame.getHeight() / 2);
                    System.out.println("perfome");
                }
            });
    
            frame.getContentPane().add(button);
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    
    }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66382489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档