Java Swing创建不规则窗体时无法显示的问题

Surrin1999 2019-05-09 10:10:55
为了用Java的Swing做不规则窗体,我找到了https://blog.csdn.net/qq_32079585/article/details/80601126 这个资料
然后在自己电脑上运行时,图片无法正常显示出来,先贴代码


import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import com.sun.awt.AWTUtilities;

public class ImageOpacity extends JFrame {
int fw = 500;
int fh = 500;
ImageIcon icon = new ImageIcon("about1.png");
JLabel backLabel = new JLabel() {

@Override
public void paint(Graphics g) {
super.paint(g);
icon.paintIcon(this, g, 0, 0);
}
};
public ImageOpacity() {

this.add(backLabel);
setUndecorated(true); // 不装饰

setSize(icon.getIconWidth(), icon.getIconHeight()); // 设置窗口大小
// AWTUtilities.setWindowOpaque(this, false); //
setLocationRelativeTo(null); // 设置窗口居中
validate();
setVisible(true);
}

public static void main(String[] args) {
ImageOpacity frame = new ImageOpacity();
frame.setSize(500, 500);
frame.setVisible(true);
}
}


把关键代码 AWTUtilities.setWindowOpaque(this, false); 注释掉后
发现


图片无法显示 然后松开关键代码注释



神奇的事情发生了。。啥都没有。。但看任务栏可以发现是有窗体存在的,右边那个蓝色的圆形是代码里的 图片1.png

有人可以帮忙解决下吗 我尝试过在另一份代码上运行 可以显现出来,但是因为那份代码使用到了布局,而我需要在不规则窗体上添加一些组件,不太会实现。。试过add。。没什么用。。 以下是那份能运行出来不规则窗体的代码


import com.sun.awt.AWTUtilities;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;

@SuppressWarnings("restriction")
public class MainFrame extends JFrame {
JTextArea text = new JTextArea();
private static final long serialVersionUID = 1L;

private MouseAdapter moveWindowListener = new MouseAdapter() {
private Point lastPoint;

public void mousePressed(MouseEvent e) {
this.lastPoint = e.getLocationOnScreen();
}

public void mouseDragged(MouseEvent e) {
Point point = e.getLocationOnScreen();
int offsetX = point.x - this.lastPoint.x;
int offsetY = point.y - this.lastPoint.y;
Rectangle bounds = MainFrame.this.getBounds();
bounds.x += offsetX;
bounds.y += offsetY;
MainFrame.this.setBounds(bounds);
this.lastPoint = point;
}
};

BufferedImage img = null;
private JLabel jLabel1;

public MainFrame() {
initComponents();
addMouseMotionListener(this.moveWindowListener);
addMouseListener(this.moveWindowListener);
}

private void initComponents() {
this.jLabel1 = new JLabel();

setDefaultCloseOperation(3);
setUndecorated(true);
this.jLabel1.setIcon(new ImageIcon(super.getClass().getResource("about1.png")));

GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(this.jLabel1, -1, -1, 32767));

layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(this.jLabel1, GroupLayout.Alignment.TRAILING,
-2, 576, 32767));

pack();
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MainFrame mf = new MainFrame();
AWTUtilities.setWindowOpaque(mf, false);
mf.setVisible(true);
}
});
}
}


这份就可以运行。。

如果第一套代码不能解决,但第二套有大神会在上面添加组件 如JTextField JTextArea之类的 能写个demo也ok 谢谢各位
...全文
2 点赞 收藏 1
写回复
1 条回复
Surrin1999 2019年05月09日
课程设计赶时间 求大神们快来帮帮忙
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告