现在的位置: 首页 > 综合 > 正文

重绘组件

2018年01月31日 ⁄ 综合 ⁄ 共 3350字 ⁄ 字号 评论关闭

因为在网上找了好久一直没找到一些具体的例子,所以自己做完后,总结了一下
就这两种了

重绘背景:
思路:1.JPanel重写paintComponent()方法;
     2.在paintComponent()方法中通过不同的值可以改变要画的东西;
     3.setVarious()一个改变paintComponent()值--(我的是通过boolean) 
     4.在监听中改变这个值setVarious()不同的值;
     5.注意:setVarious()中一定要调用repaint()它自动调用paintComponent()

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Test extends JFrame{
private JPanel1 jp;
public  Test(){
init();
setSize(400,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void init(){
jp=new JPanel1();
final JButton jb=new JButton("确定");
jp.add(jb);
   this.getContentPane().add(jp);
   jb.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e) {
    jp.setShow(true);
     }
   });
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
}
}

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Label;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class JPanel1 extends JPanel{

private boolean show=false;

public void setShow(boolean show){
this.show=show;
repaint();
//调用paintComponent();
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
if(show==true){
ImageIcon image=new ImageIcon("图片地址");
g.drawImage(image.getImage(),0,0,getWidth(),getHeight(),null);
}else{
ImageIcon image=new ImageIcon("图片地址");
g.drawImage(image.getImage(),0,0,getWidth(),getHeight(),null);
}
}

}

2.面板重绘组件:
思路: 1.先把要添加的组件全部添加进去(如果组件太多建议继承JPanel),记得还要设置setVisible(false)不可见;
2.在paintComponent()中只要写去要显示的组件setVisible(true);就好了。
3.再将要添加的组件写在一个方法中,也只要setVisible(true);
4.最后一定要先一个方法将所有组件归false的方法,且每次调用要添加的方法时都要先调用至false方法;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Test extends JFrame{
private JPanel jp;
private JFrame j;
private JButton jb;
private JButton jb1;
private boolean show =false;
public  Test(){

init();
setSize(400,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(j.EXIT_ON_CLOSE);
setVisible(true);
}
public void init(){
jp= new JPanel();
  jb=new JButton("确定");
jp.add(jb);
   this.getContentPane().add(jp);
  jb1=new JButton("Test");
jb1.setVisible(false);
jp.add(jb1);
   jb.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e) {
     paint_false();
     paint_0();
     }
   });
}
public void paint_0(){
jb1.setVisible(true);
}

public void paint_false(){
    jb.setVisible(false);
    jb1.setVisible(false);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t=new Test();
}

}

3.添加组件  :直接在监听中添加,添加以后一定要JFrame.validate();//验证这个窗口中的组件,也就是刷新

4.添加组件:在paint(Graphics g);中用show变量控制绘制不同的组件; 1.1一定要this.paintImmediately(0,0,1024,768);//这里里面的值可以设大一点没事;1.2还要validate()因为你是添加组件,重绘这是在JPanel上,而JFrame不知道;

为什么没用repaint(),update()因为这两个方法,调用延时长,所以按下去的效果不会马上看出来,所以不推荐;

public void paintComponent(Graphics g){
super.paintComponent(g);
System.out.println("------------------------");
System.out.println(show);
if(show==true){
System.out.println(1);
// this.remove(jb2);
this.add(jb4);
}

if(show==false){
System.out.println(2);
this.add(jb2);

}

  

抱歉!评论已关闭.