请版主教我怎么重绘popupmenu

酷酷啦啦xsx 2013-12-24 03:44:58
右键菜单显示一个图片,上面是我的选项,
不知道怎么实现
...全文
353 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
酷酷啦啦xsx 2013-12-25
  • 打赏
  • 举报
回复
坐标是我后来换的,你是说这个思路是可以实现?搞不出来啊
teemai 2013-12-25
  • 打赏
  • 举报
回复
引用 3 楼 XSX127 的回复:
[quote=引用 2 楼 huxiweng 的回复:] [quote=引用 1 楼 XSX127 的回复:] @huxiweng,重绘按钮啊,panel都可以,这个没搞出来,这个不搞出来,主题风格就很不协调了
你先把你实现那部分代码发一下 [/quote] 这是在桌面显示的一个动态label 右键是这样的,可以看到后面有图片显示,但是被JMenuItem的背景挡住了,而且JMenuItem的背景也没搞好 这是代码
String ico = "UI\\BKIMG.png";
	
	JFrame mini = new JFrame();
	MyPanel rootp = new MyPanel();
	JLabel beaut = new JLabel(new ImageIcon("UI\\25368_1.gif"));
	Point p1_p = new Point(0,0);					//用于窗口拖拽
	MyPopmenu popm = new MyPopmenu(ico);
	MyMenuItem mainp = new MyMenuItem();
	JMenuItem restart = new JMenuItem("重启");
	JMenuItem dstroy = new JMenuItem("注销");
	JMenuItem colse = new JMenuItem("关机");
	JMenuItem exit = new JMenuItem("退出");
	public void wininit(){
		
		mainp.setStr("张雄");

		mainp.setBackImg2("UI\\miniTextA.png");

		popm.setPopupSize(55, 225);

		popm.setBorderPainted(false);

		popm.add(mainp);
		popm.addSeparator();
		popm.add(restart);popm.addSeparator();
		popm.add(dstroy);popm.addSeparator();
		popm.add(colse);popm.addSeparator();
		popm.add(exit);
		
		rootp.setLayout(null);
		rootp.addMouseListener(this);
		rootp.addMouseMotionListener(this);
		rootp.setSize(40, 40);
		
		beaut.setSize(40, 40);
		rootp.add(beaut);
		rootp.add(popm);
		
		mini.setContentPane(rootp);
		mini.setResizable(false);
		mini.setUndecorated(true);
		AWTUtilities.setWindowOpaque(mini, false);
		mini.setSize(400, 300);
		mini.setVisible(true);
	}
下面这个是重绘popupmenu的代码
public class MyPopmenu extends JPopupMenu{
   private Image backImg;
    
    
    public MyPopmenu(String imgPath){
    	try
    	{
    	File f = new File(imgPath);
    	backImg = ImageIO.read(f);
    	}
    	catch (IOException e)
    	{
    	e.printStackTrace();
    	}
    }
    
    public MyPopmenu(){
       
    }
    public void SetDefulatSize(){
    	
    }
    @Override
     public void paintComponent(Graphics g) {
         super.paintComponent(g);
         if(backImg!=null)
             g.drawImage(backImg, 0, 0,100,50, null);
     }

    public Image getBackImg() {
        return backImg;
    }

    public void setBackImg(Image backImg) {
        this.backImg = backImg;
        this.repaint();
    }
    
    public void setBackImg2(String img2Path) {
    	Image backImg2 = null ;
    	try
    	{
    	File f = new File(img2Path);
    	backImg2 = ImageIO.read(f);
    	}
    	catch (IOException e)
    	{
    	e.printStackTrace();
    	}
        this.backImg = backImg2;
        this.repaint();
    }
}
menuitem的重绘和这个是一样的就不发了 如果右键菜单直接add(“sxsxs”),好像也不行 是想做成这个风格的[/quote] 你那个右键背景图片还是重PS下。还有就是paintComponent方法里那个坐标也要调整下
酷酷啦啦xsx 2013-12-25
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:
[quote=引用 1 楼 XSX127 的回复:]
@huxiweng,重绘按钮啊,panel都可以,这个没搞出来,这个不搞出来,主题风格就很不协调了


你先把你实现那部分代码发一下
[/quote]


这是在桌面显示的一个动态label

右键是这样的,可以看到后面有图片显示,但是被JMenuItem的背景挡住了,而且JMenuItem的背景也没搞好

这是代码
String ico = "UI\\BKIMG.png";

JFrame mini = new JFrame();
MyPanel rootp = new MyPanel();
JLabel beaut = new JLabel(new ImageIcon("UI\\25368_1.gif"));
Point p1_p = new Point(0,0); //用于窗口拖拽
MyPopmenu popm = new MyPopmenu(ico);
MyMenuItem mainp = new MyMenuItem();
JMenuItem restart = new JMenuItem("重启");
JMenuItem dstroy = new JMenuItem("注销");
JMenuItem colse = new JMenuItem("关机");
JMenuItem exit = new JMenuItem("退出");
public void wininit(){

mainp.setStr("张雄");

mainp.setBackImg2("UI\\miniTextA.png");

popm.setPopupSize(55, 225);

popm.setBorderPainted(false);

popm.add(mainp);
popm.addSeparator();
popm.add(restart);popm.addSeparator();
popm.add(dstroy);popm.addSeparator();
popm.add(colse);popm.addSeparator();
popm.add(exit);

rootp.setLayout(null);
rootp.addMouseListener(this);
rootp.addMouseMotionListener(this);
rootp.setSize(40, 40);

beaut.setSize(40, 40);
rootp.add(beaut);
rootp.add(popm);

mini.setContentPane(rootp);
mini.setResizable(false);
mini.setUndecorated(true);
AWTUtilities.setWindowOpaque(mini, false);
mini.setSize(400, 300);
mini.setVisible(true);
}


下面这个是重绘popupmenu的代码
public class MyPopmenu extends JPopupMenu{
private Image backImg;


public MyPopmenu(String imgPath){
try
{
File f = new File(imgPath);
backImg = ImageIO.read(f);
}
catch (IOException e)
{
e.printStackTrace();
}
}

public MyPopmenu(){

}
public void SetDefulatSize(){

}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(backImg!=null)
g.drawImage(backImg, 0, 0,100,50, null);
}

public Image getBackImg() {
return backImg;
}

public void setBackImg(Image backImg) {
this.backImg = backImg;
this.repaint();
}

public void setBackImg2(String img2Path) {
Image backImg2 = null ;
try
{
File f = new File(img2Path);
backImg2 = ImageIO.read(f);
}
catch (IOException e)
{
e.printStackTrace();
}
this.backImg = backImg2;
this.repaint();
}
}


menuitem的重绘和这个是一样的就不发了

如果右键菜单直接add(“sxsxs”),好像也不行
是想做成这个风格的
teemai 2013-12-24
  • 打赏
  • 举报
回复
引用 1 楼 XSX127 的回复:
@huxiweng,重绘按钮啊,panel都可以,这个没搞出来,这个不搞出来,主题风格就很不协调了
你先把你实现那部分代码发一下
酷酷啦啦xsx 2013-12-24
  • 打赏
  • 举报
回复
@huxiweng,重绘按钮啊,panel都可以,这个没搞出来,这个不搞出来,主题风格就很不协调了

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧