java swing 组件 图形-java swing组件上绘制直线同时添加组件后 的显示问题

问题描述

java swing组件上绘制直线同时添加组件后 的显示问题

说明:运行后,面板上自动画出14条直线,点击“添加”按钮,生成可以拖动的JTextField控件。问题(1)面板的背景色不显示,(2)拖动JTextField控件时有残影,(3)改变JFrame大小后,残影消失,但是只能显示JTextField控件的一部分。哪位高手指点下。

 import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import static java.awt.BorderLayout.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.plaf.ButtonUI;
import javax.swing.event.*;
class Win extends JFrame
{
    JButton jb1,jb2,jb3,jb4,jb5;//编辑、添加、修改、删除、调度
    JButton jb6,jb7,jb8,jb9,jb10;//调试用按钮
    JPanel jp_button;//放置按钮的面板
    MyPanel jp_xianlu;//放置线路图的面板

    public static void main(String args[])
   {
            SwingUtilities.invokeLater(new Runnable() {

                  @Override
                  public void run() {
                    Win win=new Win();
                    //win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    win.setLocationRelativeTo(null);
                    win.setVisible(true);
                  }
            });
   }

    Win()
    {
      super("我的面板");
      setExtendedState( Frame.MAXIMIZED_BOTH );
      setLayout(new BorderLayout(30,5));

      jp_button =new JPanel();
      jp_button.setVisible(true);
      jp_button.setOpaque(true);
          jp_button.setBackground(Color.BLUE);
      add(jp_button,SOUTH);

      jp_xianlu =new MyPanel();
      add(jp_xianlu,CENTER);

//添加5个按钮并添加到面板jp_button上
      jb1 = new JButton("编辑");
      jb2 = new JButton("添加");
      jb3 = new JButton("修改");
      jb4 = new JButton("删除");
      jb5 = new JButton("调度");
      jp_button.add(jb1);
      jp_button.add(jb2);
      jp_button.add(jb3);
      jp_button.add(jb4);
      jp_button.add(jb5);

      //Frame上添加windows监听,使之关闭按钮可用
      addWindowListener(new WindowAdapter(){
           public void windowClosing(WindowEvent e){
                System.exit(0);
           }
       });
      //点击“添加”按钮时在jp_xianlu面板上生成JLabel
         jb2.addActionListener(new ActionListener()
         {
              public void actionPerformed(ActionEvent e) {
                                setMyText(200,200);
              }
            });
     }

    //自定的可以生成LTextField的方法
    public void setMyText(int a,int b){

            MyTextField mtf= new MyTextField(); //输入标签显示内容
        mtf.setBounds(a,b,55,20);
        jp_xianlu.add(mtf);
    }
}

//自定义监听器类:转换坐标并实现自由拖动
class MyTextField extends JTextField implements MouseListener,MouseMotionListener {
        /** 坐标点 */
        Point point = new Point(0, 0);
        MyTextField(){
             super("0000000");
             addMouseListener(this);
             addMouseMotionListener(this);
             setOpaque(true); //组件背景透明
                     setBackground(Color.RED);
        }
        /**
         * 当鼠标拖动时触发该事件记录下鼠标按下(开始拖动)的位置(摘自苏小喵)
         */
        public void mouseDragged(MouseEvent e) {
             //转换坐标系统
            Point newPoint = SwingUtilities.convertPoint(this, e.getPoint(), this.getParent());
             //设置标签的新位置
            this.setLocation(this.getX()
                    + (newPoint.x - point.x), this.getY()
                    + (newPoint.y - point.y));
             //更改坐标点
            point = newPoint;
        }
        public void mouseMoved(MouseEvent e){} 

        /**
         * 当鼠标按下时触发该事件。 记录下鼠标按下(开始拖动)的位置。
         */
        public void mouseClicked(MouseEvent e) {}
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}
        public void mousePressed(MouseEvent e) {
             //得到当前坐标点
            point = SwingUtilities.convertPoint(this, e.getPoint(),
                    this.getParent());
        }
        public void mouseReleased(MouseEvent e){}
    } 

//自定义面板,在其上实画线(未实现,不可用)
class MyPanel extends JPanel{
      public MyPanel(){
                setBackground(Color.GREEN);
              setOpaque(true);
                setLayout(null);
                setVisible(true);

        }
        @Override
//画14条直线
      public void paint(Graphics g){
                g.drawLine(10,50,1900,50);
                g.drawLine(10,115,1900,115);
                g.drawLine(10,180,1900,180);
                g.drawLine(10,245,1900,245);
                g.drawLine(10,310,1900,310);
                g.drawLine(10,375,1900,375);
                g.drawLine(10,440,1900,440);
                g.drawLine(10,505,1900,505);
                g.drawLine(10,570,1900,570);
                g.drawLine(10,635,1900,635);
                g.drawLine(10,700,1900,700);
                g.drawLine(10,765,1900,765);
                g.drawLine(10,830,1900,830);
                g.drawLine(10,895,1900,895);
                    }
    }

时间: 2024-11-18 21:10:16

java swing 组件 图形-java swing组件上绘制直线同时添加组件后 的显示问题的相关文章

分享java打印简单图形的实现代码_java

我们平时都是使用的画图工具进行简单图形的绘制,今天我们使用java打印一些简单的图形 实现代码如下 package test; /** * * @author hanzel * @打印图形 * */ public class Array { public static void main(String[] args) { //打印长方形 int[] a = new int[10]; for(int i=0 ;i<a.length;i++){ for(int j=0;j<a.length;j++

用java的swing做图形界面开发

问题描述 我发现网上与这个有关的东西都很少啊,这个是不是很冷门啊?做这个是不是没什么前途?我是在校的大学生,对java比较感兴趣,但是学完简单的语法后都不知道该做什么好,请各位前辈指一下路哈,谢谢. 解决方案 不是.主要是J2SE这方面做得人很少了.现在Java主要都是JavaWEB.做J2SE的都跑Android去了.做J2SE的看不起J2EE的.大都这样呵呵~~~Java Swing主要是效率比较低,所以用得人很少做图形界面的话C++和C比起Java来有着绝对的优势,而且Java Swing

Java组件commons fileupload实现文件上传功能_java

Apache提供的commons-fileupload jar包实现文件上传确实很简单,最近要用Servlet/JSP做一个图片上传功能,在网上找了很多资料,大多是基于struts框架介绍的,还有些虽然也介绍common-fileupload的上传,但是那些例子比较老,有些类现在都废弃了. 通过研究学习总结,终于完成了这个上传功能,下面与大家分享一下. 案例场景 一个图书馆后台管理界面,需要提供上传图书图片的功能并且最终显示在页面中. 实现效果 进入添加书籍页面,默认显示一个图片"暂无突破&qu

Java手机软件图形界面API之低级GUI组件

在高级API编程时,你不能控制显示在屏幕上的内容,甚至用编程方式几乎无法控制这些组件.由系统实现体负责选取设备的最佳显示方式.然而,一些如游戏类的应用程序可能需要对屏幕绘制有更多的控制.MIDP javax.microedition.lcdui包也提供了处理这类编程的低级API. 为了在屏幕直接绘制直线,文本和形状,你必须使用Canvas类.该类提供了一个MIDlet可以在其上绘制的空白屏幕.例如,在屏幕上绘制字符串"HelloWorld".实现这个功能有一个简单的办法:子类化Canv

Java中透明和不规则Swing窗口

支持透明和不规则窗口已经成为 AWT 和 Swing 团队长久以来梦寐以求的功能.尽管本机应用程序在主要操作系统上使用这项功能已经为时 已久,但在核心 Java 中还不能使用它.即将发布的 "Consumer JRE"正在进行修改,也就是对 Java SE 6 进行重大更新.Java SE 6 将为 创建不规则.全透明和每个像素透明的顶级窗口提供 API. 历史 本机应用程序的开发人员通常在开发 UI 应用程序中享受了更高级的灵活性.但是为此而付出的代价是将应用程序限制在某一特定平台上

深入浅出Java多线程(2)-Swing中的EDT(事件分发线程)

本文主要解决的问题是: 如何使其Swing程序只能运行一个实例? 抛开Swing,我们的程序是通过java 命令行启动一个进程来执行的,该问题 也就是说要保证这个进程的唯一性,当然如果能够访问系统的接口,得到进程的 信息来判断是否已有进程正在运行,不就解决了吗?但是如何访问系统的接口呢 ?如何要保证在不同的平台上都是OK的呢?我的思路是用文件锁,当然我相信肯 定有更好的方法,呵呵,希望读者能够指出. 文件锁是JDK1.4 NIO提出的,可以在读取一个文件时,获得文件锁,这个锁 应该是系统维护的,

java中如何在表格中添加组件

问题描述 java中如何在表格中添加组件 getColumnModel().getColumn(1).setCellRenderer() 各位,能告诉我怎样在表格中添加组件,如何是按钮,能点击那种 解决方案 参考:http://blog.sina.com.cn/s/blog_4af14e710102v07y.htmlhttp://blog.163.com/chunlei_cl/blog/static/81843020098300039472/http://download.csdn.net/do

报告显示:组件是Java应用易受黑客攻击的关键

Java 开发者想要尽可能避免安全漏洞,应该更加了解他们在应用程序中使用的开源组件.Veracode 公司近日发布了一份新的报告,数据显示 88% 的 Java 应用包含一个以上的易受攻击的组件,还有约 53.3%的 Java 应用依赖于易受攻击的 Commons Collections 组件版本. Veracode 的 CTO Chris Wysopal 表示:"组件的普遍使用,意味着当某个组件中的漏洞被披露时,可能会影响数以千计的应用". 据该公司称,应用变得脆弱的主要原因是开发者

用java2word报错:java.lang.Exception: 初始化类库出错,请检查是否注册了组件 Word.Application

问题描述 小弟要做一个java操作word的应用,在网上找了很多之后决定使用java2word.可是程序报如下错误:java.lang.Exception:初始化类库出错,请检查是否注册了组件Word.Application.注册命令为'regsvr32文件名'.望高手指点一二.小弟感激不尽. 解决方案 解决方案二:java软件安装的不正确啊,重新装个试试!!解决方案三:那个JAVA软件啊?你指的是java2word还是myeclipse还是jdk?解决方案四:怎么没人答啊?这帖子不能沉啊!!!