自动重画 在Jframe中调用paint()方法画图后,只要有个东西移动到图上,再移开图就没了,怎么能实现图自动重画呢?请帮忙解答,最好有代码片段和思路,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 部分代码:public class MainFrame extends JFrame implements iOperator, ActionListener { public void paint(Graphics g) { // TODO Auto-generated method stub super.paint(g); g.drawLine(50, 50, 100, 100); }} 程序应该是自动调用paint方法吧,但是貌似只画了一次,然后一有东西覆盖上去就被覆盖的部分就没了。 super.paint(g);去掉就行了你是用的JFrame的paint,所以不用super.paint(g); 请问 this.setVisible(true); 是在paint之前还是之后,把super.paint(g);去掉后,就只看到一条线,背景竟然是Frame后面的背景,就好像Frame是透明的一样,只有一条线,然后我在Frame设计的Menu菜单位置点击一下,之前设计好的页面就出来了,但是画的线就没了,还是没有被重画。 你的frame上面的控件,要设置setOpaque(false)才能把背面的背景画出来。而且建议你做个panel,把背景之类的画在panel上,然后把panel加到jframe中去,这样的话,比较好控制 我是把组件直接加在JFrame上,运行时就是一个Freme空框,只有一条线,里面就只有框后面的东西,例如windows桌面 那你试试看public void paint(Graphics g) { super.paint(g); Graphics g2 = getContentPane().getGraphics(); g2.drawLine(50, 50, 100, 100); }PS:5楼的 板砖 属于误操作 图是画出来了,但是很奇怪,我画的线在menu附近,我打开menu,只要中间的menuItem有一点点触到画的线,那条线就有一部分没了。消失的部分,坐标x,y小于触点的坐标,还是没能实现自动重画。 难道你想menu弹下来以后,线画在menu上? 呵呵,我已经完全不知道你想做啥了看看下面这个是不是你想要的效果public class Test4DrawLine extends JFrame { /** * @param args */ public static void main(String[] args) { new Test4DrawLine(); } public Test4DrawLine() { setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel myPanel = new MyPanel(); setContentPane(myPanel); JMenuBar jmb = new JMenuBar(); JMenu jm = new JMenu("Menu1"); JMenuItem jmi = new JMenuItem("MenuItem A"); jm.add(jmi); jmi = new JMenuItem("MenuItem B"); jm.add(jmi); jmi = new JMenuItem("MenuItem C"); jmi.setOpaque(false); jm.add(jmi); jm.setOpaque(false); jmb.add(jm); setJMenuBar(jmb); JButton btn = new JButton(); btn.setBounds(200, 200, 80, 30); btn.setText("Test"); myPanel.add(btn); setLayout(null); setVisible(true); } class MyPanel extends JPanel { @Override public void paint(Graphics g) { g.drawLine(10, 20, 100, 100); //super.paint(g); } }} 我想了想,应该是因为我没把线画在panel上的缘故,我是直接调用Frame的继承方法paint(),在paint里划线,所以一被覆盖就没了。 新人求助~急 你给我写一段代码好吗? 菜鸟提问 关于接口的一点疑惑 jsp如何做动态图表,比如柱状图 各位高手,能帮我看看这段java小程序到底错到哪里了么? 肚子饿了,不爽。散分。 请问如何将字节流转换为Blob?(100) 请问使用过JET的高手,关于JDBC的问题 那位大虾救救小弟? java怎么模拟登陆网站?就要一个登陆过程 java.sql.sqlexception microsoft odbc 驱动程序管理器 无效的游标状态
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
g.drawLine(50, 50, 100, 100);
}
}
你是用的JFrame的paint,所以不用super.paint(g);
而且建议你做个panel,把背景之类的画在panel上,然后把panel加到jframe中去,这样的话,比较好控制
super.paint(g);
Graphics g2 = getContentPane().getGraphics();
g2.drawLine(50, 50, 100, 100);
}
PS:5楼的 板砖 属于误操作
看看下面这个是不是你想要的效果public class Test4DrawLine extends JFrame { /**
* @param args
*/
public static void main(String[] args) {
new Test4DrawLine();
}
public Test4DrawLine() {
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel myPanel = new MyPanel();
setContentPane(myPanel);
JMenuBar jmb = new JMenuBar();
JMenu jm = new JMenu("Menu1");
JMenuItem jmi = new JMenuItem("MenuItem A");
jm.add(jmi);
jmi = new JMenuItem("MenuItem B");
jm.add(jmi);
jmi = new JMenuItem("MenuItem C");
jmi.setOpaque(false);
jm.add(jmi); jm.setOpaque(false);
jmb.add(jm);
setJMenuBar(jmb); JButton btn = new JButton();
btn.setBounds(200, 200, 80, 30);
btn.setText("Test");
myPanel.add(btn); setLayout(null);
setVisible(true);
}
class MyPanel extends JPanel {
@Override
public void paint(Graphics g) {
g.drawLine(10, 20, 100, 100);
//super.paint(g);
}
}}