Java 表未添加到操作面板
我有一个Jtable,我想在触发MenuItem时将其添加到主JFrame中,但问题是它不会显示 如果我从一开始就将表添加到面板,它会显示,但我需要它在操作发生时显示 下面是创建框架的主要类(我删除了一些不需要发布的项目,如创建菜单栏、菜单等): 以下是table类:Java 表未添加到操作面板,java,jtable,action,Java,Jtable,Action,我有一个Jtable,我想在触发MenuItem时将其添加到主JFrame中,但问题是它不会显示 如果我从一开始就将表添加到面板,它会显示,但我需要它在操作发生时显示 下面是创建框架的主要类(我删除了一些不需要发布的项目,如创建菜单栏、菜单等): 以下是table类: package gestiune; import javax.swing.*; import java.awt.*; public class ListaAngajati extends JPanel { JTable
package gestiune;
import javax.swing.*;
import java.awt.*;
public class ListaAngajati extends JPanel {
JTable tabel;
JScrollPane panouScroll;
public ListaAngajati() {
panouScroll = new JScrollPane(tabel);
String[] numeCol = {
"Nume",
"Prenume",
"Categorie",
"Data Adaugare",
"Ultima Modificare"
};
Object[][] linii = {
{"verban","adrian","sds","16-03-1989","acum"}
};
tabel = new JTable(linii,numeCol);
setLayout(new BorderLayout());
add(tabel.getTableHeader(), BorderLayout.PAGE_START);
add(panouScroll);
add(tabel);
}
}
我尝试过几种方法,比如在ActionEvent上使用repaint,或者直接在table类中使用……而如果我添加lang=new ListaAngajati();PANOUPRIC.add(朗)代码>直接进入主jframe构造函数就可以了,从动作开始就不行了,所以我已经没有选择了,所以有人能帮我一下吗?如果你revalidate()
和repaint()
可以了。在运行时添加组件后,应始终revalidate()
和repaint()
@Override
public void actionPerformed(ActionEvent e){
lang=new ListaAngajati();
panouPrinc.add(lang);
panouPrinc.revalidate();
panouPrinc.repaint();
}
也没有按钮可以点击,所以我在这里添加了一个按钮,并添加了动作
Container cp=getContentPane();
JButton button = new JButton(new ActListaAng("Action"));
button.setText("Open");
cp.add(button, BorderLayout.PAGE_START);
cp.add(panouPrinc);
pack();
很好
作为旁注,您确实需要阅读关于静态
的教程。您完全过度和不必要地使用它。调用updateUI()或repaint()或revalidate();随着表的添加,但UI没有得到刷新。//全局声明
private Vector<Vector<String>> data; //used for data from database
private Vector<String> header; //used to store data header
private int count=0;
专用矢量数据//用于数据库中的数据
专用向量头//用于存储数据头
私有整数计数=0;
//在表单加载时仅显示标题
//create header for the table
header = new Vector<String>();
header.add("Column1");
header.add("Column2");
...
model=new DefaultTableModel(data,header);
table = new JTable(model);
//为表创建标题
header=新向量();
标题。添加(“第1列”);
标题。添加(“第2列”);
...
模型=新的DefaultTableModel(数据,标题);
表=新JTable(型号);
//在actionPerformed()中
public void actionPerformed(ActionEvent ae){
如果(ae.getSource()==yourMenuItem){
data=get();
对于(int i=0;我感谢你的旁注,这是一个教员项目,我正在尽可能快地完成它,并将通过静态教程。有趣的是……我刚刚发现了一个与此类似的老项目……在那里我得到了所有需要的帮助,我以为我从我的机器上删除了该项目,但它一直存在……我的记忆力太差了。对不起,很难选择哪个答案被接受。谢谢你的回答。谢谢你的提示,我会调查的,尽管你看到我的问题是关于表格没有显示,我不能接受你的答案。你如何获得计数值?除了做另一个查询之外?计数值在get中计算()
//create header for the table
header = new Vector<String>();
header.add("Column1");
header.add("Column2");
...
model=new DefaultTableModel(data,header);
table = new JTable(model);
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==yourMenuItem){
data=get();
for(int i=0;i<count;i++){
Object[] d={data.get(i).get(0),data.get(i).get(1),data.get(i).get(2)};
model.addRow(d);
}
}
}
get(){
Vector<Vector<String>> doublevector = new Vector<Vector<String>>();
Connection conn = dbConnection();//Your Database connection code
PreparedStatement pre1 = conn.prepareStatement("select * from Table");
ResultSet rs1 = pre1.executeQuery();
while(rs1.next())
{
Vector<String> singlevector = new Vector<String>();
singlevector.add(rs1.getString(1));
singlevector.add(rs1.getString(2));
....
doublevector.add(singlevector);
count++
}
return doublevector;
}