求看下我这个程序怎不不显示,所画的图呢
package object;
import java.awt.Color;
import javax.swing.*;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class pain12 extends Thread {
static int []array=new int[]{80, 110, 130, 190, 175, 150, 140, 110, 220, 100, 70, 185};
static int n=12;
static JPanel pan = new JPanel();
static JFrame frm = new JFrame();
public void main(String[]args)
{
frm.setSize(300,250);
frm.add(pan);
pan.setBounds(100,100,300,250);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
public void paintComponent(Graphics g)
{
pan.paintComponents(g);
g.setColor(Color.red);
g.drawRect(500,(480-array[0]),20,array[0]);
g.drawRect(520,(480-array[1]),20,array[1]);
g.drawRect(540,(480-array[2]),20,array[2]);
g.drawRect(560,(480-array[3]),20,array[3]);
g.drawRect(580,(480-array[4]),20,array[4]);
g.drawRect(600,(480-array[5]),20,array[5]);
g.drawRect(620,(480-array[6]),20,array[6]);
g.drawRect(640,(480-array[7]),20,array[7]);
g.drawRect(660,(480-array[8]),20,array[8]);
g.drawRect(680,(480-array[9]),20,array[9]);
g.drawRect(700,(480-array[10]),20,array[10]);
g.drawRect(720,(480-array[11]),20,array[11]);
}
}
[解决办法]
你的paintComponent什么情况下执行?现在应该是没有执行
另外,若是执行的话,g是哪个的?也就是说你画的东西是画在哪个上面的,pan?
[解决办法]
首先,你连main函数都写错了;其次,你没明白重绘的意思;
如:你想重绘个panel
public class MyPanel extends JPanel{
private Color color=Color.black;
private boolean show=true;
public void paintComponent(Graphics g){
super.paintComponent(g);
if(show){
g.setColo(color);
g.fillOval(0, 0,20, 20);
}
} }
然后你的Panel应该继承MyPanel
[解决办法]
这是啥程序 ? main方法不是静态的,这段代码能运行么?
1. main方法不是程序的入口函数;
2. 基础Thread类,没有重写run方法,不知道这个继承有什么作用;
3. paintComponent方法,通常是JComponent类下面的方法,
楼主写在一个非JComponent家族类中,是无法重写父类同名方法的,因为父类没这方法;
4. paintComponent是一个托管调用的方法,就是说,这个方法是UI绘制线程来调用的,
楼主pan.paintComponents(g);的使用手法,我有点纠结,因为paint方法会绘制子对象的图形
我想LZ还是多理解一下基础知识比较好。
[解决办法]
package com.example.learnjava.Common;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Pain12 extends JFrame {
private static final long serialVersionUID = 209054946722126649L;
static int[] array = new int[] { 80, 110, 130, 190, 175, 150, 140, 110,
220, 100, 70, 185 };
static int n = 12;
static JPanel pan = new JPanel();
public Pain12(){
setSize(800, 850);
add(pan);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
Pain12 p=new Pain12();
Graphics g=p.getGraphics();
p.paint(g);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);
g.drawRect(500, (480 - array[0]), 20, array[0]);
g.drawRect(520, (480 - array[1]), 20, array[1]);
g.drawRect(540, (480 - array[2]), 20, array[2]);
g.drawRect(560, (480 - array[3]), 20, array[3]);
g.drawRect(580, (480 - array[4]), 20, array[4]);
g.drawRect(600, (480 - array[5]), 20, array[5]);
g.drawRect(620, (480 - array[6]), 20, array[6]);
g.drawRect(640, (480 - array[7]), 20, array[7]);
g.drawRect(660, (480 - array[8]), 20, array[8]);
g.drawRect(680, (480 - array[9]), 20, array[9]);
g.drawRect(700, (480 - array[10]), 20, array[10]);
g.drawRect(720, (480 - array[11]), 20, array[11]);
}
}
main()java入口函数,必须是静态的。
[解决办法]
首先,想用paintComponent方法的活,要继承一个容器,因为paintComponent这个方法是系统调用的,继承窗口才能被调用
最后,调用一下repaint方法看看行不行