public class MyTableModel extends AbstractTableModel{
JComboBox box;
public MyTableModel(JComboBox choice){
super();
box = choice;
}
public void updateTable(){
this.fireTableStructureChanged();
}
@Override
public int getColumnCount() {
//implemented
}
@Override
public int getRowCount() {
//implemented
}
@Override
public Object getValueAt(int row, int col) {
//implemented
}
choice5是一个JComboBox
table1 = new JTable(new MyTableModel(choice5));
从choice5中选择项目时
((MyTableModel)table1.getModel()).updateTable();
被称为(编辑:对于我可以选择的每个项目,我可能有一个不同的jtable我想要显示)
编辑(SSCCE):
import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTable;
public class TestTableModel extends JFrame {
static JComboBox<String> choice5 = new JComboBox<String>(new String[]{"","1","2","3"});
static JTable table1 = new JTable(new MyTableModel(choice5));
static JFrame frame = new JFrame();
public static void main(String[] args) {
frame.setLayout(new BorderLayout());
choice5.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
((MyTableModel)table1.getModel()).updateTable();
frame.pack();
}}});
frame.add(BorderLayout.SOUTH, choice5);
frame.add(BorderLayout.CENTER, table1);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
MyTableModel
import javax.swing.JComboBox;
import javax.swing.table.AbstractTableModel;
public class MyTableModel extends AbstractTableModel{
JComboBox box;
public MyTableModel(JComboBox choice){
super();
box = choice;
}
public void updateTable(){this.fireTableStructureChanged();}
@Override
public int getColumnCount() {return box.getSelectedIndex();}
@Override
public int getRowCount() { return box.getSelectedIndex();}
@Override
public Object getValueAt(int row, int col) {return box.getSelectedItem();}
}
表结构是行、列和列头。表格数据显示在单元格中。
>
尝试使用FireTableRowsupDated
:
public void updateTable(){this.fireTableRowsUpdated(0, this.getRowCount() - 1);}
尝试使用SetModel
并使用EventQueue
确保您的代码在UI线程上执行:
choice5.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange() == ItemEvent.SELECTED) {
EventQueue.invokeLater(() -> {
table1.setModel(new MyTableModel(choice5));
frame.pack();
});
}}});
在JScrollPane
中尝试您的JTable
。它们之间有魔力,就像巧克力和花生酱:
frame.add(BorderLayout.SOUTH, choice5);
frame.add(BorderLayout.CENTER, new JScrollPane(table1));
火化的
来源:Oracle
可燃烧的结构改变的
public void fireTableStructureChanged()
我有这样的Jpa存储库:
我是java新手,所以请不要后悔java中的对象和东西正在传递引用的值,但下面是我试图传递对象的代码。当我通过传递到函数中更新值时,a的值没有改变。发生了什么请帮助我。。。
问题内容: 我有如下代码: 但是,不是在每次调用setText时在循环的每次迭代后更新文本区域,而是仅在完成所有任务运行后才更新文本。为什么会发生这种情况,我该如何解决? 问题答案: 您可能正在使用Swing线程,该线程正在等待代码执行才能更新UI。尝试为该循环使用单独的线程。
与其他包管理器(如)相比,我发现当更新与给定项目相关的包时,有一种奇怪的行为。 还根据留档,和选项 根据composer.json将依赖项升级到最新版本,并更新composer.lock文件。 事实上,正确地更新了新的包版本号。但是没有被修改,并且列出了旧的版本过低的包。 为什么会发生这种情况?是我做错了什么,还是这就是应该怎么做的?如果是这样的话,为什么两个文件中的一个是最新的,而另一个不是最新
我通过使用map函数迭代来显示我的状态,这是一个数组。此外,我有一个按钮,在点击反转数组。 我认为我想做什么是相当明显的。但这对我不起作用,我不知道为什么。我必须单击两次来完成第一次还原,出现了奇怪的情况,即呈现的数组和Chrome中React开发工具在组件状态中显示的数组不匹配。 我无法解释这种行为。我开始认为这与我从道具中获得阵列有关,但我真的不知道。有什么想法吗?