JFrame中,不同的的选项加载不同的JPanel,可是先选了“曲线图”,绘制完成,再选“直方图”绘制,刚画的直线还在图上。怎样去除刚刚画的直线呢?
下面的代码是我简化过的例子。谢谢各位大虾了:)import java.awt.BorderLayout;
import java.awt.Container;
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.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JPanelTest extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JButton buttonSelect;
JComboBox typeChoices = null;
JPanel mainPanel= new JPanel();
JPanel selectPanel= new JPanel();
JPanel displayPanel= new JPanel();
//Container contentPane=getContentPane();
public JPanelTest(){
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(mainPanel);
selectPanel.setLayout(new FlowLayout()); mainPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.add(selectPanel,BorderLayout.NORTH);
mainPanel.add(displayPanel,BorderLayout.CENTER);
//Add a border around the select panel.
selectPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("选择条件:"),
BorderFactory.createEmptyBorder(5,5,5,5)));
//Add a border around the display panel.
displayPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("显示结果:"),
BorderFactory.createEmptyBorder(5,5,5,5)));
//按钮
buttonSelect=new JButton("确定");
buttonSelect.addActionListener(this);
//ComboBox
String[] phasesType = {"曲线图","直方图"};
typeChoices = new JComboBox(phasesType);
typeChoices.setSelectedIndex(0);
selectPanel.add(Box.createRigidArea(new Dimension(10,0)));
selectPanel.add(typeChoices);
selectPanel.add(Box.createRigidArea(new Dimension(50,0)));
selectPanel.add(buttonSelect);
}
public static void main(String args[]){new JPanelTest();} public void actionPerformed(ActionEvent e) {
//按下按钮
if (e.getSource()==buttonSelect){
//如果选择曲线图
if(typeChoices.getSelectedIndex()==0){
LineSinproSearch lineprosearch=new LineSinproSearch();
lineprosearch.paint(this.getGraphics());
displayPanel.removeAll();
displayPanel.add(lineprosearch,BorderLayout.CENTER);
displayPanel.revalidate();
displayPanel.repaint();
displayPanel.setVisible(true); }
//如果选择直方图
else if(typeChoices.getSelectedIndex()==1){
//displayPanel.setVisible(true);
RectSinproSearch rectprosearch=new RectSinproSearch();
rectprosearch.paint(this.getGraphics());
displayPanel.removeAll();
displayPanel.add(rectprosearch,BorderLayout.CENTER);
displayPanel.revalidate();
displayPanel.repaint();
displayPanel.setVisible(true);
}
}
}
//曲线图类
class LineSinproSearch extends JPanel{ /**
*
*/
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
g.drawLine(100, 200, 300, 400);
}
}
//直方图类
class RectSinproSearch extends JPanel{ /**
*
*/
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
g.drawRect(100, 200, 100, 200);
}
}}
下面的代码是我简化过的例子。谢谢各位大虾了:)import java.awt.BorderLayout;
import java.awt.Container;
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.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class JPanelTest extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JButton buttonSelect;
JComboBox typeChoices = null;
JPanel mainPanel= new JPanel();
JPanel selectPanel= new JPanel();
JPanel displayPanel= new JPanel();
//Container contentPane=getContentPane();
public JPanelTest(){
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(mainPanel);
selectPanel.setLayout(new FlowLayout()); mainPanel.setLayout(new BorderLayout());
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.add(selectPanel,BorderLayout.NORTH);
mainPanel.add(displayPanel,BorderLayout.CENTER);
//Add a border around the select panel.
selectPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("选择条件:"),
BorderFactory.createEmptyBorder(5,5,5,5)));
//Add a border around the display panel.
displayPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("显示结果:"),
BorderFactory.createEmptyBorder(5,5,5,5)));
//按钮
buttonSelect=new JButton("确定");
buttonSelect.addActionListener(this);
//ComboBox
String[] phasesType = {"曲线图","直方图"};
typeChoices = new JComboBox(phasesType);
typeChoices.setSelectedIndex(0);
selectPanel.add(Box.createRigidArea(new Dimension(10,0)));
selectPanel.add(typeChoices);
selectPanel.add(Box.createRigidArea(new Dimension(50,0)));
selectPanel.add(buttonSelect);
}
public static void main(String args[]){new JPanelTest();} public void actionPerformed(ActionEvent e) {
//按下按钮
if (e.getSource()==buttonSelect){
//如果选择曲线图
if(typeChoices.getSelectedIndex()==0){
LineSinproSearch lineprosearch=new LineSinproSearch();
lineprosearch.paint(this.getGraphics());
displayPanel.removeAll();
displayPanel.add(lineprosearch,BorderLayout.CENTER);
displayPanel.revalidate();
displayPanel.repaint();
displayPanel.setVisible(true); }
//如果选择直方图
else if(typeChoices.getSelectedIndex()==1){
//displayPanel.setVisible(true);
RectSinproSearch rectprosearch=new RectSinproSearch();
rectprosearch.paint(this.getGraphics());
displayPanel.removeAll();
displayPanel.add(rectprosearch,BorderLayout.CENTER);
displayPanel.revalidate();
displayPanel.repaint();
displayPanel.setVisible(true);
}
}
}
//曲线图类
class LineSinproSearch extends JPanel{ /**
*
*/
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
g.drawLine(100, 200, 300, 400);
}
}
//直方图类
class RectSinproSearch extends JPanel{ /**
*
*/
private static final long serialVersionUID = 1L;
public void paint(Graphics g) {
g.drawRect(100, 200, 100, 200);
}
}}
if (e.getSource()==buttonSelect)
{
displayPanel.revalidate();
displayPanel.repaint();
.........
}
如果用BufferedImage,在多次选择加载后,也会存在在一个上面摞很多个的情况吧~~
我现在就是在那个ComboBox里加入了监听,一旦选择了,执行diaplayPanle.repaint();
就是在选择显示种类的时候,下面的图就没了,一点确定,再出现新图。
没有达到预想的在点确定才重画的效果~~