「java组件的重叠透明」javagui组件

博主:adminadmin 2023-03-19 16:14:08 393

今天给各位分享java组件的重叠透明的知识,其中也会对javagui组件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA面板可以重叠在一起吗?如图所示...

这个问题倒还有趣,试了一下。

一.如果两个Panel是完全重叠,可以尝试使用布局:CardLayout。如下:

import java.awt.*;

import java.awt.event.*;

public class TestLayout{

Frame f;

Panel p,p1,p2;

Button btn;

CardLayout cal;

public TestLayout(){

f=new Frame();

p=new Panel();

p1=new Panel();

p1.setBackground(Color.red);

p2=new Panel();

p2.setBackground(Color.green);

btn=new Button("切换");

cal=new CardLayout();

f.setLayout(new BorderLayout());

f.add(btn,BorderLayout.SOUTH);

f.add(p);

p.setLayout(cal);

p.add(p1);

p.add(p2);

f.setSize(300,300);

f.setVisible(true);

//响应关闭

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

//用于在p1和p2之间切换

btn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

cal.previous(p);//或者cal.next(p);可实现在p1,p2之间切换

}

});

}

public static void main(String args[]){

new TestLayout();

}

}

二.部分重叠的情况。用swing的组件来测试,先运行以下程序后,再将程序中://p1.setOpaque(false);这句取消注释后运行。两相对照可得部分重叠的结论。如下:

//TestLayout.java

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TestLayout{

JFrame f;

Container con;

JPanel p1,p2;

public TestLayout(){

f=new JFrame();

con=f.getContentPane();

p1=new JPanel();

p2=new JPanel();

f.setSize(300,300);

f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

con.setLayout(null);//为实现自定义组件的位置和大小,需设置内容面版的布局为空

p1.setBackground(Color.red);

//p1.setOpaque(false);//设置p1为透明的

p1.setBounds(0,0,300,200);//setBounds(int x,int y,int width,int height)方法中四个参数分别为组件的x,y坐标以及宽width和高height

con.add(p1);

p2.setBackground(Color.green);

p2.setBounds(0,100,300,200);

con.add(p2);

}

public static void main(String args[]){

new TestLayout();

}

}

java,的组件如何将java的组件的背景设置透明?

java swing中将组件的背景设置成透明的示例如下:

import org.eclipse.swt.*;

import org.eclipse.swt.graphics.*;

import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.events.*;

public class Talpha {

        /**

         * @param args

         */

        public static void main(String[] args) {

                // TODO Auto-generated method stub

                final Display display = new Display();

                final Shell shell = new Shell(display);

                shell.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

                Canvas canvas = new Canvas(shell, SWT.NO_BACKGROUND);

                //使用paintlistener,保证每次均重新绘制。

                canvas.addPaintListener(new PaintListener() {

                        public void paintControl(PaintEvent e) {

                                GC gc = e.gc;

                        //读图像

                        ImageData imageData = new ImageData("1.jpg");

                                 //这里是建立从左到右的渐进Alpha。

                   byte[] alphaValues = new byte[imageData.height * imageData.width];

                                for (int j = 0; j  imageData.height; j++) {

                                        for (int i = 0; i  imageData.width; i++) {

                              alphaValues[j * imageData.width + i] = (byte) (255 - 255

                                                                * i / imageData.width);

                                        }

                                }

                                imageData.alphaData = alphaValues;

                                Image image = new Image(display, imageData);

                         //绘制                               

                        gc.drawImage(image,0,0);//关键点是这里设置背景颜色

                        }

                });

                FillLayout fillLayout = new FillLayout();

                fillLayout.type = SWT.VERTICAL;

                shell.setLayout(fillLayout);

                shell.setSize(200, 600);

                shell.open();

                while (!shell.isDisposed()) {

                        if (!display.readAndDispatch())

                                display.sleep();

                }

                display.dispose();

        }

}

java组件重叠问题

有重叠没关系,在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序)。

真正麻烦的是响应哪个组件,这就要创建一个链表,把组件对象按顺序存起来,响应事件时扫描这个链表,按链表中的先后顺序选择响应组件对象。

java JPanel重叠覆盖问题。

首先遗憾的告诉你,add方法添加以后,本来就是覆盖式的,不存在透明化的问题,因为父panel会挨次调用子类的panel的paint方法,将其绘制在自己表面。也就是说,你想通过add,然后设置子面板透明的方法本身是行不通的。

但这并不意味着就没有办法了,很简单,你自己管理绘制就可以了。方法有两种:

1、自己修改一个panel类,继承自JPanel,这个类在paint方法中,先绘制本身的图像,然后才绘制子类的图像,并且会根据子类的图像区域进行透明处理。

2、在一个类中,自己通过内部数据处理,把两个panel的数据进行排比,然后统一画在panel中。

PS:通常用的都是第二种办法。第一种办法实现起来,即不灵活,也不如第二种方法直观快速。

java组件的重叠透明的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javagui组件、java组件的重叠透明的信息别忘了在本站进行查找喔。