Java 修改jpopmpmenu/JMenuItem外观

Java 修改jpopmpmenu/JMenuItem外观,java,jpopupmenu,Java,Jpopupmenu,我正在尝试创建一个自定义JPopupMenu,它有不同的颜色和圆形边框。我尝试了下面的代码,但是弹出菜单的外观没有改变 JButton button = new JButton("Test"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e){ TPopupMenu popup = new T

我正在尝试创建一个自定义JPopupMenu,它有不同的颜色和圆形边框。我尝试了下面的代码,但是弹出菜单的外观没有改变

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);
    }
}
自定义弹出菜单

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方法是否出错?

您的弹出窗口永远不可见,请调用
显示​(组件调用程序,int x,int y)
方法来显示
jpopmpmenu

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

jpopplus popup=新建jpopplus();
JMenuItem项目=新的JMenuItem项目(“项目”);
弹出。添加(项目);
show(frame,frame.getWidth()/2,frame.getHeight()/2);
或者您也可以调用
jpopmpmen.setVisible(布尔b)
方法

请参见


定制 对于圆角边框,您可以使用
新线条边框(Color.black,2,true)

如果你想要大的定制,我建议你使用/写一个外观和感觉。看

这是我的测试:

公共类测试{
私有静态void createAndShowGUI(){
JFrame=newjframe(“HelloWorldSwing”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton按钮=新JButton(“测试”);
JPopupMenu popup=新的JPopupMenu();
popup.setboorder(新的线条边框(Color.black,2,true));
{
JMenuItem=新的JMenuItem(“切割”);
项目。设置前景(颜色为橙色);
弹出。添加(项目);
}
{
JMenuItem=新的JMenuItem(“副本”);
项目背景(颜色:红色);
弹出。添加(项目);
}
{
JMenuItem=新的JMenuItem(“粘贴”);
弹出。添加(项目);
}
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
show(frame,frame.getWidth()/2,frame.getHeight()/2);
System.out.println(“performe”);
}
});
frame.getContentPane().add(按钮);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
createAndShowGUI();
}
});
}
}