2014-02-12 3 views
1

Когда я запускаю эту программу, цвет не меняется на синий. Как изменить цвет в этом контексте? Код:Изменить цвет фона на JFrame в этом контексте?

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

public class Test extends JPanel { 
static void test() { 
    JFrame f = new JFrame("Test"); 
    f.getContentPane().setBackground(Color.blue); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.getContentPane().add(new Test()); 
    f.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    f.setVisible(true); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     test(); 
    } 
    }); 
} 
} 
+0

вместо использования getContentPane(), просто сделать setBackground (Color.BLUE); * может быть установленBackgroundColor, не помню, но используйте кепки для цвета. * – user2277872

ответ

1

Я думаю, что ваш новый тест() перекрывает цвет фона.

Попробуйте изменить цвет фона jpanels.

1

setBackground отлично работает. Проблема связана со значением BorderLayoutJFrame. Единственный компонент, который вы добавляете, это TestJPanel, которые расширяются размером JFrame, из-за BorderLayout, что в конечном итоге покрывает цвет фона. Если вы выберете TestJPanel, вы увидите цвет фона.

Вы также можете увидеть аффекта, ниже, настройки макета в GridBagLayout к раме и установки preferredSize to the JPanel`

enter image description here

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridBagLayout; 
import javax.swing.*; 
import javax.swing.border.TitledBorder; 

public class Test extends JPanel { 
    public Test() { 
     setBorder(new TitledBorder("Panel size 300, 300")); 
     setBackground(Color.YELLOW); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(300, 300); 
    } 

    static void test() { 
     JFrame f = new JFrame("Test"); 
     f.setLayout(new GridBagLayout()); 
     f.getContentPane().setBackground(Color.blue); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.getContentPane().add(new Test()); 
     f.setExtendedState(JFrame.MAXIMIZED_BOTH); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       test(); 
      } 
     }); 
    } 
} 

Причина GridbagLayout работает потому, что она учитывает дочерние компоненты preferredSize. Как вы можете видеть из this answer, некоторые Компоновка Менеджеры уважать предпочтительные размеры и некоторые не

enter image description here

+0

Правильно. ▲. –

1

Установить макет JFrame

f.setLayout(new FlowLayout());

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