让JPanel不重叠显示问题

raysand raysand 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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);
}
}

}
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
raysand
Java SE 62,620 成员 307,251 内容