Я работаю над проектом, который приложение должно иметь возможность содержать некоторые изображения на кнопках. Каждая кнопка должна иметь одинаковый размер по длине и ширине. И должно быть от 10 до 20 кнопок плюс в приложении. Поэтому я решил использовать JScrollPane для организации всех JButton по горизонтали. Во-первых, я добавляю все эти JButton в JPanel, который был установлен в Layout для GridLayout с 1 столбцом и 10 строками. Затем добавьте JPanel в JScrollPane. В результате все кнопки имеют одинаковый размер. Но проблема в том, что JScrollBar в JScrollPane не смог двигаться (может, потому что недостаточно кнопки, чтобы превышать длину JScrollPane или GridLayout, каждый раз изменял размер каждой кнопки). Итак, я попытался добавить еще JButton до 20 (рис. 2). Итак, JScrollBar в JScrollPane был включен, и я мог его переместить. Но, к сожалению, все JButton в JScrollPane были короче и короче каждый раз, когда добавлялось больше кнопок.Как сохранить размер JButtons, при добавлении большего количества JButton в JScrollPane?
Я думаю, это из-за GridLayout, что я установил JPanel, который автоматически изменяет размер каждого компонента. Поэтому я попытался использовать FlowLayout, но он не был удовлетворен, как ожидалось, потому что JButton был слишком маленьким и не мог изменять размер (pic3). Я просто хотел сохранить размер каждой кнопки, не меняя при каждом добавлении новых кнопок или в состоянии установить их размер.
У кого-нибудь есть опыт перед этим и могли бы поделиться, пожалуйста?
public class Testing
{
public Testing()
{
JFrame frm = new JFrame();
JPanel panel = new JPanel();
JScrollPane sc = new JScrollPane();
// init frame
frm.setSize(1366, 768);
frm.setLayout(new GridLayout(5, 1, 10, 10));
// init panel
panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
// set some JScrollpane properties
sc.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sc.setViewportView(panel);
// add few button into panel
for (int i = 0; i < 20; i++)
{
panel.add(new JButton("Button " + i));
}
frm.add(sc);
frm.setVisible(true);
frm.setLocationRelativeTo(null);
}
public static void main(String[] ar)
{
new Testing();
}
}