java中setOpaque什么功能_java-在半透明的JFrame上删除没有setOpaque()的...

这就是我可能会采取的这种想法…

public class OverlayTextArea {

public static void main(String[] args) {

new OverlayTextArea();

}

public OverlayTextArea() {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception ex) {

}

JFrame frame = new JFrame("Testing");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setContentPane(new ImagePane());

frame.setLayout(new BorderLayout());

frame.add(new TransparentTextArea());

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

public class TransparentTextArea extends JTextArea {

public TransparentTextArea() {

setOpaque(false);

setBorder(new CompoundBorder(new EmptyBorder(10, 10, 10, 10), new LineBorder(Color.LIGHT_GRAY)));

}

@Override

protected void paintComponent(Graphics g) {

g.setColor(new Color(255, 255, 255, 128));

Insets insets = getInsets();

int x = insets.left;

int y = insets.top;

int width = getWidth() - (insets.left + insets.right);

int height = getHeight() - (insets.top + insets.bottom);

g.fillRect(x, y, width, height);

super.paintComponent(g);

}

}

public class ImagePane extends JPanel {

private BufferedImage background;

public ImagePane() {

try {

background = ImageIO.read(new File("/path/to/background.img"));

} catch (IOException ex) {

ex.printStackTrace();

}

}

@Override

public Dimension getPreferredSize() {

return background == null ? super.getPreferredSize() : new Dimension(background.getWidth(), background.getHeight());

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

if (background != null) {

int x = (getWidth() - background.getWidth()) / 2;

int y = (getHeight() - background.getHeight()) / 2;

g.drawImage(background, x, y, this);

}

}

}

}

反馈

>您确实应该调用super.paintComponent,否则将导致严重的麻烦,尤其是在处理透明组件时.

>不要在paintXxx方法内执行任何长时间运行的任务,例如加载图像.这些方法旨在快速返回,并且可以连续多次调用…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值