Ich verwende JDK 6 unter XP. Es sieht so aus, als ob die Window UI in mehr als einer Hinsicht nicht den normalen Malregeln folgt. Wie Sie bemerkt haben, funktioniert setBackground() nicht. Sie sollten in der Lage sein, benutzerdefinierte Malerei zu tun, indem Sie der Komponente sagen, nicht in den Inhaltsbereich zu füllen:
import java.awt.*;
import javax.swing.*;
public class ButtonBackground extends JFrame
{
public ButtonBackground()
{
setLayout( new FlowLayout() );
JButton normal = new JButton("Normal");
add(normal);
JButton test1 = new JButton("Test 1")
{
@Override
public void paintComponent(Graphics g)
{
g.setColor( Color.GREEN );
g.fillRect(0, 0, getSize().width, getSize().height);
super.paintComponent(g);
}
};
test1.setContentAreaFilled(false);
add(test1);
}
public static void main(String[] args)
{
try
{
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch (Exception e2) {}
ButtonBackground frame = new ButtonBackground();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}
Wenn Sie den Code so ausführen, wie er ist, scheint er richtig zu funktionieren. Das heißt, wenn Sie auf die Schaltfläche klicken, sehen Sie, dass sich der Rahmen ändert. Allerdings ist Sie mit dem Windows XP LAF laufen, die Border ändert sich nie, um Sie nicht sehen, die Schaltfläche klicken Wirkung.
Daher vermute ich, dass das Problem mit der WindowUI zusammenhängt und Sie die Benutzeroberfläche anpassen müssten, was wahrscheinlich zu komplex ist, so dass ich keine Lösung habe.