У меня есть JButton, который я хочу установить фон в цвет.Установить цвет фона JButton на окнах
JButton button = new JButton();
button.setVisible(true);
button.setPreferredSize(new Dimension(student_scroll.getWidth(), 50));
button.setBorder(BorderFactory.createLineBorder(Color.WHITE, 1));
button.setBackground(Color.BLACK);
button.setForeground(Color.WHITE);
button.setOpaque(true);
Я использовал это для mac, и оно появилось так, как я хотел. Тем не менее, при попытке сделать это на окнах, передний план белый (как следует), но фон пуст.
Setting background color to JButton
говорит, чтобы добавить button.setContentAreaFilled(false);
, который я сделал, но не имел никакого эффекта. Большинство других утверждают, что добавили button.setOpaque(true);
, которые я тоже сделал.
Что еще мне нужно сделать, чтобы оно отображалось на черном фоне?
EDIT
В соответствии с просьбой SSCCE:
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class MainSwing extends JFrame {
private static final long serialVersionUID = -8231889836024827530L;
public static void main(String[] args) {
try {
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Test");
UIManager.put("ScrollBarUI", "main.CustomScrollBarUI");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(ClassNotFoundException e) {
System.out.println("ClassNotFoundException: " + e.getMessage());
}
catch(InstantiationException e) {
System.out.println("InstantiationException: " + e.getMessage());
}
catch(IllegalAccessException e) {
System.out.println("IllegalAccessException: " + e.getMessage());
}
catch(UnsupportedLookAndFeelException e) {
System.out.println("UnsupportedLookAndFeelException: " + e.getMessage());
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame() {
Container c = getContentPane();
JButton button = new JButton("Hello");
{
button.setText("Hello");
button.setVisible(true);
button.setPreferredSize(new Dimension(100, 50));
button.setBorder(BorderFactory.createLineBorder(Color.WHITE, 1));
button.setBackground(Color.BLACK);
button.setForeground(Color.WHITE);
button.setOpaque(true);
c.add(button);
}
};
frame.setSize(500, 500);
frame.setBackground(Color.BLACK);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
кажется, что проблема имеет что-то делать с линией: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
как когда я удалить его, кнопки черные.
отлично работает для меня. Отправьте надлежащий [SSCCE] (http://sscce.org/), который демонстрирует проблему. Так что все, что вам нужно, это кадр с кнопкой, чтобы выполнить свой тест. Вся программа будет составлять 10-15 строк кода. – camickr
'setContentAreaFilled (false)' и или 'setBorderPainted (false)'. Эффект «заливки» предоставляется делегатом внешнего вида и я не знаю, как использовать цвета, которые он использует – MadProgrammer
'button.setVisible (true);' не нужно. Просто добавьте его (к контейнеру, возможно, добавленному) в окно верхнего уровня (кадр, окно, диалог и т. Д.), Который сам упаковывается после добавления компонентов, а затем устанавливает видимость. 'button.setPreferredSize (новое измерение (student_scroll.getWidth(), 50));' Если кнопка не имеет текста, размер легко устанавливается с использованием (возможно, прозрачного) изображения. Если кнопка ** имеет текст **, размер лучше определяется размером текста текста муравья, а также полями и границами кнопки, которая содержит его.В любом случае нам не нужно ** устанавливать ** предпочтительный размер. –