[英]How do I get an instance of a class that extends a JPanel to display in another classes JPanel?
收入面板顯示在 IncomeAndSpendingPanel 內,但如果我將所有收入面板代碼移動到它自己的類中(就像我使用 SpendingPanel 和 TransactionAdder 一樣)並嘗試將它們添加到 IncomeAndSpendingPanel 中,這樣就不會顯示任何內容。 我只是想清理我的代碼並將其分成不同的部分。
public class IncomeAndSpendingPanel extends JPanel {
private ColorX cx = new ColorX();
DefaultTableModel incomeTableModel;
DefaultTableModel spendingTableModel;
private String[] incomeColumnHeadings = {"Date","Description","Amount"};
private String[] spendingColumnHeadings = {"Date","Description","Amount","Category"};
Border empty = BorderFactory.createEmptyBorder(10, 10, 10, 10);
Border blackLine = BorderFactory.createLineBorder(Color.black);
CompoundBorder line = new CompoundBorder(empty, blackLine);
public IncomeAndSpendingPanel() {
setLayout(new BorderLayout());
add(new TransactionAdder(), BorderLayout.NORTH);
add(new SpendingPanel(), BorderLayout.EAST);
JPanel incomePanel;
Border incomePanelBorder = BorderFactory.createTitledBorder(line, "INCOME");
JTable incomeTransactionInputTable;
incomePanel = new JPanel(new GridLayout());
incomePanel.setBorder(incomePanelBorder);
incomeTableModel = new DefaultTableModel(50, incomeColumnHeadings.length);
incomeTableModel.setColumnIdentifiers(incomeColumnHeadings);
incomeTransactionInputTable = new JTable(incomeTableModel);
incomeTransactionInputTable.getColumnModel().getColumn(0).setPreferredWidth(1);
incomeTransactionInputTable.getColumnModel().getColumn(1).setPreferredWidth(200);
incomeTransactionInputTable.getColumnModel().getColumn(2).setPreferredWidth(10);
incomePanel.add(new JScrollPane(incomeTransactionInputTable));
add(incomePanel, BorderLayout.CENTER);
}
這是我為 TransactionAdder 構建的類,當我嘗試將它添加到 IncomeAndSpendingPanel 時沒有任何顯示,我嘗試創建一個 TransactionAdder transactionAdder = new TransactionAdder(); 然后像這樣添加 TransactionAdder 的實例
add(transactionAdder, BorderLayout.NORTH);
但是 IncomeAndSpendingPanel 上也沒有任何顯示
public class TransactionAdder extends JPanel {
DefaultTableModel model3;
DefaultTableModel model4;
private String[] incomeColumnHeadings = {"Date","Description","Amount"};
private String[] spendingColumnHeadings = {"Date","Description","Amount","Category"};
Border empty = BorderFactory.createEmptyBorder(10, 10, 10, 10);
Border blackLine = BorderFactory.createLineBorder(Color.black);
CompoundBorder line = new CompoundBorder(empty, blackLine);
JTable incomeTransactionTable;
JTable spendingTransactionTable;
JPanel transactionAdderPanel;
Border transactionAdderPanelBorder = BorderFactory.createTitledBorder(line, "ADD TRANSACTION");
JScrollPane jScrollPane;
JScrollPane jScrollPane1;
public TransactionAdder() {
transactionAdderPanel = new JPanel(new GridLayout());
transactionAdderPanel.setBorder(transactionAdderPanelBorder);
model3 = new DefaultTableModel(1, incomeColumnHeadings.length);
model3.setColumnIdentifiers(incomeColumnHeadings);
model4 = new DefaultTableModel(1, spendingColumnHeadings.length);
model4.setColumnIdentifiers(spendingColumnHeadings);
transactionAdderPanel.add(new JButton("Add New Income"));
incomeTransactionTable = new JTable(model3);
jScrollPane = new JScrollPane(incomeTransactionTable);
jScrollPane.setPreferredSize(new Dimension(300, 38));
transactionAdderPanel.add(jScrollPane);
transactionAdderPanel.add(new JButton("Add New Spending"));
spendingTransactionTable = new JTable(model4);
jScrollPane1 = new JScrollPane(spendingTransactionTable);
jScrollPane1.setPreferredSize(new Dimension(300, 38));
transactionAdderPanel.add(jScrollPane1);
}
}
這里有很多話要說……首先,您可能需要使用 JFrame,因此請在此處閱讀有關頂級容器的信息。
此外,由於您使用的是繼承,因此您肯定需要將所有這些基類方法調用移動到一個方法中,並且僅使用構造函數來初始化實例變量。 如果不這樣做,則在創建任何 JPanel 對象時可能會遇到各種問題,因為在初始化期間您有可覆蓋的方法調用。
但是,當您添加incomePanel
和TransactionAdder
.setVisible(true)
IncomeAndSpendingPanel
設置為.setVisible(true)
IncomeAndSpendingPanel
設置為任何大小(使用Dimension
類)請讓那些包含在 JFrame 中並更改您的代碼以使其看起來更像這樣:
class IncomeAndSpendingPanel extends JFrame
{
//Instance variables
public IncomeAndSpendingPanel()
{
//initialize instance variables
createAndShowGui();
}
private void createAndShowGui()
{
//Your code
this.setVisible(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.