2016-10-14 4 views
0

Я не могу получить JPanel для изменения цвета. Я также не могу заставить JFrame менять цвет. Я посмотрел онлайн ... и у меня есть еще одна программа, которая имеет почти идентичный код для настройки JPanel и JFrame. Я просто не могу заставить его работать.Невозможно изменить цвет фона JFrame или JPanel

Вот мой основной метод:

public static void main(String[] args){ 
    JFrame frame = new JFrame("title"); 
    frame.getContentPane().setBackground(Color.WHITE); 
    Drawing drawing = new Drawing(2); 
    drawing.setBackground(Color.CYAN); 
    frame.add(drawing); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(500, 500); 
    ... 

EDIT: в конце моего основного метода

frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

Вот конструктор для JPanel:

public class Drawing extends JPanel { 
    // instance variables 
    public Drawing(int n){ 
     setOpaque(true); 
     setPreferredSize(new Dimension(300, 300)); 
     setBackground(Color.PINK); 
     ... 

и цвет фона остается серым по умолчанию.

+0

@SimonJensen Затмение – XSeven

+1

Для лучшей помощи рано, оставить [MCVE ] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

ответ

2

У меня не было проблем с созданием приложения для создания быстрых окон с использованием eclipse, а также с установкой цветов.

Несколько вещей, которые я заметил, это вы делаете frame.add(drawing), а не frame.getContentPane().add(drawing).
Вы также никогда не устанавливаете рамку с frame.setVisible(true).

Вот код, который я использовал:

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainWindow window = new MainWindow(); 
       window.frame.setVisible(true); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public MainWindow() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.getContentPane().setBackground(Color.GREEN); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JPanel panel = new JPanel(); 
    panel.setBackground(Color.CYAN); 
    panel.setBounds(10, 171, 128, 81); 
    frame.getContentPane().add(panel); 
} 

EDIT: добавлена ​​картинка иллюстрация кода рабочего

enter image description here

+0

Это работает для меня. Но почему мой старый код не работает? – XSeven

+0

Я забыл упомянуть, что я установил панель, видимую позже в методе (отредактировал мой пост выше), но фон отображается как серый. – XSeven

+0

Я буду полностью честен с вами здесь, я не уверен, почему у вас эта проблема, я просто скопировал ваш код в eclipse, не добавляя или не редактируя ваш код в любом случае, и я получил его работу отлично, я добавлено изображение, иллюстрирующее это. Я предполагаю, что некоторые из ваших других кодов испортили его. –

Смежные вопросы