让JPanel不重叠显示问题

raysand 2007-06-18 02:50:59
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);
}
}

}
...全文
391 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
raysand 2007-06-21
  • 打赏
  • 举报
回复
JTabbedPane 不能达到想要的在一个页面显示的效果。
我现在就是在那个ComboBox里加入了监听,一旦选择了,执行diaplayPanle.repaint();
就是在选择显示种类的时候,下面的图就没了,一点确定,再出现新图。
没有达到预想的在点确定才重画的效果~~
raysand 2007-06-21
  • 打赏
  • 举报
回复
用setVisible(false)也不行,图也没有消失:(
如果用BufferedImage,在多次选择加载后,也会存在在一个上面摞很多个的情况吧~~
LexChen 2007-06-19
  • 打赏
  • 举报
回复
不过为啥不用 JTabbedPane呢?
raysand 2007-06-18
  • 打赏
  • 举报
回复
那样就在button按下的一瞬间显示,release 按钮显示就消失了。
raysand 2007-06-18
  • 打赏
  • 举报
回复
那样就在button按下的一瞬间显示,release 按钮显示就消失了。
Inhibitory 2007-06-18
  • 打赏
  • 举报
回复
如果有不同的JPanel来显示不同的图形,可以用panel.setVisible(false);让其不可见。其实可以用BufferedImage先把图画好,然后在同一个JPanel上显示出来。
zhuokai 2007-06-18
  • 打赏
  • 举报
回复
先repaint;
if (e.getSource()==buttonSelect)
{
displayPanel.revalidate();
displayPanel.repaint();
.........
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧