Я использую JDK 6 на XP. Похоже, что пользовательский интерфейс Window не следует нормальным правилам рисования больше, чем 1. Как вы заметили, setBackground () не работает. Вы должны быть в состоянии сделать пользовательское рисование, сказав компоненту не заполнять область содержимого:
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);
}
}
Когда вы запускаете код как есть, он, кажется, работает правильно. То есть, когда вы нажимаете на кнопку, вы видите изменение границы. Однако, если вы работаете с Windows XP LAF, граница никогда не изменится, и вы не увидите эффекта нажатия кнопки.
Поэтому, я полагаю, проблема связана с WindowUI, и вам нужно будет настроить пользовательский интерфейс, который, вероятно, слишком сложен, поэтому у меня нет решения.