2014-10-29 2 views
0

Я создаю приложение, отображает информацию из базы данных в виде таблицы. Поскольку количество строк в таблице может меняться, я создал общий метод, который создаст одну строку таблицы, либо заголовок таблицы, либо отдельные строки. Я сделал это с помощью JPanel.Удалить место между JPanels

Моя проблема заключается в том, что каждый раз, когда я добавляю новую строку в таблицу, между строками существует разрыв. Я знаю, что могу использовать таблицу, но это также опыт обучения для меня, используя swing, поэтому я хотел бы сделать это, используя JPanels, если это возможно.

Ниже приведен способ, чтобы создать строку:

public static JPanel customersTable(){ 

FlowLayout FlowCustTable = new FlowLayout(); 
FlowCustTable.setHgap(1); 
FlowCustTable.setVgap(0); 

JPanel customersTable = new JPanel(FlowCustTable); 

JTextField surname = new JTextField(); 
FieldSetup(surname, 120, 25, " Surname", Color.CYAN, false); 

JTextField firstname = new JTextField(); 
FieldSetup(firstname, 120, 25, " Firstname", Color.CYAN, false); 

JTextField mobile = new JTextField(); 
FieldSetup(mobile, 120, 25, " Mobile", Color.CYAN, false); 

JTextField homePhone = new JTextField(); 
FieldSetup(homePhone, 120, 25, " Home Phone", Color.CYAN, false); 

JTextField address = new JTextField(); 
FieldSetup(address, 280, 25, " Address", Color.CYAN, false); 

JTextField postcode = new JTextField(); 
FieldSetup(postcode, 120, 25, " Postcode", Color.CYAN, false); 

customersTable.add(surname); 
customersTable.add(firstname); 
customersTable.add(mobile); 
customersTable.add(homePhone); 
customersTable.add(address); 
customersTable.add(postcode); 

return customersTable; 

} 

Это метод используется для настройки JTextFields:

public static void FieldSetup(JTextField field, int x, int y, String text, Color color, Boolean Editable){ 

    field.setText(text); 
    field.setBackground(color); 
    field.setPreferredSize(new Dimension(x, y)); 
    field.setEditable(Editable); 
    Border border = BorderFactory.createLineBorder(Color.BLACK); 
    field.setBorder(border); 
    } 

и это метод для создания финального стола и Пользовательский интерфейс:

public static void CustomersGui(){ 

final JFrame frame = new JFrame("Customers"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JPanel customers = new JPanel(); 

customers.add(customersTable()); 

customers.add(customersTable()); 

frame.setContentPane(customers); 

frame.setSize(1200,500); 

frame.setVisible(true); 
} 

Для этого вопроса я добавил 2 экземпляра заголовка e, но тот же принцип все еще применяется.

Я пробовал setHgap и setVgap JPanel, и пока это действительно влияет на промежуток, он не сделает его равным нулю.

+2

Попробуйте изменить пробел в 'customers'. Может быть, лучше подходит для BoxLayout вместо стандартного FlowLayout, если вы хотите добавить компоненты вертикально. FlowLayout добавляет их по горизонтали. Переполнение приведет к тому, что он будет отображаться вертикально, но вы не хотите зависеть от этого, когда BoxLayout уже предложил функциональность, которую вы хотите –

+1

1) Для лучшей помощи раньше, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример). 2) См. [Я должен избегать использования методов Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) –

+0

@AndrewThompson Я попытался придерживаться принципов MCVE. Могу ли я спросить, какую информацию я мог бы исключить, чтобы лучше соблюдать эти принципы? –

ответ

0

Как @peeskillet отметил менеджер компоновки по умолчанию для панелей FlowLayout и, таким образом, вы должны удалить пробелы в customers панели, а также:

FlowLayout layout = (FlowLayout)customers.getLayout(); 
// set gaps here.... 

Однако если целью является создание сетки (табличная форма), то, вероятно, либо GridLayout, либо GridBagLayout - лучший выбор, чем FlowLayout.

С другой стороны, имейте в виду, что действительно сложно (я бы сказал, это невозможно) выровнять компоненты, размещенные в разных контейнерах, поэтому ваш текущий подход к выполнению каждой строки другой панели может столкнуться с проблемами, когда одна строка имеет другой ширины. См. Более подробное объяснение в этой теме: Align the label column of different DesignGridLayout

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