「java组件的重叠透明」javagui组件
今天给各位分享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组件的重叠透明的信息别忘了在本站进行查找喔。