java怎么创建动态表_java – 创建动态表以使用按钮添加新条目

我正在尝试构建一个寄存器,这样当单击一个按钮时,表格上会出现一个新条目.理想情况下,我希望在屏幕左侧构建一个表格,当单击按钮时会出现两行和新列.我希望表具有固定的大小,但是在一定数量的条目之后它应该是可滚动的.到目前为止,我已经创建并格式化了我想要单击的JButton对象,以便显示新条目.我也知道我应该使用JTable来追求这个.

我该怎么做这个动态表?

代码:

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更常用于添加行而不是列的方式.我重新考虑了这个example来说明下面的基本思想.每次单击该按钮时,都会在表的模型中添加一个新行,该行会更新表本身.

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);

}

});

}

}

标签:dynamic-tables,java,swing,jtable,dynamic

来源: https://codeday.me/bug/20190918/1810340.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值