swing 如何覆盖一个组件
swing how to override a component
我没有找到合适的标题我想对此感到抱歉,
正如你将在底部看到的那样,我已调用
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
3 次,如果我单击 typeButton,然后单击 unitButton,它会在屏幕上生成 2 table。我想 table 每个按钮都被点击,我该怎么做。
private class searchListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
JButton clickd = (JButton)e.getSource();
if (clickd==typeButton)
{
try
{
SwingUtilities.updateComponentTreeUI(ssframe);
showTable1("type",typefield.getText());
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
}catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null,"Error Code = 0112");
}
}
else if (clickd==unitButton)
{
try
{
SwingUtilities.updateComponentTreeUI(frame);
showTable1("unit",unitfield.getText());
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
}catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null,"Error Code = 0112");
}
}
else if (clickd==priceButton)
{
try
{
SwingUtilities.updateComponentTreeUI(frame);
showTable3("price",Integer.parseInt(pricefield.getText()));
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
}catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null,"Error C0de = 0112");
}
}
}
编辑 : 它可能会帮助我解决问题的人 :
model.setRowCount(0);
model.fireTableDataChanged();
有多种方法可以做到这一点。
- 您可以维护对
JScrollPane
的引用并使用 setViewportView
替换它的视图,提供您想要显示的 table。 JScrollPane
将保留在框架上
- (最好)更新 table 的 table 模型,这将替换内容并更新 UI...这意味着
JScrollPane
和JTable
将作为单一参考进行维护,然后您只需更改模型即可。
- 另一种解决方案可能是使用
CardLayout
,这样您就可以根据需要切换视图
- 一个非常非常糟糕的主意是在添加新组件之前删除之前添加的组件...
我没有找到合适的标题我想对此感到抱歉,
正如你将在底部看到的那样,我已调用
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
3 次,如果我单击 typeButton,然后单击 unitButton,它会在屏幕上生成 2 table。我想 table 每个按钮都被点击,我该怎么做。
private class searchListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
JButton clickd = (JButton)e.getSource();
if (clickd==typeButton)
{
try
{
SwingUtilities.updateComponentTreeUI(ssframe);
showTable1("type",typefield.getText());
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
}catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null,"Error Code = 0112");
}
}
else if (clickd==unitButton)
{
try
{
SwingUtilities.updateComponentTreeUI(frame);
showTable1("unit",unitfield.getText());
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
}catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null,"Error Code = 0112");
}
}
else if (clickd==priceButton)
{
try
{
SwingUtilities.updateComponentTreeUI(frame);
showTable3("price",Integer.parseInt(pricefield.getText()));
ssframe.add(new JScrollPane(table),BorderLayout.CENTER);
}catch(Exception a)
{
a.printStackTrace();
JOptionPane.showMessageDialog(null,"Error C0de = 0112");
}
}
}
编辑 : 它可能会帮助我解决问题的人 :
model.setRowCount(0);
model.fireTableDataChanged();
有多种方法可以做到这一点。
- 您可以维护对
JScrollPane
的引用并使用setViewportView
替换它的视图,提供您想要显示的 table。JScrollPane
将保留在框架上 - (最好)更新 table 的 table 模型,这将替换内容并更新 UI...这意味着
JScrollPane
和JTable
将作为单一参考进行维护,然后您只需更改模型即可。 - 另一种解决方案可能是使用
CardLayout
,这样您就可以根据需要切换视图 - 一个非常非常糟糕的主意是在添加新组件之前删除之前添加的组件...