【发布时间】:2015-06-23 08:33:25
【问题描述】:
这是我系统的屏幕,其中列出了 String[] 的 ArrayLists 中可用的 Magazines("revistas") 和 Books("livros"),其中包含 Name、Availability、Code。
一切正常,除了表格显示为空白。
这是我的课,我已经裁剪了变量声明。
底部的函数“listar”用于加载 JTable 的数据。
我也对如何使用有效且美观的面板布局感到困惑,如果有人可以提供一个侧面提示的话。
public class TelaListaDoc extends JPanel {
public TelaListaDoc(Biblioteca biblio) {
this.biblioteca = biblio;
this.inicializado = false;
setLayout(new BorderLayout());
cLayout = new CardLayout();
panelMain = new JPanel();
panelTable = new JPanel(cLayout);
panelRevista = new JPanel();
panelLivro = new JPanel();
String[] nomes = {"Título", "Nº disponíveis", "Código"};
modelLivro = new DefaultTableModel(nomes, 0);
modelRevista = new DefaultTableModel(nomes, 0);
tableRevista = new JTable(modelLivro);
tableLivro = new JTable(modelRevista);
botaoVoltar = new JButton("Voltar");
botaoRevista = new JButton("Revistas");
botaoLivro = new JButton("Livros");
panelRevista.add(new JScrollPane(tableRevista));
panelLivro.add(new JScrollPane(tableLivro));
panelTable.add(panelRevista, "Revista");
panelTable.add(panelLivro, "Livro");
panelTable.setVisible(true);
panelMain.add(botaoRevista);
panelMain.add(botaoLivro);
panelMain.add(panelTable);
panelMain.add(botaoVoltar);
panelMain.setVisible(true);
add(panelMain);
botaoVoltar.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
biblioteca.chamaTelaBiblioteca();
}
});
botaoLivro.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
cLayout.show(panelTable, "Livro");
}
});
botaoRevista.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
cLayout.show(panelTable, "Revista");
}
});
}
public void listar(ArrayList<String[]> livros, ArrayList<String[]> revistas) {
if (!this.inicializado) { //If not initialized, only doing it once.
this.livros = livros;
this.revistas = revistas;
for (String[] livro : this.livros) {
modelLivro.addRow(livro);
}
for (String[] revista : this.revistas) {
modelRevista.addRow(revista);
}
this.inicializado = true;
modelLivro.fireTableDataChanged();
modelRevista.fireTableDataChanged();
panelLivro.setVisible(true);
panelRevista.setVisible(true);
cLayout.show(panelTable, "Revista");
}
}
}
【问题讨论】:
-
你在构造函数中放了太多
-
“如何使用有效且美观的面板布局,如果有人可以提供侧面提示的话。” 你知道什么是“好看的面板”吗? “看起来像?
-
不要使用两个表,而是使用一个表并切换模型,这将允许您取消 CardLayout
-
您遇到的问题是,您将 botaoRevista 和 botaoLivro 添加到 panelMain,这意味着它们不再驻留在 panelTable 中。一个组件只能有一个父容器,当你将一个组件添加到一个新的父容器时,它首先会从当前容器中移除