当项目添加到 JList 时更新 JTabbedPane
Update a JTabbedPane when item added to JList
我在 Java 程序中有两个选项卡。一个用于添加股票,另一个用于列出我创建的股票。当我在第二个选项卡中添加新项目时,我试图设法更新第一个选项卡中的项目列表。有任何想法吗?
我希望第一个选项卡显示我在第二个选项卡中创建的项目列表...
public class StocksGUI extends javax.swing.JFrame {
private JTextField stock, qty, purchasePrice, currentPrice;
private JButton addStockButton;
private JList<StockClass> stockList;
private DefaultListModel<StockClass> stockModel;
public StocksGUI()
{
super("Portfolio Management");
stock = new JTextField();
qty = new JTextField();
purchasePrice = new JTextField();
currentPrice = new JTextField();
addStockButton = new JButton("Add Stock");
stockList = new JList<>();
stockModel = new DefaultListModel<StockClass>();
JTabbedPane tab =new JTabbedPane();
JPanel p2 = new JPanel();
if(stockModel.size() > 1)
{
stockList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
p2.add(new JScrollPane(stockList));
}
else
{
p2.add(new JLabel("Currently No Stocks"));
tab.addTab("List",null, p2, " Panel #2");
}
JPanel p1 = new JPanel(new GridLayout(5,2));
p1.add(new JLabel("Stock"));
p1.add(stock);
p1.add(new JLabel("Quantity"));
p1.add(qty);
p1.add(new JLabel("Purchase Price"));
p1.add(purchasePrice);
p1.add(new JLabel("Current price"));
p1.add(currentPrice);
p1.add(addStockButton);
tab.addTab("Add Stock",null, p1," Panel #1");
add(tab);
TickerAdd ta = new TickerAdd();
TickerAdd.StockADD stad = ta.new StockADD();
addStockButton.addActionListener(stad);
}
public class TickerAdd
{
public class StockADD implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
StockClass passing = new StockClass();
passing.stock = stock.getText();
passing.qty = Integer.parseInt(qty.getText());
passing.pp = Double.parseDouble(purchasePrice.getText());
passing.cp = Double.parseDouble(currentPrice.getText());
stockModel.addElement(passing);
stockList.setModel(stockModel);
StockBackEnd sh = new StockBackEnd();
sh.ClearInput();
stock.setText(sh.GetStockName());
qty.setText(String.valueOf(sh.GetQTY()));
purchasePrice.setText(String.valueOf(sh.GetPP()));
currentPrice.setText(String.valueOf(sh.GetCP()));
}
}
}
在此处输入数据:
数据应该显示在这里:
您需要将包含 JList 的 JScrollPane 添加到您的 GUI。您的代码不会那样做,因此列表永远不会显示。是的,您有执行此操作的代码,但它位于一个 if 块中,该块的代码在 if 条件保证为假时仅调用一次。因此,无论模型的大小如何,要么摆脱 if 块并调用该代码,要么在您的动作侦听器中包含交换代码,以便多次调用它。另请注意,使用 CardLayout 进行交换会更好也更容易。
此外,您还需要在程序启动时将您的模型添加到 JList 一次。
我在 Java 程序中有两个选项卡。一个用于添加股票,另一个用于列出我创建的股票。当我在第二个选项卡中添加新项目时,我试图设法更新第一个选项卡中的项目列表。有任何想法吗?
我希望第一个选项卡显示我在第二个选项卡中创建的项目列表...
public class StocksGUI extends javax.swing.JFrame {
private JTextField stock, qty, purchasePrice, currentPrice;
private JButton addStockButton;
private JList<StockClass> stockList;
private DefaultListModel<StockClass> stockModel;
public StocksGUI()
{
super("Portfolio Management");
stock = new JTextField();
qty = new JTextField();
purchasePrice = new JTextField();
currentPrice = new JTextField();
addStockButton = new JButton("Add Stock");
stockList = new JList<>();
stockModel = new DefaultListModel<StockClass>();
JTabbedPane tab =new JTabbedPane();
JPanel p2 = new JPanel();
if(stockModel.size() > 1)
{
stockList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
p2.add(new JScrollPane(stockList));
}
else
{
p2.add(new JLabel("Currently No Stocks"));
tab.addTab("List",null, p2, " Panel #2");
}
JPanel p1 = new JPanel(new GridLayout(5,2));
p1.add(new JLabel("Stock"));
p1.add(stock);
p1.add(new JLabel("Quantity"));
p1.add(qty);
p1.add(new JLabel("Purchase Price"));
p1.add(purchasePrice);
p1.add(new JLabel("Current price"));
p1.add(currentPrice);
p1.add(addStockButton);
tab.addTab("Add Stock",null, p1," Panel #1");
add(tab);
TickerAdd ta = new TickerAdd();
TickerAdd.StockADD stad = ta.new StockADD();
addStockButton.addActionListener(stad);
}
public class TickerAdd
{
public class StockADD implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
StockClass passing = new StockClass();
passing.stock = stock.getText();
passing.qty = Integer.parseInt(qty.getText());
passing.pp = Double.parseDouble(purchasePrice.getText());
passing.cp = Double.parseDouble(currentPrice.getText());
stockModel.addElement(passing);
stockList.setModel(stockModel);
StockBackEnd sh = new StockBackEnd();
sh.ClearInput();
stock.setText(sh.GetStockName());
qty.setText(String.valueOf(sh.GetQTY()));
purchasePrice.setText(String.valueOf(sh.GetPP()));
currentPrice.setText(String.valueOf(sh.GetCP()));
}
}
}
在此处输入数据:
数据应该显示在这里:
您需要将包含 JList 的 JScrollPane 添加到您的 GUI。您的代码不会那样做,因此列表永远不会显示。是的,您有执行此操作的代码,但它位于一个 if 块中,该块的代码在 if 条件保证为假时仅调用一次。因此,无论模型的大小如何,要么摆脱 if 块并调用该代码,要么在您的动作侦听器中包含交换代码,以便多次调用它。另请注意,使用 CardLayout 进行交换会更好也更容易。
此外,您还需要在程序启动时将您的模型添加到 JList 一次。