动态地向 JTabbedPane 的不同选项卡中的多个 JTextAreas 添加文本?
Adding text to multiple JTextAreas in different tabs of a JTabbedPane dynamically?
因此,我在单击 JTable
单元格时将 JTextArea
动态添加到 JTabbedPane
。我想知道如何动态设置 JTextArea
的文本。我正在考虑尝试使用嵌套在 getComponentAt()
中的 getSelectedIndex()
,但是这个 returns 是 Component
而不是 JTextArea
,所以我将无法 setText()
这样。我想知道我是否需要构建 new JTextArea
的 Array
或 ArrayList
并在每次选择单元格时添加到 Array
或 ArrayList
然后从 getSelectedIndex()
中设置相应的 JTextArea
s 文本。必要的代码如下:
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int row = table.getSelectedRow();
viewerPane.addTab((String) table.getValueAt(row, 0), null , new JPanel().add(new JTextArea()), (String) table.getValueAt(row, 0));
viewerPane.setSelectedIndex(viewerPane.getComponentCount()-1);
}
}
});
您可以使用 Map
以制表符索引为键并以该索引处的 JTextArea
赋值:
Map<Integer, JTextArea> indexToTextArea = new HashMap<>();//Instance variable
....
//in the MouseListener:
JTextArea textArea = new JTextArea();
viewerPane.addTab((String) table.getValueAt(row, 0), null , new JPanel().add(textArea), (String) table.getValueAt(row, 0));
viewerPane.setSelectedIndex(viewerPane.getComponentCount()-1);
indexToTextArea.put(viewerPane.getComponentCount()-1, textArea);
例如,当你想获得当前选中标签索引的JTextArea
时,只需在Map
中查找
JTextArea selectedTextArea = indexToTextArea.get(viewer.getSelectedIndex());
您正在添加:
new JPanel().add(new JTextArea())
作为新标签。
这意味着,getComponentAt()
将 return 完全 您添加的这个 JPanel
。
此 JPanel
是 Component
的类型,包含您的 JTextArea.
你可以做什么(因为这个 JPanel
只 包含 JTextArea
):
//verbose code:
Component cmp = tab.getComponentAt(0 /*index of tab*/);
JPanel pnl = (JPanel)cmp; //cast to JPanel
Component cmp2 = pnl.getComponent(0); //get first child component
JTextArea textArea = (JTextArea)cmp2; //cast to JTextArea
作为辅助方法:
public JTextArea getTextAreaFromTab(JTabbedPane p_tabbedPane, int p_tabIdx)
{
Component cmp = p_tabbedPane.getComponentAt(p_tabIdx /*index of tab*/);
JPanel pnl = (JPanel)cmp; //cast to JPanel
Component cmp2 = pnl.getComponent(0); //get first child component
JTextArea textArea = (JTextArea)cmp2; //cast to JTextArea
return textArea;
}
因此,我在单击 JTable
单元格时将 JTextArea
动态添加到 JTabbedPane
。我想知道如何动态设置 JTextArea
的文本。我正在考虑尝试使用嵌套在 getComponentAt()
中的 getSelectedIndex()
,但是这个 returns 是 Component
而不是 JTextArea
,所以我将无法 setText()
这样。我想知道我是否需要构建 new JTextArea
的 Array
或 ArrayList
并在每次选择单元格时添加到 Array
或 ArrayList
然后从 getSelectedIndex()
中设置相应的 JTextArea
s 文本。必要的代码如下:
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int row = table.getSelectedRow();
viewerPane.addTab((String) table.getValueAt(row, 0), null , new JPanel().add(new JTextArea()), (String) table.getValueAt(row, 0));
viewerPane.setSelectedIndex(viewerPane.getComponentCount()-1);
}
}
});
您可以使用 Map
以制表符索引为键并以该索引处的 JTextArea
赋值:
Map<Integer, JTextArea> indexToTextArea = new HashMap<>();//Instance variable
....
//in the MouseListener:
JTextArea textArea = new JTextArea();
viewerPane.addTab((String) table.getValueAt(row, 0), null , new JPanel().add(textArea), (String) table.getValueAt(row, 0));
viewerPane.setSelectedIndex(viewerPane.getComponentCount()-1);
indexToTextArea.put(viewerPane.getComponentCount()-1, textArea);
例如,当你想获得当前选中标签索引的JTextArea
时,只需在Map
JTextArea selectedTextArea = indexToTextArea.get(viewer.getSelectedIndex());
您正在添加:
new JPanel().add(new JTextArea())
作为新标签。
这意味着,getComponentAt()
将 return 完全 您添加的这个 JPanel
。
此 JPanel
是 Component
的类型,包含您的 JTextArea.
你可以做什么(因为这个 JPanel
只 包含 JTextArea
):
//verbose code:
Component cmp = tab.getComponentAt(0 /*index of tab*/);
JPanel pnl = (JPanel)cmp; //cast to JPanel
Component cmp2 = pnl.getComponent(0); //get first child component
JTextArea textArea = (JTextArea)cmp2; //cast to JTextArea
作为辅助方法:
public JTextArea getTextAreaFromTab(JTabbedPane p_tabbedPane, int p_tabIdx)
{
Component cmp = p_tabbedPane.getComponentAt(p_tabIdx /*index of tab*/);
JPanel pnl = (JPanel)cmp; //cast to JPanel
Component cmp2 = pnl.getComponent(0); //get first child component
JTextArea textArea = (JTextArea)cmp2; //cast to JTextArea
return textArea;
}