【发布时间】:2016-02-10 16:37:09
【问题描述】:
如何在 Java 运行时获取 jpanel 的组件。我一直在尝试获取组件以便以它们作为参数执行方法,但我意识到由于某种原因我似乎无法在运行时获取组件。如果您需要更多细节,请告诉我,我只是不想让代码变得多余,因为我认为我可以在不显示的情况下得到答案。但是,如果需要,请告诉我。
public SetupFrame2(int flats, int floors ) {
initComponents();
//Construction of the JTABLE
jPanel1.setLayout(new BorderLayout());
int rows = flats*floors;
JTable tbl = new JTable();
DefaultTableModel dtm = new DefaultTableModel();
String colomnName[] = {"Floor","Flat","Area","View","Vacant"};
dtm.setColumnIdentifiers(colomnName);
for (int count = 1; count <= rows; count++) {
dtm.addRow(new Object[] {"", "", "","",""});
}
tbl.setModel(dtm);
tbl.setPreferredScrollableViewportSize(new Dimension(100,250));
tbl.setFillsViewportHeight(true);
tbl.getTableHeader().setReorderingAllowed(false);
jPanel1.add(new JScrollPane(tbl));
}
*
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
for( Component f : jPanel1.getComponents() ) { //It isnt getting the component on run time,
if(f instanceof JTable){
if(isJTableEmpty((JTable)f) == false){ //isJtable is a function form setupFrame2's superclass and its job so far is to return false, however its not working...
JOptionPane.showMessageDialog(null, "Empty", "Error", JOptionPane.ERROR_MESSAGE);
break;
}
}
}
}
【问题讨论】:
-
请详细说明您的问题并显示您的相关代码,以便我们为您提供更具体的建议。
-
我知道我面临的问题是我没有在运行时创建 jtable...我想知道如何
-
你需要认真思考。 jPanel1 持有什么?一个 JScrollPane,这就是你得到的。是的,如果您使用递归,您可以获得您的 JTable,但您不应该这样做,因为尝试获得 JTable 的引用是一种糟糕且脆弱的方式。将来对程序结构的一个小改动就会破坏它。同样,这只是一个 XY 问题,您应该使用 OOP 技术来解决这个问题,而不是像您正在做的那样使用 kluges。
-
换句话说,这:
jPanel1.getComponents()返回一个数组,其中只有一个 JScrollPane —— 你为什么认为你会得到其他东西?您还直接向 jPanel1 添加了什么? -
我以为它拿着一个jtable。否则我会首先尝试搜索滚动窗格
标签: java swing jpanel runtime jcomponent