Java 修改jpopmpmenu/JMenuItem外观
我正在尝试创建一个自定义JPopupMenu,它有不同的颜色和圆形边框。我尝试了下面的代码,但是弹出菜单的外观没有改变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
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();
}
});
}
}