Java Swing - JButtons на новой линии - PullRequest
1 голос
/ 17 ноября 2011

Я пытаюсь распечатать динамически сгенерированный список кнопок с каждой кнопкой на новой строке.

public void addComponentToPane(Container pane) {
    JTabbedPane tabbedPane = new JTabbedPane();

    //Create the "cards".
    JPanel card1 = new JPanel() {

 JPanel card1 = new JPanel()     
 ... 

int n = 10;
JButton[] jButtons = new JButton[10];
for(int i=0; i<n; i++){
   jButtons[i] = new JButton("test" + i);
   card1.add(jButtons[i]);
   //card1.add("<br>");//<--this is wrong; but hopefully you get my point.
   jButtons[i].addActionListener(this);
}

Ответы [ 4 ]

4 голосов
/ 17 ноября 2011

Вот два решения, использующие ограниченные GridLayout и BoxLayout

Dynamic Buttons

Я предпочитаю GridLayout (слева), поскольку он нормализует ширинукнопки и позволяет легко добавить небольшое пространство между ними.

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

class DynamicButtons {

    public static void main(String[] args) {
        final JPanel gui = new JPanel(new BorderLayout());

        final JPanel gridButton = new JPanel(new GridLayout(0,1,2,2));
        gridButton.add(new JButton("Button 1"));
        JPanel gridConstrain = new JPanel(new BorderLayout());
        gridConstrain.add(gridButton, BorderLayout.NORTH);

        final Box boxButton = Box.createVerticalBox();
        boxButton.add(new JButton("Button 1"));

        JButton b = new JButton("Add Button");
        b.addActionListener( new ActionListener() {
            int count = 2;
            public void actionPerformed(ActionEvent ae) {
                gridButton.add(new JButton("Button " + count));

                boxButton.add(new JButton("Button " + count));

                count++;
                gui.revalidate();
            }
        });

        gui.add(b, BorderLayout.NORTH);
        JSplitPane sp = new JSplitPane(
            JSplitPane.HORIZONTAL_SPLIT,
            new JScrollPane(gridConstrain),
            new JScrollPane(boxButton));
        gui.add(sp, BorderLayout.CENTER);

        gui.setPreferredSize(new Dimension(250,150));

        JOptionPane.showMessageDialog(null, gui);
    }
}
4 голосов
/ 17 ноября 2011

Положите их в коробку:

Box card1 = Box.createVerticalBox();

или, если вы хотите, чтобы все кнопки имели одинаковый размер, используйте GridLayout с одним столбцом:

JPanel card1 = new JPanel(new GridLayout(n, 1))
3 голосов
/ 17 ноября 2011

Полагаю, вам нужно что-то вроде этого:

enter image description here

Для этого вам требуется Макет коробки , см. Это для более подробной информации: Как использовать BoxLayout

и, если необходимо, вот демо: Пример кода с учебными пособиями по Java - BoxLayoutDemo.java

3 голосов
/ 17 ноября 2011

Используйте GridBagLayout и установите GridBagConstaints.gridy поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...