【问题标题】:Using TextArea in TabbedPane在 TabbedPane 中使用 TextArea
【发布时间】:2012-07-22 02:10:08
【问题描述】:

我在每个选项卡中添加了一个带有 JPanel 的 JTabbedPane。以及每个 JPanel 内的 JText 区域。 可以在同一模板中动态创建选项卡。

还有一个带有菜单的菜单栏。它具有替换字符串出现的选项(例如,将“

现在我已经添加了 tabbedPane,...我不知道如何单独替换活动选项卡的内容,..

我尝试获取选定的组件(getSelectedComponent() 方法和 getComponentAt() 方法)并替换文本,.. 我没有工作

谁能帮帮我

【问题讨论】:

  • 请发帖SSCCE 说明问题。

标签: java swing jtabbedpane jtextcomponent


【解决方案1】:

getSelectedIndex()getSelectedComponent() 应该可以工作。查看How to Use Tabbed Panes 教程,它有很好的例子。

编辑:getSelectedComponentAbstractAction 的演示

import javax.swing.AbstractAction;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

public class TabbedPaneDemo {

    static class TextDemoPanel extends JPanel{
        private JTextArea textArea;

        public TextDemoPanel(String text){
            textArea = new JTextArea(5, 20);
            textArea.setText(text);
            JScrollPane scrollPane = new JScrollPane(textArea);

            add(scrollPane);
        }

        public JTextArea getTextArea() {
            return textArea;
        }
    }

    static class SetTextAction extends AbstractAction {
        private JTabbedPane tabbedPane;

        public SetTextAction(JTabbedPane tabbedPane){
            super("Set text");
            this.tabbedPane = tabbedPane;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            String value = JOptionPane.showInputDialog(tabbedPane, "Text", "New text");
            if (value != null){
                TextDemoPanel panel = (TextDemoPanel)tabbedPane.getSelectedComponent();
                if (panel != null)
                    panel.getTextArea().setText(value);
            }
        }
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("TabbedPaneDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTabbedPane tabbedPane = new JTabbedPane();

        tabbedPane.addTab("Tab 1", new TextDemoPanel("Tab 1 text"));
        tabbedPane.addTab("Tab 2", new TextDemoPanel("Tab 2 text"));
        tabbedPane.addTab("Tab 3", new TextDemoPanel("Tab 3 text"));

        frame.add(tabbedPane, BorderLayout.CENTER);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);
        JMenuItem item = new JMenuItem(new SetTextAction(tabbedPane));

        menu.add(item);

        frame.setJMenuBar(menuBar);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

【讨论】:

  • +1 还可以考虑Action 来封装功能。
  • getSelectedComponent 将返回选项卡的顶级组件。在这个出色的演示中,这将是 JScrollPane。然后,您将不得不自己从中提取 JTextArea
  • @MadProgrammer 在上面的代码中实际上返回TextDemoPanel
  • @Max 对不起,你说的很对 - 3 个月大的宝宝刚把我们叫醒吃早饭:P
  • @MadProgrammer 别担心,希望你能早点回去睡觉 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多