#miglayout
#miglayout
Вопрос:
У меня есть группа кнопок, которые просто останутся в середине панели. Я пытаюсь разместить их в верхней части панели в ограничении flowy layout. Мы высоко ценим любую помощь в достижении этого. Я пробовал закрепить и выровнять, но ничего не сделал.
private class ProductPanel extends JPanel {
private JLabel lblProd;
private JButton butAdd;
private JButton butRemove;
private JButton butEdit;
private Product_Table_Model ptm;
private JScrollPane scroll;
private JPanel buttonPanel;
private JTable table;
ProductPanel() {
setLayout(new MigLayout("debug"));
ptm = new Product_Table_Model(
(ArrayList<Product>) client
.receiveObject("Get_Product_Data"));
initComponents();
}
public void initComponents() {
lblProd = new JLabel ("Product List: ");
buttonPanel = new JPanel (new MigLayout());
butAdd = new JButton ("Add");
butRemove = new JButton ("Remove");
butEdit = new JButton ("Edit");
buttonPanel.add(butAdd, "cell 0 0");
buttonPanel.add(butRemove, "cell 0 1");
buttonPanel.add(butEdit, "cell 0 2");
butAdd.setPreferredSize(new Dimension(40, 50));
add(lblProd, "wrap");
table = new JTable(ptm);
table.setFillsViewportHeight(true);
scroll = new JScrollPane(table);
add(scroll);
add(buttonPanel);
}
}
Комментарии:
1. Вам необходимо предоставить полный пример. Должно быть, возникла другая проблема; кнопки в потоковом режиме по умолчанию выровнены по верхнему краю.
2. обновлено с помощью кода, попытался создать изображение, но у меня нет репутации 10.
Ответ №1:
Кнопки выровнены по верху, как и ожидалось. Это сама панель, которая не была выровнена внутри своей ячейки. Итак, следующее устранит проблему:
add(buttonPanel, "top");
Вы не должны устанавливать требуемый размер с помощью setPrefferedSize()
метода. Вместо этого используйте группы размеров.
MigLayout
это очень мощный менеджер компоновки, вам не нужно создавать две панели с двумя менеджерами компоновки. Можно создать свой макет намного проще. Следующий пример является одним из таких решений:
package com.zetcode;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import net.miginfocom.swing.MigLayout;
public class ProductPanel2 extends JPanel {
private JLabel lblProd;
private JButton butAdd;
private JButton butRemove;
private JButton butEdit;
private JScrollPane scroll;
private JTable table;
public ProductPanel2() {
initComponents();
}
private void initComponents() {
setLayout(new MigLayout());
lblProd = new JLabel("Product List: ");
butAdd = new JButton("Add");
butRemove = new JButton("Remove");
butEdit = new JButton("Edit");
table = new JTable();
table.setFillsViewportHeight(true);
scroll = new JScrollPane(table);
add(lblProd, "wrap");
add(scroll);
add(butAdd, "split 3, flowy, top, sgx");
add(butRemove, "sgx");
add(butEdit, "sgx");
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
ProductPanel2 pane = new ProductPanel2();
frame.setContentPane(pane);
frame.setSize(350, 250);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
Ячейка рядом с таблицей разделена на три вложенные ячейки. Три кнопки расположены
вставлено в эти вложенные ячейки. Режим вертикального потока устанавливается с помощью flowy
ограничение. top
Ограничение выравнивает кнопки по верхнему краю. Наконец,
sgx
ограничение делает кнопку того же размера.
Комментарии:
1. Взгляните на шпаргалку MigLayout. Там вам объяснены все ограничения. В нем говорится, что «это присваивает компоненту имя группы размеров. Все компоненты, которые имеют общее название группы размеров, получат одинаковый размер границы (минимальный / предпочтительный / максимальный).» Синтаксис является одним из: sg [name], sgx [name], sgy [name]. По умолчанию кнопки имеют одинаковую высоту, поэтому в нашем случае достаточно sgx. В примере представлена только одна группа размеров, поэтому нам не нужно было давать ей имя.