十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这种一般通过改对应的UI类来实现,如果不想该UI类(有点复杂),下面的方式也行:
成都创新互联网络公司拥有10余年的成都网站开发建设经验,上1000家客户的共同信赖。提供网站建设、成都网站建设、网站开发、网站定制、外链、建网站、网站搭建、自适应网站建设、网页设计师打造企业风格,提供周到的售前咨询和贴心的售后服务
class MyButton extends JButton{
MyButton(String txt){
super(txt);
this.setOpaque(false); // 设置为透明
}
public void paint(Graphics g) {
g.fillRect(0,0,getWidth(),getHieght()); // 自己绘制背景
super.paint(g);
}
}
mac os 默认的border是aqua border(look and feel设置),这个border是一个灰白色填充外加灰色边界的矩形,在初始化button的时候默认是显示border的,所以你会发现这个aqua border layer把你的button覆盖了。此时button上的图层从底向上分别是backgroundforegroundborder layer.所以你看到的灰白色其实是你的默认border。
设置button颜色的解决有两种,你可以设置background颜色,然后设置button foreground透明,border层不显示。
button.setBackground(Color.RED);//设置background颜色
button.setOpaque(true); //foreground设置透明
button.setBorderPainted(false); //最后显示红色
或者设置foreground颜色,这样会把background盖住,然后设置border层不显示。
button.setBackGround(Color.RED); // 随便设,反正会被盖
button.setForeGround(Color.BLUE); //盖住背景色
button.setBorderPainted(false); //最后显示蓝色
另外,你也可以自己设置一个lineBorder代替mac os默认的aqua border。
originBorder=BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1);//这个是windows的默认border
button.setForeGround(Color.BLUE);
button.setBorder(originBorder);//最后会显示一个蓝色,带浅灰边框的button
这个问题在window是不存在的,因为window的默认border是swing border,是无填充透明边界,不会盖住foreground layer和background layer。所以你在windows情况下只要设置好前景色背景色的覆盖关系就行了(比如设置button透明并设置背景色,或者直接设置前景色)。
覆盖关系,覆盖关系,覆盖关系。重说三。
另外mac第三种解决方式:自己网上关键字查找mac java swing look and feel,下载对应的包加入自己的库,然后在swing的window或者panel主函数第一句先:
try{
UIManager.setLookAndFeel(#这里是对应的look and feel包名字#);
}catch(Exception e){e.printStackTrace()}
不过我不推荐这个做法,因为换地方的时候没有库会异常,然后使用默认的lookandfeel。
找本好点的教材吧……
protected void paintComponent(Graphics g) {
Image im = Toolkit.getDefaultToolkit().getImage(“back.jpg");//背景图,不要放在这里,放在构造函数里
g.drawImage(im, 0, 0, this);
l1 = new MyLabel(new Point(90, 10));//不要放在这里,放在构造函数里
l1.addMouseListener(this);//不要放在这里,放在构造函数里
add(l1);//不要放在这里,放在构造函数里
}
public void mouseEntered(MouseEvent e) {
l1.setbk();//关键!!不是在Point(90,10) 处添加调整Label的background
repaint();//主动调用才会立即重画
}
public void mouseExited(MouseEvent e) {
l1.setBackground(new Color(0,0,0,50));//颜色是不会自己设置回来的
repaint();//主动调用才会立即重画
}
你再自己看看吧……
设置颜色:
把pan - pan6的Background设为Null,这样他们就变为透明的了,以后只需要改变inquestFrame的颜色就可以改变全部的颜色,代码如下:
// 设置整体布局
JPanel pan = new JPanel();
pan.setLayout(new GridLayout(6, 1));
pan.add(pan1);
pan.add(pan2);
pan.add(pan3);
pan.add(pan4);
pan.add(pan5);
pan.add(pan6);
pan.setBackground(null);
pan1.setBackground(null);
pan2.setBackground(null);
pan3.setBackground(null);
pan4.setBackground(null);
pan5.setBackground(null);
pan6.setBackground(null);
r1.setBackground(null);
r2.setBackground(null);
inquestFrame.setBackground(Color.LIGHT_GRAY);
inquestFrame.setContentPane(pan);
inquestFrame.setSize(300, 250);
inquestFrame.setVisible(true);
设置图片需要改的比较多,自己比较那不一样吧:
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class Inquest {
JFrame inquestFrame;
JLabel lab1, lab2, lab3, lab4, lab5, lab6;
JTextField text1, text2, text4, text5, text6;
JRadioButton r1, r2;
JButton inqButton;
public Inquest() {
inquestFrame = new JFrame("教育经历管理系统-查询窗口");
MyPanel pan1 = new MyPanel();
lab1 = new JLabel("请输入编码:");
text1 = new JTextField(10);
inqButton = new JButton(" 查询");
inqButton.addActionListener(new ButtonHandler());
pan1.add(lab1);
pan1.add(text1);
pan1.add(inqButton);
MyPanel pan2 = new MyPanel();
lab2 = new JLabel("姓名:");
text2 = new JTextField(10);
pan2.add(lab2);
pan2.add(text2);
MyPanel pan3 = new MyPanel();
lab3 = new JLabel("性别:");
r1 = new JRadioButton("男");
r2 = new JRadioButton("女");
// 把两个单选按钮放到一个群组中,保持二选一
ButtonGroup group = new ButtonGroup();
group.add(r1);
group.add(r2);
pan3.add(lab3);
pan3.add(r1);
pan3.add(r2);
MyPanel pan4 = new MyPanel();
lab4 = new JLabel("单位:");
text4 = new JTextField(10);
pan4.add(lab4);
pan4.add(text4);
MyPanel pan5 = new MyPanel();
lab5 = new JLabel("职位:");
text5 = new JTextField(10);
pan5.add(lab5);
pan5.add(text5);
MyPanel pan6 = new MyPanel();
lab6 = new JLabel("年龄:");
text6 = new JTextField(10);
pan6.add(lab6);
pan6.add(text6);
// 设置整体布局
MyPanel pan = new MyPanel();
pan.setLayout(new GridLayout(6, 1));
pan.add(pan1);
pan.add(pan2);
pan.add(pan3);
pan.add(pan4);
pan.add(pan5);
pan.add(pan6);
pan.setBackground(null);
pan1.setBackground(null);
pan2.setBackground(null);
pan3.setBackground(null);
pan4.setBackground(null);
pan5.setBackground(null);
pan6.setBackground(null);
r1.setBackground(null);
r2.setBackground(null);
MyPanel pan0 = new MyPanel();
pan0.setPreferredSize(pan.getPreferredSize());
pan0.setLayout(null);
pan.setBounds(0, 0, pan.getPreferredSize().width, pan.getPreferredSize().height);
URL url = Inquest.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel lab = new JLabel(img);
lab.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
pan0.add(pan);
pan0.add(lab);
inquestFrame.setContentPane(pan0);
inquestFrame.pack();
inquestFrame.setVisible(true);
}
public static class MyPanel extends JPanel {
public void paint(Graphics g) {
paintChildren(g);
}
}
public void setBack() {
((JPanel) inquestFrame.getContentPane()).setOpaque(false);
// Winter.jpg这个图片的位置要跟当前这个类是同一个包下
URL url = Inquest.class.getResource("Winter.jpg");
ImageIcon img = new ImageIcon(url);
JLabel background = new JLabel(img);
inquestFrame.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
}
class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
// 生成SQL语句
String s = "select * from information where id=" + "'" + text1.getText() + "'";
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:test";
// DB db = new DB(driver, url, "sa", "");
// ResultSet rs = db.query(s);
// try {
// while (rs.next()) {
// text2.setText(rs.getString(2));
// String sex = rs.getString(3);
// if (sex.trim().equals("男"))
// r1.setSelected(true);
// else
// r2.setSelected(true);
//
// text4.setText(rs.getString(4));
// text5.setText(rs.getString(5));
// text6.setText(rs.getString(6));
// }
// } catch (Exception e2) {
// e2.printStackTrace();
// }
}
}
public static void main(String args[]) {
new Inquest();
}
}
在main.xml里面加入如下代码,就可以Android中按钮如何设置透明或半透明;
Button
android:text="@+id/Button01"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
/
java swing中应该用 setContentAreaFilled(false) 和 setBorderPainted(false),将button的背景设置为透明。
public void setContentAreaFilled(boolean b)
设置 contentAreaFilled 属性。如果该属性为 true,则按钮将绘制内容区域。如果希望有一个透明的按钮,比如只是一个图标的按钮,那么应该将此属性设置为 false。不要调用 setOpaque(false)。contentAreaFilled 属性的默认值为 true。 此方法可能造成组件的不透明属性发生更改