2013-03-25 5 views
0

Я хотел был бы иметь иметь JPanel внутри моего JFrame фиксированного размера 400x400.Java Swing JPanel Размеры

Я также хотел бы, чтобы это была широкая рамка шириной 20 пикселей вокруг нее.

Основная проблема заключается в следующем коде, не придерживающемся его размера. `JScrollPane runningAni = new JScrollPane (new views.cRunningAnimation ( model));

runningAni.setMaximumSize(new Dimension(400,400)); 

    this.setSize(new Dimension(600,600)); 
    this.add(runningAni,BorderLayout.CENTER);` 

При этом панель runningAni просто стреляет по всей рамке.

public void paint(Graphics g) { 

    this.setBackground(new Color(0,255,0)); 
    } 

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

Как бы я создать панель, так что всегда остается такой же размер, и поэтому вокруг него всегда будет 20-кратная цветовая рамка?

ответ

3

BorderLayout игнорирует размер. Вам необходимо установить LayoutManager, который либо позволяет установить размер в фиксированный размер, либо размер, необходимый для размеров. Существуют разные менеджеры компоновки, которые позволяют это (например, GrindBagLayout или вообще не менеджер макета ). Некоторые из них не так просты в использовании (например, GridBagLayout). Что использовать, зависит от остальной части макета.

Возможно, вы можете использовать панель макета, содержащую вашу настраиваемую панель. Панель макета нуждается в соответствующем менеджере компоновки и может быть помещена в центр BorderLayout. Это означало бы почти никаких изменений в существующем макете.

Весь смысл BorderLayout состоит в том, чтобы заполнить центр центральным компонентом.

+0

Мне это нравится +1! Как я могу установить границу вокруг моего Jpanel e..g add Border добавляет его внутри? – LmC

+0

+1, для использования подходящего мануфактуры. – camickr

+3

Не предлагайте использовать LayoutManager, пожалуйста! –

-1
setPreferredSize() 
setMinimumSize() 
setMaximumSize() 

должен сделать трюк

+0

Плохая идея, плохой совет. Эти методы следует забыть –

+0

Этот ответ даже не удален. Необходимость использования этих методов редка, хотя я не думаю, что их нужно забыть, как упоминалось выше. Они по-прежнему используют их для случайных корректировок. – Michael

1

Не переопределяйте метод paint(), чтобы установить цвет панели. Использование:

panel.setBackground(...); 

При создании панели.

Как я смог бы установить границу вокруг моего JPanel

См How to Use Borders.

1

Просто установите для своего макета нулевое значение для того, что когда-либо было вашим добавлением вашей JPanel. Затем используйте метод setBounds(), чтобы указать ваше местоположение и размер!

Например:

public class Main extends JFrame{ 

     YourPanelClass panel = new YourPanelClass(); 

     public Main(){ 

      // I didn't want to put all the, everyday JFrame methods... 

      setLayout(null); 

      /* 
       First two coordinates indicate the location of JPanel inside JFrame. 
       The seconds set of coordinates set the size of your JPanel. 
       (The first two coordinates, 0 and 0, tell the JPanel to start at the 
        top left of your JFrame.) 
      */ 
      panel.setBounds(0, 0, 100, 100); 

      add(panel); 
     } 
} 

И я бы ЗНАЧИТЕЛЬНО рекомендуется использовать метод paintComponent().

Например: (Очевидно, вы положили это в свой класс JPanel.)

public void paintComponent(Graphics g){ 
    super.paintComponent(g); // don't forget this if you are going to use this method. 

    //Basically this makes your JPanel's background green(I did it this way because I like doing it this way better.) 
    g.setColor(new Color(0, 255, 0)); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
} 

Пожалуйста, не забудьте недурно, если это помогло!

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