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 を確認する必要があります。