2012-01-18 6 views
2

я должен написать этот код для отображения некоторого набора цветов с панели:JPanel заполняет все пространство JFrame

import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Palette { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Panel"); 

     palette.add(new Color(255, 0, 0)); 
     palette.add(new Color(0, 255, 0)); 
     palette.add(new Color(0, 0, 255)); 

     int width = 100; 
     int height = 250; 
     int x = 0; 
     for (Color color : palette) { 
      JPanel panel = new JPanel(); 

      panel.setSize(width, height); 
      panel.setLocation(x, 750); 
      panel.setBackground(new java.awt.Color(color.getColor())); 

      frame.add(panel); 

      x+=width; 
     } 
     frame.pack(); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(1000, 1000); 
     frame.setVisible(true); 
    } 

} 

Две первые панели в нужном месте и с правильными размерами. Но последний заполняет все кадры синим цветом. Что не так?

+0

Вы должны использовать соответствующий Layout Manager. По умолчанию JFrame имеет BorderLayout. –

+1

@Dmytro, Что такое 'palette'? – mre

+1

@mre Мне нужно угадать, что это список

ответ

1
  1. Вы не установили LayoutManager на фрейм. Я не уверен, что LayoutManager по умолчанию находится в Swing, но, скорее всего, LayoutManager просто укладывает компоненты в порядке Z, когда вы вызываете пакет().
  2. Вы должны использовать setPreferredSize (размер d), а не setSize (int x, int y) - из того, что я помню, LayoutManagers предпочитают это.
+1

1) 'JFrame' использует' BorderLayout' по умолчанию и 2) вызывать 'setSize' на экземпляре' JFrame' делает то же самое, что и 'setPreferredSize'. – mre

+0

@mre thanks - были годы с тех пор, как я в последний раз работал с Swing. – mcfinnigan

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