gui-如何在JFrame中通过按钮事件载入不同面板?

问题描述

如何在JFrame中通过按钮事件载入不同面板?

我写了一个程序,想实现按oval按钮时,绘制圆形,按rectangle时,绘制矩形。
所以我写了两个JPanel的子类oval类和rectangle类。然后在JFrame中 想通过点击
不同按钮实现不同jpanel类的调用,该如何实现?
jframe子类
public class DrawShapeByMouse extends JFrame {
//add two buttons
private JButton button1 = new JButton("Oval");
private JButton button2 = new JButton("Rectangle");
private JPanel ShapeJpanel = new DrawOval();

//Constructors
public DrawShapeByMouse() {
    this.add(ShapeJpanel,BorderLayout.CENTER);
    add(button1,BorderLayout.SOUTH);
    add(button2,BorderLayout.NORTH);

    //给按键注册监听器
    button1.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            ShapeJpanel = new DrawOval();
        }
    });

    button2.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            ShapeJpanel = new DrawRectangle();
            System.out.println("你好世界!");
        }
    });
}

public static void main(String[] args) {
    DrawShapeByMouse frame = new DrawShapeByMouse();
    frame.setTitle("DrawOvalByMouse");
    frame.setSize(400,400);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

}

oval类
class DrawOval extends JPanel {

private final Color[] color = {Color.red,Color.YELLOW,Color.GREEN,Color.ORANGE};   //填充颜色

private int xCoord = 0;//
private int yCoord = 0;//圆心坐标
private final int radius = 30; //半径
private int num = 0;  //用来控制颜色

//Constructors
public DrawOval() {

    //鼠标点击事件注册监听器并且实现接口
    this.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
            xCoord = e.getX();
            yCoord = e.getY();
            num = (int)(Math.random()*color.length);
            repaint();
        }
    });
    this.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent e) {
            xCoord = e.getX();
            yCoord = e.getY();
            repaint();
        }
    });
}

//绘制面板
protected void paintComponent(Graphics g) {
    //super.paintComponent(g);

    g.setColor(color[num]);
    g.fillOval(xCoord-radius, yCoord-radius,radius,radius);
}

}
rectangle同oval类;

解决方案

用repaint行不

时间: 2024-10-22 03:27:17

gui-如何在JFrame中通过按钮事件载入不同面板?的相关文章

异常处理:android中添加按钮事件,出现NullPointerException

问题描述 异常处理:android中添加按钮事件,出现NullPointerException 解决方案 在maincsactivity的oncreate的72行找,有没有对象为null 解决方案二: 对象为空,要么你的按钮对象还没初始化,要么点击代码里有空对象,你调试一下便知 解决方案三: 空指针异常,没什么难找的,Debug一下即可很快找到: 解决方案四: 空指针异常,按钮对象没有初始化 解决方案五: 可能你声明了一个View,但是你没有findViewById,或者findViewById

android中添加按钮事件的方法

  解决方法: 1. 在res/layout中的activity_main.xml添加一个按钮,命名为button1. 2. 在MainActivity.java中添加按钮事件绑定: View btn1 = this.findViewById(R.id.button1); btn1.setOnClickListener(new ButtonClickListener()); 3. 重写ButtonClickListener函数: private class ButtonClickListener

获取VB里 webbrowser 中的按钮事件

引用Microsoft  HTML  Object  Library  Private WithEvents m_oDoc As HTMLDocument Dim oEvent As CEventObj Private Sub Command1_Click() End Sub Private Sub Form_Load() WebBrowser1.Navigate "http://localhost:82/index.asp" End Sub Private Function m_oD

在Datagridview中定义rowheadermouseclick事件

问题描述 如何在Datagridview中定义rowheadermouseclick事件要具体做法和具体代码....跪求 解决方案 解决方案二:不是可以直接在属性里面选择该事件么?你要实现什么功能解决方案三:选择后编辑没有实现鼠标点击Datagridview中的内容可以在textbox中显示出来解决方案四:privatevoiddataGridView3_RowHeaderMouseClick(objectsender,DataGridViewCellMouseEventArgse){textB

如何实现把student.txt中的内容显示在JTextArea 中 并且实现按钮事件

问题描述 请把以下代码student加到gui代码中:packagejavaapplication1;publicclassdemoextendsjavax.swing.JFrame{publicdemo(){initComponents();}@SuppressWarnings("unchecked")privatevoidinitComponents(){jScrollPane1=newjavax.swing.JScrollPane();jTextArea1=newjavax.sw

当我把另外一个界面的启动放在一个按钮监听器中,,当触发事件是,面板的组件,,背景都不显现

问题描述 当我把另外一个界面的启动放在一个按钮监听器中,,当触发事件是,面板的组件,,背景都不显现这是什么,,有什么解决方法吗,,, 解决方案 解决方案二:setVisible(true)是否是放在最后调用的?组件添加了没?解决方案三:我是先编好一个界面类继承JFrame,后在别的类中的构造方法中,先初始化,然后设不可见,当事件实现时,在设它为可见的,组件应该是添加了(如果我在初始化时设它可见的,那所有的东西都会出现,放在按钮的就会出现我说的情况)解决方案四:贴代码解决方案五:代码很长,,有很多

如何在vs中,做一个对话框,通过按钮调用或关闭“P2P远程协助文件传输SDK.exe”。

问题描述 如何在vs中,做一个对话框,通过按钮调用或关闭"P2P远程协助文件传输SDK.exe". 如何在vs中,做一个对话框,通过按钮调用或关闭"P2P远程协助文件传输SDK.exe". 解决方案 按钮响应事件函数中,CreateProcess,TerminateProcess来分别调用,关闭"P2P远程协助文件传输SDK.exe". 解决方案二: 你好大神.求具体的实现代码啊

asp.net中ajax技术是否可以实现停止服务器端正在运行的按钮事件

问题描述 asp.net中ajax技术是否可以实现停止服务器端正在运行的按钮事件 给予B/S的webform项目 在服务器端有一个按钮事件 执行时间较长 所以就添加了一个按钮用来可以随时停止正在运行的耗时较长的按钮 问题是那个正在服务器端运行的按钮是否可以被其他按钮终止呢?求解答 解决方案 不可以.首先将长时间操作的任务放在按钮事件中就是错误的.按钮事件在页面回传前调用,ajax回发根本在页面加载后.你应该用消息队列.后台服务去执行长时间的任务. 解决方案二: 这个理论上是可以实现的. 服务器端

Android Listview中Button按钮点击事件冲突解决办法

  今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录下,以便日后参考.      首先,其实Listview中Button按钮点击事件冲突这种问题压根就不是太大的问题,因为我们完全可以将一个TextView的Backgroud设置成一个selector,也可以将一个TextView设计成一个按钮的样子,这样就可以绕过ListView和Button