2013-12-07 5 views
2

Когда я помещаю что-то в область содержимого, у которой есть менеджер компоновки потоков, я получаю свободное пространство между этим компонентом и границами области содержимого.Свободное пространство между компонентами и границей контейнера в FlowLayout

Распределение потока по умолчанию имеет hgap и wgap, отличные от нуля, но устанавливая их на ноль, НЕ РЕШИЛ проблему.

ПРИМЕЧАНИЕ. Пожалуйста, помогите мне в этом макете, а не предлагайте использовать другой макет, потому что это выдержка из более крупного приложения.

Настройка отрицательных hgap и wgap может помочь, но это, безусловно, не решение. Вот код для проверки:

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

public class MainWindow extends JFrame{ 

public MainWindow(){ 
    JPanel contentPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 

    JPanel wp = new JPanel(); 
    wp.setPreferredSize(new Dimension(500, 500)); 
    wp.setBackground(Color.DARK_GRAY); 

    contentPane.add(wp); 

    setContentPane(contentPane); 

    pack(); 
    setResizable(false); 
    setVisible(true); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
public static void main(String[] args) { 
     new MainWindow(); 
} 
} 
+1

Настройка hgap и vgap на '0' должна на самом деле сделать трюк. Пожалуйста, опубликуйте [SSCCE] (http://sscce.org), который способен создать вашу проблему. – Sage

+0

hgap и vgap, которые установлены в ноль, представляют собой опубликованный код с комментариями строки без комментирования и без первой строки в конструкторе. Просто не согласен с этим, и вы увидите, что он не решает. – croraf

+0

Я видел это, что я на самом деле имел в виду код компонента, который вы добавляете. Поскольку у меня нет (и на самом деле никто не будет) каких-либо проблем с 'hgap' и' vgap', если они были установлены на ноль. Поэтому нам нужно увидеть вашу рабочую версию, которая способна воспроизвести описанную проблему и все же небольшую по размеру. Только тогда мы можем поверить вам – Sage

ответ

0

Я нашел ответ на другую тему. Вы должны написать setResizable (false) ПЕРЕД вызовом pack(). Не нашли объяснения, почему это необходимо, я предполагаю, что это потому, что pack() добавляет дополнительное пространство для фрейма. Как решить это, если вы не хотите изменять размер окна, я не знаю. ПРИМЕЧАНИЕ. У вас такая же проблема с другими менеджерами LayoutManager, такими как BorderLayout (менеджер с пакетом добавляет дополнительное пространство).

+1

'Я предполагаю, что это потому, что pack() добавляет дополнительное пространство для фрейма . '- Нет, pack() не добавляет лишнего места в фрейм. Метод setResizable (false) извлекает пространство из фрейма, потому что ему больше не нужно рисовать изменяемую границу. 'Как решить эту проблему, если вы не хотите, чтобы окно было неустранимым, я не знаю. Вы уже знаете ответ, вы заявили об этом в начале своего ответа. – camickr

+0

О, извините, я имел в виду, когда окно изменчиво: D. Не могли бы вы объяснить, что такое изменяемые размеры границ, я этого не понимаю? – croraf

+1

Когда окно изменчиво, проблем нет. Нет лишнего места, поэтому я не понимаю ваш комментарий. Также, когда окно изменяет размер и вы перемещаете мышь по краю окна, курсор меняет форму, чтобы указать, что вы можете перетащить край. Таким образом, граница вокруг вдовы составляет около 4 пикселей для поддержки этого. – camickr

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