创builddynamic表添加新的条目与button
我正在尝试构build一个registry,以便在单击一个button时,表中会出现一个新的条目。 理想情况下,我正在寻找在屏幕左侧build立一个表,当点击button时会出现两行和一个新的列。 我希望表格具有固定大小,但是在一定数量的条目之后它应该是可滚动的。 到目前为止,我已经创build并格式化了我想要单击的JButton
对象,以显示新条目。 我也知道我应该使用JTable
来追求这一点。
我应该如何去做这个dynamic表?
Code至今:
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); }
JTable
更常用于添加行而不是列的方式 。 我重新考虑了这个例子来说明下面的基本思想。 每次点击button,一个新的行被添加到表的模型,它更新表本身。
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); } }); } }