lzp1886
2010-06-04 12:13
浏览 748
已采纳

java Swt 中如何设置Text框和Button按钮透明

有那位懂得的?
问题补充
我想要的是java SWT 画的面板中Text和Button 透明
不是要Awt Swing 的

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • weixin_42365828 2010-06-04 12:13
    已采纳

    Text:
    父容器setBackgroundMode(SWT.INHERIT_FORCE);

    Button:
    1.构造一个空Image
    2.利用org.eclipse.swt.widgets.Control.print(org.eclipse.swt.graphics.GC)将父容器上的内容绘制上去.
    3.计算自己在父容器的区域,将Image那个区域的Image调用org.eclipse.swt.graphics.GC.drawImage(org.eclipse.swt.graphics.Image, int, int, int, int, int, int, int, int)绘制上去.
    4.如果想实现蒙板效果,在3后再设置gc.setAlpha(200);gc.fillRectangle(0,0,w,h);即可.

    已采纳该答案
    打赏 评论
  • yangqingklw 2010-06-04 12:13

    package com.test;

    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.BorderFactory;
    import javax.swing.border.TitledBorder;
    import java.awt.Color;
    import java.awt.Font;
    import javax.swing.JButton;
    import java.awt.Rectangle;

    public class Test2 extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton jButton = null;
    
    /**
     * This is the default constructor
     */
    public Test2() {
        super();
        initialize();
    }
    
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }
    
    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.setBackground(new Color(102, 255, 102));
            jContentPane.add(getJButton(), null);
        }
        return jContentPane;
    }
    
    /**
     * This method initializes jButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(98, 29, 124, 35));
            jButton.setText("aaaaaa");
            jButton.setBackground(new Color(102, 0, 204));
            jButton.setFont(new Font("Dialog", Font.BOLD, 24));
            // jButton.setForeground(new Color(255, 51, 0));
            jButton.setOpaque(false);
            jButton.setBorder(BorderFactory.createEmptyBorder());
        }
        return jButton;
    }
    

    }

    你运行这个看看怎么样?

    打赏 评论
  • yangqingklw 2010-06-04 12:13

    这个是用图片的
    package sample;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Rectangle;

    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class Frame extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton jButton = null;
    private JPanel jPanel = null;
    
    /**
     * This is the default constructor
     */
    public Frame() {
        super();
        initialize();
    }
    
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(513, 309);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }
    
    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
    
            jContentPane.add(getJPanel(), null);
        }
        return jContentPane;
    }
    
    /**
     * This method initializes jButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(34, 27, 150, 44));
            jButton.setText("愛我老婆");
            jButton.setBorder(null);
                            //下面这句设置背景颜色必须要否则无法实现背景透明
            jButton.setBackground(Color.BLACK);
            jButton.setOpaque(false);
            jButton.setForeground(Color.red);
            jButton.setFont(new Font("",Font.BOLD,24));
        }
        return jButton;
    }
    
    class getpane extends JPanel {
        private static final long serialVersionUID = 1L;
        int width = 0, hight = 0;
        String imgpath = "";
    
        public getpane(int width, int hight, String imgpath) {
            this.width = width;
            this.hight = hight;
            this.imgpath = imgpath;
            this.setOpaque(true);
        }
    
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            ImageIcon icon = new ImageIcon(imgpath);
            Image img = icon.getImage();
            g.drawImage(img, 0, 0, width, hight, this);
        }
    }
    
    /**
     * This method initializes jPanel
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJPanel() {
        if (jPanel == null) {
        String imgpath = "src/game/image/good02.jpg";
        jPanel = new getpane(this.getWidth(), this.getHeight(), imgpath);
            // jPanel = new JPanel();
        jPanel.setLayout(null);
        jPanel.setBounds(new Rectangle(13, 8, 472, 251));
        jPanel.add(getJButton(), null);
        }
        return jPanel;
    }
    

    }

    打赏 评论
  • iteye_18449 2010-06-04 12:13

    [quote="yqklw521"]package com.test;

    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.BorderFactory;
    import javax.swing.border.TitledBorder;
    import java.awt.Color;
    import java.awt.Font;
    import javax.swing.JButton;
    import java.awt.Rectangle;

    public class Test2 extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton jButton = null;
    
    /**
     * This is the default constructor
     */
    public Test2() {
        super();
        initialize();
    }
    
    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(300, 200);
        this.setContentPane(getJContentPane());
        this.setTitle("JFrame");
    }
    
    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.setBackground(new Color(102, 255, 102));
            jContentPane.add(getJButton(), null);
        }
        return jContentPane;
    }
    
    /**
     * This method initializes jButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(98, 29, 124, 35));
            jButton.setText("aaaaaa");
            jButton.setBackground(new Color(102, 0, 204));
            jButton.setFont(new Font("Dialog", Font.BOLD, 24));
            // jButton.setForeground(new Color(255, 51, 0));
            jButton.setOpaque(false);
            jButton.setBorder(BorderFactory.createEmptyBorder());
        }
        return jButton;
    }
    

    }

    你运行这个看看怎么样?[/quote]

    连题目都不看清。

    打赏 评论
  • yangqingklw 2010-06-04 12:13

    你傻啦,你把那控件改成awt的控件不就是一樣的嗎?好心沒好報,笨到家了。

    打赏 评论
  • wing5jfacegmail 2010-06-04 12:13

    单控件透明,还是控件的parent设置为透明?
    单控件透明的话需要自行定制

    打赏 评论
  • weixin_42365828 2010-06-05 00:36

    不是不想给demo,这个东西要完善的实现确实很复杂,而且低效.我建议你可以用Label代替button,通过设置父容器setBackgroundMode(SWT.INHERIT_DEFAULT);就可透明显示label.然后你给label增加一个PaintListern,自己使用GC绘制一个正方框表示button的轮廓.或者你做一个只有边框,中间透明的png图片.设置给Label,也可以.

    打赏 评论

相关推荐 更多相似问题