java绘图

A_dang_A_la 2009-08-14 04:54:22
我用2D绘图,绘制一张背景在容器上,但是在向容器添加组件,组件不能显示出来,是什么原因啊?
...全文
597 25 打赏 收藏 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
你说用UI那个是怎么做的啊
lasfrost 2009-08-16
  • 打赏
  • 举报
回复
刚才没注意看,你不能显示图片的最主要原因应该是在container 中添加了两个位置重叠的panel。
这样改应该可以了,我没图片,你试下吧:

import java.awt.*;
import javax.swing.*;

public class Main extends JFrame {
private static final long serialVersionUID = 6255547924567748039L;
public Main() {
Container container = getContentPane();
container.setLayout(null);
setSize(new Dimension(290, 160));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents(container);
setVisible(true);
}

public void initComponents(Container c) {
JPanel panel = new JPanel() {
Image img = Toolkit.getDefaultToolkit().getImage("image/m.png");
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
}
};
panel.setBounds(0, 0, 290, 160);

JButton prebutton = new JButton(new ImageIcon("image/pre1.png"));
prebutton.setRolloverIcon(new ImageIcon("image/pre2.png"));
prebutton.setBounds(135, 80, 40, 40);
panel.add(prebutton);

JButton playbutton = new JButton(new ImageIcon("image/play1.png"));
playbutton.setRolloverIcon(new ImageIcon("image/play2.png"));
playbutton.setBounds(165, 80, 40, 40);
panel.add(playbutton);

JButton stopbutton = new JButton(new ImageIcon("image/stop1.png"));
stopbutton.setRolloverIcon(new ImageIcon("image/stop2.png"));
stopbutton.setBounds(195, 80, 40, 40);
panel.add(stopbutton);

JButton nextbutton = new JButton(new ImageIcon("image/next1.png"));
nextbutton.setRolloverIcon(new ImageIcon("image/next2.png"));
nextbutton.setBounds(225, 80, 40, 40);
panel.add(nextbutton);

c.add(panel);
}

public static void main(String[] args) {
new Main();
}
}
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
lasfrost 您好 ·· 你能把全部代码 一起附上吗 UI 我没有用过
酒浪子 2009-08-16
  • 打赏
  • 举报
回复
学习!
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
只能看见按钮 看不见图
lasfrost 2009-08-16
  • 打赏
  • 举报
回复
解决楼主问题的完美方式,用ui:

public class SkinedUI extends ComponentUI {
private Image skinImg;
public SkinedUI(Image skinImg) {
this.skinImg = skinImg;
}
public void paint(Graphics g, JComponent c) {
g.drawImage(skinImg, 0, 0, null);
}
}

把Canvas换成JPanel,Canvas 是awt里的,最好别跟swing混用

Image img = Toolkit.getDefaultToolkit().getImage("image/m.png");
JPanel panel = new JPanel();
panel.setUI(new SkinedUI(img));//这里设置ui
panel.setBounds(0, 0, 290, 160);
container.add(panel);
panel.add(prebutton);
......


下一个问题,

public void mouseEntered(MouseEvent e) {
prebutton.setIcon(new ImageIcon("image/pre2.png"));
}
public void mouseExited(MouseEvent e) {
prebutton.setIcon(new ImageIcon("image/pre1.png"));
}
});

楼主的意思是想鼠标进入和离开的时候分别显示不同的外观吧,API里有现成的,这样就行了:

JButton prebutton = new JButton(new ImageIcon("image/pre1.png"));
prebutton.setRolloverIcon(new ImageIcon(("image/pre2.png"));//这里设置鼠标进入后的外观图片
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
解决了 按钮可以放下来了 你的QQ是多少啊
lasfrost
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
你的QQ是好多啊 ?
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
但是按钮为什么在图片的上面啊 ? 不能设置在我想要的位置吗? 我改不起啊···
lasfrost 2009-08-16
  • 打赏
  • 举报
回复
不用ui也行,什么方便用什么吧。
很久没用swing了,setUI好像是protected的,panel.setUI(new SkinedUI(img));在外部设置ui是错的,额,我发现我的错误还不少,汗
A_dang_A_la 2009-08-16
  • 打赏
  • 举报
回复
lasfrost 按钮放在图片的上面 而不是在下面啊
j1223jesus 2009-08-15
  • 打赏
  • 举报
回复
我上面发的图能看得到吗??不是四个按钮在一张图片上吗。。。。。
A_dang_A_la 2009-08-15
  • 打赏
  • 举报
回复
背景是图片 然后按钮是在图片上面哈
j1223jesus 2009-08-15
  • 打赏
  • 举报
回复
背景是张图片,前面4个按钮吧。。。
j1223jesus 2009-08-15
  • 打赏
  • 举报
回复

楼主还是不行吗??我上面发的代码自己运行没问题。。。。。
A_dang_A_la 2009-08-15
  • 打赏
  • 举报
回复
用你说的连M.PNG 图也不能绘制出来 是不是 你哪里写错了啊?
lasfrost 2009-08-15
  • 打赏
  • 举报
回复
问题出在这里
class CanvasPanel extends Canvas {
public void paint(Graphics g) {
super.paint(g); // 这里绘制组件自己已经在上面添加的button等
Graphics2D g1 = (Graphics2D) g;
img = Toolkit.getDefaultToolkit().getImage("image/m.png");
g1.drawImage(img, 0, 0, this); //这里又在上面绘图,所以把组件冲刷掉了。
}
}
调下绘制顺序
最好是用paintComponent方法,不用调顺序:

class CanvasPanel extends Canvas {
public void paintComponent(Graphics g) {
super.paint(g);
Graphics2D g1 = (Graphics2D) g;
img = Toolkit.getDefaultToolkit().getImage("image/m.png");
g1.drawImage(img, 0, 0, this);
}
}
A_dang_A_la 2009-08-14
  • 打赏
  • 举报
回复
我想要的是背景图片(m.png)能显示出来 而且按钮还是能在上面显示出来
A_dang_A_la 2009-08-14
  • 打赏
  • 举报
回复
我试一下哈 谢了
j1223jesus 2009-08-14
  • 打赏
  • 举报
回复
楼主想做播放器吧,canvaspanel感觉用jpanel就行了,不需要用canvas
重写paint()方法要注意一下,我怀疑是super.paint()那里错了,所以我改了一下
加载更多回复(5)

62,620

社区成员

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

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