我在 JScrollpane 中有一个 JTable。我无权访问 JScrollpane 变量。但我可以访问 JTable。现在如何使用 JTable 访问 JScrollpane。
For Example -> mytable.getAncestor(...) or something?
我在 JScrollpane 中有一个 JTable。我无权访问 JScrollpane 变量。但我可以访问 JTable。现在如何使用 JTable 访问 JScrollpane。
For Example -> mytable.getAncestor(...) or something?
如果您想从您的 JTable 中获取 JScrollPane,请使用
JTable jTable = new JTable(rowData, colData);
JScrollPane scrollPane = new JScrollPane(jTable);
// now you have the ViewPort
JViewport parent = (JViewport)jTable.getParent();
JScrollPane enclosing = (JScrollPane)parent.getParent();
试试下面的代码..
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRootPane;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
/**
*
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
* @version 1.0
*/
public class MainFrame extends JFrame {
private String[][] rowData =
{
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Max", "Mustermann", "Musterhausen"},
{"Petra", "Mustermann", "Musterhausen"}
};
private String[] columnData =
{
"Firstname", "Lastname", "City"
};
private JTable jTable;
public MainFrame() {
jTable = new JTable(rowData, columnData);
jTable.setName("CRM Table");
}
public void createAndShowGui() {
this.setTitle("JTable in JScrollPane");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(new JLabel("CRM System"), BorderLayout.NORTH);
JScrollPane scrollPane = new JScrollPane(jTable);
this.getContentPane().add(scrollPane, BorderLayout.CENTER);
this.setSize(new Dimension(1024, 768));
this.setVisible(true);
Container parent = jTable.getParent().getParent();
JScrollPane enclosing = (JScrollPane)parent;
parent.remove(jTable);
parent.add(new JLabel("Test"));
// System.out.println(enclosing.getClass().getSimpleName());
}
}
帕特里克
假设 JTable 像往常一样放置在 JScrollPane 内:
JTable table = ...;
JScrollPane scrollPane = new JScrollPane(table);
您可以通过使用 getParent() 来获取视口并在视口上使用 getParent() 来获取滚动窗格来访问包装表格的滚动窗格。
JScrollPane enclosingScrollPane = (JScrollPane) table.getParent().getParent()
在最坏的情况下,如果由于某种原因不确定表格是否在滚动窗格内,则必须在转换之前检查表格父组件的 instanceof。