设计思路是一个大的Jpanel(继承Frame)上布局有一些常规控件,另外还添加了一个小Jpanel,这个Jpanel上用于绘制出点(点坐标已有)。效果是点击某一个按钮,小Jpanel上绘制出点。问题是运行后Frame下的组件都能显示,但点击按钮小Jpanel绘出的点一闪即逝,或是根本不显示。试过将绘制方法重写并放入另一线程中,仍然不能解决。 急!!!望大神们不吝赐教,谢谢Java控件
解决方案 »
- java异常设计???
- 关于vector的问题
- JComboBox无法动态改变
- 写了CET4分数换算程序,有个错误,请DX执教..
- 在武汉的vb.net高手并且想赚外块(5天1500元人民币)的请联系我!QQ:14808015
- 于集合工具类Collections中的泛型问题,求详细解答。
- ???请高人指点!!!Java多线程中run()方法中的while(true)循环有什么意义?
- 求助~~~~~~!!!!!!!!
- 看看错在哪里?计算1/1600,要求精确到小数点后50位,我才学到数组
- 为什么创建的线程数和用Thread.activeCount()方法得到的数字不同?
- 求助一道实际题目
- javase 项目打包成jar之后,sqlite内嵌数据库文件加载不了
private Image memoryImage;
/**双缓冲画笔*/
private Graphics memoryGraphics;//重新开辟一块内存区域,用于存放叠加后的图片
this.memoryImage = this.createImage(900,700);
//从双缓冲画布当中得到双缓冲画笔,这样通过双缓冲画笔绘制的图片就会叠加在双缓冲画布中
this.memoryGraphics = this.memoryImage.getGraphics();
//绘制文字
this.memoryGraphics.drawString("分数:"+pointer, 100, 57);
//绘制图片
this.memoryGraphics.drawImage(hartNumImg,50,80,30,25,this);
class Mypaintpanel extends JPanel implements Runnable
{
private static final long serialVersionUID = 1L;
public Mypaintpanel()
{
super();
}
public void paint(Graphics g)
{
super.paint(g);
ArrayList<PointStruct> point = new ArrayList<PointStruct>();
for(int i = 0;i<point.size();i++)
{
g.setColor(Color.RED);
g.drawString("@",X[i],Y[i]);
}
}
public void run()
{
mypanel.paint(panelforshow.getGraphics());//panelforshow是显示图像的 panel
mypanel.repaint();
}
}
点的数据结构什么的就不列出来了。调用的代码:
/**处理绘图的线程*/
Runnable rb = new Mypaintpanel();
Thread td = new Thread(rb);
td.start();
结构就是大的Jpanel上布局一些控件,另外小的panel是用来显示的。点击按钮后启动线程,大家可以看看代码吧
大的Jpanel,小的panel,mypanel,panelforshow 哪个是Mypaintpanel的对象?
另外,repaint()将自动调用paint(Graphics g),而这里的参数 g 是自身的!!即mypanel.repaint();
是在mypanel上画
mypanel.paint(panelforshow.getGraphics());//panelforshow是显示图像的 panel
mypanel.repaint();
如果上面的第2句去掉,不知什么效果
不建议使用mypanel.paint(panelforshow.getGraphics());的形式,最好panelforshow.repaint();
import javax.swing.border.*;
import java.awt.*;class MyJPanle extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//话一个区域
g.setColor(Color.YELLOW);
g.fillRect(20,20,50,80);
//画一行文字
g.setColor(Color.BLACK);
g.setFont(new Font("Times New Roman",Font.BOLD,20));
g.drawString("The National GeoGraphics",40,50);
}
}public class JPanelTest extends JFrame
{
private JPanel big;
private JPanel small; public JPanelTest()
{
//自由定位
setLayout(null);
setBounds(0,0,800,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
big = new JPanel();
big.setBounds(0,0,500,500);
//为了方便看,给Big画一个边框
Border lb = BorderFactory.createLineBorder(Color.ORANGE,7);
big.setBorder(lb);
add(big); Border lb2 = BorderFactory.createLineBorder(Color.ORANGE,7);
//让小panel 是自己实现的Panel
small = new MyJPanle();
small.setBounds(50,50,300,200);
small.setBorder(lb2);
big.setLayout(null);
big.add(small); //在samll panel 里面画东西
setVisible(true);
} public static void main(String[] args)
{
JPanelTest f = new JPanelTest();
System.out.println("Hello World!");
}
}
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;class MyJPanle extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(JPanelTest.flag)
{
//话一个区域
g.setColor(Color.YELLOW);
g.fillRect(20,20,50,80);
//画一行文字
g.setColor(Color.BLACK);
g.setFont(new Font("Times New Roman",Font.BOLD,20));
g.drawString("The National GeoGraphics",40,50);
}
else
{
//话一个区域
g.setColor(Color.YELLOW);
g.fillRect(20,20,50,80);
//画一行文字
g.setColor(Color.BLACK);
g.setFont(new Font("宋体",Font.BOLD,20));
g.drawString("国家地理杂志",40,50);
} }
}public class JPanelTest extends JFrame
{
public static boolean flag;
private JPanel big;
private JPanel small;
private JButton btnAction; static{
flag = true;
}
public JPanelTest()
{
//自由定位
setLayout(null);
setBounds(0,0,800,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
big = new JPanel();
big.setBounds(0,0,500,500);
//为了方便看,给Big画一个边框
Border lb = BorderFactory.createLineBorder(Color.ORANGE,7);
big.setBorder(lb);
add(big);
Border lb2 = BorderFactory.createLineBorder(Color.ORANGE,7);
//让小panel 是自己实现的Panel
small = new MyJPanle();
small.setBounds(50,50,300,200);
small.setBorder(lb2);
big.setLayout(null);
big.add(small); //在samll panel 里面画东西
btnAction = new JButton("Click Me");
btnAction.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JPanelTest.flag = !JPanelTest.flag;
small.repaint();
}
});
btnAction.setBounds(10,10,100,30);
big.add(btnAction);
setVisible(true);
} public static void main(String[] args)
{
JPanelTest f = new JPanelTest();
System.out.println("Hello World!");
}
}