Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 表未添加到操作面板_Java_Jtable_Action - Fatal编程技术网

Java 表未添加到操作面板

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

我有一个Jtable,我想在触发MenuItem时将其添加到主JFrame中,但问题是它不会显示

如果我从一开始就将表添加到面板,它会显示,但我需要它在操作发生时显示

下面是创建框架的主要类(我删除了一些不需要发布的项目,如创建菜单栏、菜单等):

以下是table类:

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