public static void main(String[] args) throws Exception { final JFrame jf = new JFrame();
final JButton jb3 = new JButton("dd3"); final JPanel jj=new JPanel();
final JPanel j=new JPanel(){
public void paint(Graphics g) {
try {
Graphics2D gd = (Graphics2D) g;
Line2D l=new Line2D.Float(-0.5f,-0.5f,80.0f,30.0f);
gd.draw(l);
} catch (Exception ex) {
}
}
}; Image iiii = javax.imageio.ImageIO.read(new File("jt.gif"));
final NewJPanel jdf=new NewJPanel(iiii);
j.setBackground(Color.RED); final javax.swing.JButton jButton1 = new javax.swing.JButton("不正常添加"); jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jf.invalidate();
jj.add(jb3, BorderLayout.CENTER);
//jf.add(jb3, BorderLayout.WEST);
jf.validate();
System.out.println("sdfsd");
}
}); final JButton jb2 = new JButton("添加正常");
jb2.setIcon(new javax.swing.ImageIcon("t.png"));
jb2.setOpaque(false);
jb2.setBorder(null);
jb2.setBorderPainted(false);
jb2.setFocusPainted(false);
jb2.setContentAreaFilled(false);
jb2.setRolloverIcon(new javax.swing.ImageIcon("m.png")); jb2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jf.invalidate();
jf.add(jb3, BorderLayout.EAST);
jf.validate();
System.out.println("sdfsd");
} }); jf.add(jButton1, BorderLayout.NORTH);
jf.add(jb2, BorderLayout.SOUTH);
jj.setOpaque(false);
jj.setBorder(null);
//jj.setBorderPainted(false);
//jj.setFocusPainted(false);
//jj.setContentAreaFilled(false);
j.add(jj);
jf.add(j,BorderLayout.CENTER);
jf.setVisible(true);
jf.setSize(800, 600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
final JButton jb3 = new JButton("dd3"); final JPanel jj=new JPanel();
final JPanel j=new JPanel(){
public void paint(Graphics g) {
try {
Graphics2D gd = (Graphics2D) g;
Line2D l=new Line2D.Float(-0.5f,-0.5f,80.0f,30.0f);
gd.draw(l);
} catch (Exception ex) {
}
}
}; Image iiii = javax.imageio.ImageIO.read(new File("jt.gif"));
final NewJPanel jdf=new NewJPanel(iiii);
j.setBackground(Color.RED); final javax.swing.JButton jButton1 = new javax.swing.JButton("不正常添加"); jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jf.invalidate();
jj.add(jb3, BorderLayout.CENTER);
//jf.add(jb3, BorderLayout.WEST);
jf.validate();
System.out.println("sdfsd");
}
}); final JButton jb2 = new JButton("添加正常");
jb2.setIcon(new javax.swing.ImageIcon("t.png"));
jb2.setOpaque(false);
jb2.setBorder(null);
jb2.setBorderPainted(false);
jb2.setFocusPainted(false);
jb2.setContentAreaFilled(false);
jb2.setRolloverIcon(new javax.swing.ImageIcon("m.png")); jb2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jf.invalidate();
jf.add(jb3, BorderLayout.EAST);
jf.validate();
System.out.println("sdfsd");
} }); jf.add(jButton1, BorderLayout.NORTH);
jf.add(jb2, BorderLayout.SOUTH);
jj.setOpaque(false);
jj.setBorder(null);
//jj.setBorderPainted(false);
//jj.setFocusPainted(false);
//jj.setContentAreaFilled(false);
j.add(jj);
jf.add(j,BorderLayout.CENTER);
jf.setVisible(true);
jf.setSize(800, 600);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
这个按钮如果设置了imageIcon,并且设置背景透明的时候,按钮怎么也显示不出来。
这个按钮如果设置了imageIcon,并且设置背景透明的时候,按钮怎么也显示不出来。这段话能看明白么?
而Swing的绘制也因此分为 异步重绘请求 和 同步绘制请求
异步绘制请求
1、 Component.repaint();
2、 Component.repaint(int x ,int y ,int width ,int height);
同步绘制请求
1、JComponent.paintImmediately(int x ,int y ,int w ,int h);
2、Component.paint(Graphics);
有时用repaint()无法更新界面时,就是由于异步绘制请求不能马上被执行
所以这时就可以考虑使用同步绘制请求