Có cách nào tùy chỉnh JButton trong suốt kô ?

chuotfx

Member
4/4/10
365
25
18
Mình có 1 bức ảnh định dạng png với 1 số bít map ảnh là trong suốt ,mà mình tạo icon cho cho JButton thì khi sét cho Background nó null hi vọng nó trong suốt nhưng kô được j cã


Bạn nào có thể chỉ cho mình cách là trong suốt 1 button,vì làm 1 số ứng dụng mà màu mấy nút nhấn cũng đẹp đẹp 1 tí mới zui,hi
 

MeoCon

New Member
13/8/10
95
0
0
Ðề: Có cách nào tùy chỉnh JButton trong suốt kô ?

Code:
<synth>
  <style id="buttonStyle">
    <opaque value="true"/>
    <property key="Button.textShiftOffset" type="integer" value="1"/>
    <insets top="15" left="20" right="20" bottom="15"/>
    <state> // normal state , bạn thay path thành ảnh trong suốt
      <imagePainter method="buttonBackground" path="buttonControl.png"
                    sourceInsets="10 10 10 10"/>
    </state>

    <state value="PRESSED"> // khi button được nhấn , bạn thay path thành 1 ảnh khác
      <imagePainter method="buttonBackground" path="buttonControlClick.png"
                    sourceInsets="10 10 10 10"/>
    </state>


  </style>
  
  <bind style="buttonStyle" type="region" key="button"/> 

</synth>
Sau đó bạn lưu file này lại , sau đó trong frame muốn liên kết với file này , bạn phải có đoạn code sau :

Code:
SynthLookAndFeel lookAndFeel = new SynthLookAndFeel();
       
 
            try {
              lookAndFeel.load(SynthApplication.class.getResourceAsStream(synthFile),
                          SynthApplication.class);
                UIManager.setLookAndFeel(lookAndFeel);
            }
với synthFile là đường dẫn tương đối đến file XML mà bạn đã lưu đó
và SynthApplication là tên lớp mà bạn liên kết với file

Hãy nhớ là đường dẫn tương đối của lớp với file XML chứ k phải đường dẫn tương đối của file . Tức là , fileXML phải nhìn thấy được file ảnh , tức là bạn đứng trong ngữ cảnh của file XML tìm file ảnh chứ k phải là project tìm file ảnh ^^

Khi sử dụng SynthLookAndFeel thì nếu bạn k set đồ họa cho các component khác thì các component khác sẽ sử dụng chế độ đồ họa của SynthLookAndFeel , chứ k phải dùng Metal (default) , hay WIndow , ...

Do đó , bạn cần phải đọc thêm phần Default Values của SynthLookAndFeel và các cách vẽ Location của các component . Search GG : SynthLookAndFeel Default Values ^^

Thân
Chúc bạn học tốt !
 

chuotfx

Member
4/4/10
365
25
18
Ðề: Có cách nào tùy chỉnh JButton trong suốt kô ?

hoàn toàn kô biết 1 xí mô lun,điếc đầu,thui để làm xong cái bài tập này đã rồi tiếp tục làm trong suốt,thật là vãi hàng.cứ tưỡng đơn giản à
Dù sao cũng cám ơn vì đã chia sẽ

À,cái file đó là file xml hay html, file synthFile đó à
 

JackV

Administrator
Staff member
Ðề: Có cách nào tùy chỉnh JButton trong suốt kô ?

Uh đơn giản mà,
setBorderPainted (false);
setContentAreaFilled (false);
setFocusPainted (false); // nếu áp luôn cái này thì chẳng khác nào dùng JLabel rồi setIcon ở các trạng thái tương ứng vì nút sẽ không hiện thị trạng thái là đang được chọn hay không.
 

chuotfx

Member
4/4/10
365
25
18
Ðề: Có cách nào tùy chỉnh JButton trong suốt kô ?

thế mình có thắc mắc là sự kiện dùng mouse di chuyển lên 1 button là tên là gì ?

vì mình định sẽ dùng sự kiến đó sét lại ảnh cho button,cách này làm cho đơn giản
 

JackV

Administrator
Staff member
Ðề: Có cách nào tùy chỉnh JButton trong suốt kô ?

Sự kiện mouse over làm thay đổi properties của button thì nó tự bắt rồi, mình set icon đúng cho từng trường hợp là được
PHP:
jButton1.setBorderPainted(false);
jButton1.setContentAreaFilled(false);
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon.gif")));
jButton1.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon_disable.gif")));
jButton1.setDisabledSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon_disable_selected.gif")));
jButton1.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon_pressed.gif")));
jButton1.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon_rollover.gif")));
jButton1.setRolloverSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon_rollover_selected.gif")));
jButton1.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/icon_selected.gif")));