3

I am trying to build a register, so that when a button is clicked, a new entry appears on a table. Ideally, I am looking to build a table on the left side of the screen, with two rows and new column appears when the button is clicked. I want the table to have a fixed size, but it should be scrollable after a certain amount of entries. So far, I have created and formatted the JButton objects that I want to be clicked for a new entry to appear. I also know that I should use a JTable to pursue this.

How should I go about making this dynamic table?

Code So Far:

private void addRegister(JPanel pane) {

             JPanel everythingPane = new JPanel();
             JPanel pluPane = new JPanel();

             Dimension button = new Dimension(200,150);

             JTable pluTable = new JTable();


             JPanel buttonPane = new JPanel();

             buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.Y_AXIS));

             //JPanel buttonPane = new JPanel (new FlowLayout (FlowLayout.LEFT));

             JPanel subPane1 = new JPanel();
             subPane1.setAlignmentX(LEFT_ALIGNMENT);
             JPanel subPane2 = new JPanel();
             subPane2.setAlignmentX(LEFT_ALIGNMENT);
             JPanel subPane3 = new JPanel();
             subPane3.setAlignmentX(LEFT_ALIGNMENT);
             JPanel subPane4 = new JPanel();
             subPane4.setAlignmentX(LEFT_ALIGNMENT);
             JPanel subPane5 = new JPanel();
             subPane5.setAlignmentX(LEFT_ALIGNMENT);
             JPanel alignmentLayer = new JPanel();

             JButton frappuccino = new JButton("Frappuccino");
             JButton icedCoffee = new JButton("Iced Coffee");
             frappuccino.setPreferredSize(button);
             icedCoffee.setPreferredSize(button);

             JButton arizona = new JButton("Arizona Green Tea");
             JButton izze = new JButton("Izze");
             arizona.setPreferredSize(button);
             izze.setPreferredSize(button);

             JButton snapple = new JButton("Snapple");
             JButton gatorade = new JButton("Gatorade");
             snapple.setPreferredSize(button);
             gatorade.setPreferredSize(button);

             JButton water = new JButton("Water");
             JButton appleJuice = new JButton("Apple Juice");
             water.setPreferredSize(button);
             appleJuice.setPreferredSize(button);

             JButton orangeJuice = new JButton("Orange Juice");
             JButton mentos = new JButton("Mentos");
             orangeJuice.setPreferredSize(button);
             mentos.setPreferredSize(button);

             JButton gum = new JButton("Gum");
             JButton cliffBar = new JButton("Cliff Bar");
             gum.setPreferredSize(button);
             cliffBar.setPreferredSize(button);

             JButton littleBites = new JButton("Little Bites");
             JButton welchs = new JButton("Welch's Fruit Snacks");
             littleBites.setPreferredSize(button);
             welchs.setPreferredSize(button);

             JButton fiberOneBar = new JButton("Fiber One Bar");
             JButton fiberOneBrownie = new JButton("Fiber One Brownie");
             fiberOneBar.setPreferredSize(button);
             fiberOneBrownie.setPreferredSize(button);

             JButton cheezeIts = new JButton("Cheeze Its");
             JButton goldFish = new JButton("Gold Fish");
             cheezeIts.setPreferredSize(button);
             goldFish.setPreferredSize(button);

             JButton teaBag = new JButton("Tea Bag");
             JButton poptarts = new JButton("Poptarts");
             teaBag.setPreferredSize(button);
             poptarts.setPreferredSize(button);

             JButton sampleButton = new JButton("Sample Button");
             JButton sampleButton2 = new JButton("Sample Button");
             sampleButton.setPreferredSize(button);
             sampleButton2.setPreferredSize(button);

             JButton sampleButton3 = new JButton("Sample Button");
             JButton sampleButton4 = new JButton("Sample Button");
             sampleButton3.setPreferredSize(button);
             sampleButton4.setPreferredSize(button);


             subPane1.add(frappuccino);
             subPane1.add(icedCoffee);

             subPane1.add(arizona);
             subPane1.add(izze);

             subPane2.add(snapple);
             subPane2.add(gatorade);

             subPane2.add(water);
             subPane2.add(appleJuice);

             subPane3.add(orangeJuice);
             subPane3.add(mentos);

             subPane3.add(gum);
             subPane3.add(cliffBar);

             subPane4.add(littleBites);
             subPane4.add(welchs);

             subPane4.add(fiberOneBar);
             subPane4.add(fiberOneBrownie);

             subPane5.add(cheezeIts);
             subPane5.add(goldFish);

             subPane5.add(teaBag);
             subPane5.add(poptarts);             

             alignmentLayer.add(sampleButton);
             alignmentLayer.add(sampleButton2);
             alignmentLayer.add(sampleButton3);
             alignmentLayer.add(sampleButton4);


             buttonPane.add(subPane1);
             buttonPane.add(subPane2);
             buttonPane.add(subPane3);
             buttonPane.add(subPane4);
             buttonPane.add(subPane5);
             buttonPane.add(Box.createRigidArea(new Dimension(5,100)));
             buttonPane.add(alignmentLayer);


             pluPane.add(pluTable);

             everythingPane.add(pluPane);
             everythingPane.add(buttonPane);

             pane.add(everythingPane);

      }
2
  • 1
    For better help sooner, post an SSCCE. Note that trashgod's SSCCE is shorter than the uncompilable code snippet seen in the question. Commented Oct 20, 2013 at 7:31
  • You can experiment with addRow() and addColumn() in this sscce.
    – trashgod
    Commented Oct 20, 2013 at 15:21

1 Answer 1

13

JTable is more commonly used in a way that adds rows, rather than columns. I re-factored this example to illustrate the basic idea below. Each time the button is clicked, a new row is added to the table's model, which updates the table itself.

add table

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 * @see https://stackoverflow.com/a/19472190/230513
 * @see https://stackoverflow.com/a/7519403/230513
 */
 public class TableAddTest extends JPanel {

    private static final int N_ROWS = 8;
    private static String[] header = {"ID", "String", "Number", "Boolean"};
    private DefaultTableModel dtm = new DefaultTableModel(null, header) {

        @Override
        public Class<?> getColumnClass(int col) {
            return getValueAt(0, col).getClass();
        }
    };
    private JTable table = new JTable(dtm);
    private JScrollPane scrollPane = new JScrollPane(table);
    private JScrollBar vScroll = scrollPane.getVerticalScrollBar();
    private int row;
    private boolean isAutoScroll;

    public TableAddTest() {
        this.setLayout(new BorderLayout());
        Dimension d = new Dimension(320, N_ROWS * table.getRowHeight());
        table.setPreferredScrollableViewportSize(d);
        for (int i = 0; i < N_ROWS; i++) {
            addRow();
        }
        scrollPane.setVerticalScrollBarPolicy(
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        vScroll.addAdjustmentListener(new AdjustmentListener() {

            @Override
            public void adjustmentValueChanged(AdjustmentEvent e) {
                isAutoScroll = !e.getValueIsAdjusting();
            }
        });
        this.add(scrollPane, BorderLayout.CENTER);
        JPanel panel = new JPanel();
        panel.add(new JButton(new AbstractAction("Add Row") {

            @Override
            public void actionPerformed(ActionEvent e) {
                addRow();
            }
        }));
        this.add(panel, BorderLayout.SOUTH);
    }

    private void addRow() {
        char c = (char) ('A' + row++ % 26);
        dtm.addRow(new Object[]{
                Character.valueOf(c),
                String.valueOf(c) + String.valueOf(row),
                Integer.valueOf(row),
                Boolean.valueOf(row % 2 == 0)
            });
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                TableAddTest nlt = new TableAddTest();
                f.add(nlt);
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
            }
        });
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.