2017-02-02 32 views
-2

我想创建一个红色JButton颜色设定为一个JButton不调整边框

import java.awt.*; 
import javax.swing.*; 

public class RedButtonTest { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Red Button Color Test"); 
       JPanel pane1 = new JPanel(new FlowLayout()); 
       JPanel pane2 = new JPanel(new FlowLayout()); 
       JButton button1 = new JButton(); 
       JButton button2 = new JButton(); 

       frame.setSize(new Dimension(300, 300)); 
       button1.setPreferredSize(new Dimension(100, 100)); 
       button2.setPreferredSize(new Dimension(100, 100)); 
       button2.setBackground(Color.red); 
       button2.setBorderPainted(false); //This line 
       button2.setOpaque(true); 

       pane1.add(button1); 
       pane2.add(button2); 
       frame.add(pane1, BorderLayout.WEST); 
       frame.add(pane2, BorderLayout.EAST); 

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

有没有一种方法,使按钮的红色,而无需使用

setBorderPainted(false); 

当不使用时,边界变红而不是按钮本身,但是,我不想使用这一行,因为它删除了按钮的软边缘。是否有另一种颜色按钮的方法?

+0

替代解决方案:可以绘制边框的颜色选择这样的: button2.setBorder(BorderFactory.createLineBorder(Color.black)); –

+0

答案已经在其他帖子中给出,这是一个LAF问题。这个问题没有提到这个信息。如果您使用Mac并了解解决方案,请查看其他信息。把所有关于这个问题的信息放在一起,这样每个人都知道已经讨论和建议的内容。 – camickr

回答

0

尝试使用button2.setContentAreaFilled(false);。这将保持边缘但设置背景颜色。根据docs

如果为true,则该按钮将绘制内容区域。例如,如果您希望有一个透明按钮(例如仅图标按钮),那么您应该将其设置为false。不要调用setOpaque(false)。 contentAreaFilled属性的默认值 值为true。

+0

对不起,这不起作用。如果你尝试在上面的例子中插入这一行,你会发现右边的按钮(带有这行代码的那一行)变成了一个红色的方形按钮,而不是一个带有软边缘的红色按钮。 – Playdowin