让JPanel不重叠显示问题
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);
}
}
}
...全文
相关推荐
一个小小的Swing拼图游戏
模型负责游戏逻辑,视图负责显示,控制器处理用户输入。最后,对于问题描述中提到的“感觉有一些不对的地方”,可能涉及的问题有很多方面,比如拼图块的位置没有正确更新、游戏状态判断有误、用户交互体验不佳等。
【深度学习|学习笔记】L1正则化在0处不可导是怎么处理的?L1正则化产生稀疏性的原因是什么?以及该如何理解稀疏矩阵?
【深度学习|学习笔记】L1正则化在0处不可导是怎么处理的?L1正则化产生稀疏性的原因是什么?以及该如何理解稀疏矩阵?
java GUI界面设计之窗口和容器
JLayeredPane 是一个特殊的容器,用于处理组件重叠问题。
TestChess.rar
这个算法主要用于解决在棋盘上放置棋子,使得每个格子恰好被一个棋子覆盖,不允许有空缺或重叠的情况。这个问题在实际应用中有着广泛的意义,例如在无线网络覆盖、资源分配等方面都有所体现。
Java版俄罗斯方块
通过分析和理解这个游戏的代码,开发者能够加深对Java语言的理解,提升问题解决和软件工程的实践能力。


Java SE
