当前位置: 首页 > 知识库问答 >
问题:

我可以在JEditorPane上方但在JTabbedPane下方获得一个JTextField吗?

贺经纶
2023-03-14

我正在做一个简单的网页浏览器,有标签。我在tabbedpane下面添加一个文本字段遇到了很多麻烦,就像在Chrome中一样。以下是我目前所拥有的:公共类浏览器{私有JFrame框架;private JPanel PanelTop;专用JEditorPane编辑器;专用JScrollPane滚动;专用JTextField字段;专用JButton按钮;私有JButton主页;私有URL;private JMenu file=新建JMenu(“file”);private JMenuItem exit=new JMenuItem(“exit”);private JMenuBar menuBar=new JMenuBar();private ImageIcon nt=new ImageIcon(“./icons/newtab.jpg”);private ImageIcon cl=新ImageIcon(“./icons/close.png”);private JButton newTab=new JButton(cl);private JTabbedPane tabbedPane=new JTabbedPane();private int tabCounter=0;专用维度dim=新维度(Nt.GetIconWidth()+2,NT.GetIconHeight()+2);公共浏览器(){initComponents();

    frame = new JFrame();
    frame.setTitle("TeslaNet Browser");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800,600);

    frame.setJMenuBar(menuBar);
    menuBar.add(file);
    file.add(exit);

    exit.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            System.exit(0);
        }
    });

    panelTop = new JPanel();
    frame.add(BorderLayout.NORTH, panelTop);
    panelTop.add(field);
    panelTop.add(button);
    panelTop.add(home);
    panelTop.add(newTab);

    newTab.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {
            initComponents();
        }
    });
    newTab.setToolTipText("New Tab");
    newTab.setPreferredSize(dim);

    JPanel topPanel = new JPanel();
    topPanel.setLayout(new BorderLayout());
    frame.add(topPanel);
    topPanel.add(tabbedPane, BorderLayout.CENTER);

    panelTop.add(scroll, BorderLayout.CENTER);
    frame.setVisible(true);
}
private void initComponents()
{
    try
    {
        url = new URL("http://www.reddit.com");
    }
    catch(MalformedURLException mal)
    {
        JOptionPane.showMessageDialog(null,mal);
    }

    try
    {
        editor = new JEditorPane(url);
        editor.setEditable(false);
    }
    catch(IOException ioe)
    {
        JOptionPane.showMessageDialog(null,ioe);
    }

    scroll = new JScrollPane(editor, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
            JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

    field = new JTextField(14);

    SwingUtilities.invokeLater(new Runnable()
    {
       public void run()
       {
           field.setText(url.toString());
       }
    });

    button = new JButton("Go");
    button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            try
            {
                editor.setPage(field.getText());
            }

            catch(IOException ioe)
            {
                JOptionPane.showMessageDialog(null, ioe);
            }
        }
    });

    home = new JButton("Home");
    home.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            try
            {
                url = new URL("http://www.thissongissick.com");
                field.setText(url.toString());
            }

            catch(MalformedURLException mal)
            {
                JOptionPane.showMessageDialog(null,mal);
            }

            try
            {
                editor.setPage(field.getText());
            }

            catch(IOException ioe)
            {
                JOptionPane.showMessageDialog(null, ioe);
            }
        }
    });        
    JPanel tab = new JPanel();

    JButton closeButton = new JButton(nt);
    closeButton.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            tabbedPane.remove(tabbedPane.getTabCount()-1);
        }
      });
    closeButton.setPreferredSize(dim);
    closeButton.setToolTipText("Close");


    JLabel tabLabel = new JLabel("Tab " + (++tabCounter));
    System.out.print(tabbedPane.getSelectedIndex());
    tab.setOpaque(false);

    tab.add(tabLabel, BorderLayout.WEST);
    tab.add(closeButton, BorderLayout.EAST);

    tabbedPane.addTab(null, editor);
    tabbedPane.setTabComponentAt(tabbedPane.getTabCount()-1, tab);
}
}

谢谢!

共有1个答案

充普松
2023-03-14

请查看此示例。我不想尝试猜测哪个组件有哪些变量,所以我用了一个类似的例子。你需要做的是把你想要的一切放在一个选项卡中,在选项卡的面板内。所以基本上每个面板都有自己文本字段和编辑器窗格

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Browser1 {
    private JTabbedPane tabbedPane;
    private final JButton add;
    int i = 1;

    public Browser1() {
        tabbedPane = new JTabbedPane();
        tabbedPane.add(new JScrollPane(createTabbedPanel()), "Tab " + i);

        add = new JButton("Add Tab");
        add.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                i++;
                tabbedPane.add(new JScrollPane(createTabbedPanel()), "Tab " + i);
            }
        });

        JFrame frame = new JFrame("Browser");
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
        buttonPanel.add(add);
        frame.add(buttonPanel, BorderLayout.PAGE_START);
        frame.add(tabbedPane);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JPanel createTabbedPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        JTextField field = new JTextField(50);
        JEditorPane pane = new JEditorPane();
        pane.setPreferredSize(new Dimension(700, 500));

        panel.add(field, BorderLayout.NORTH);
        panel.add(pane, BorderLayout.CENTER);
        return panel;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                new Browser1();
            }
        });
    }
}
 类似资料:
  • 问题内容: 加载脚本后,我立即发出Ajax请求以获取一些翻译。自从我在页面底部加载脚本以来,这应该总是在文档准备好之后返回,但是我仍然好奇是否有可能在文档准备就绪状态下获得Deferred Object 。 这样,可以在执行其他任何操作之前确保文档都准备就绪并且Ajax调用成功返回,例如: 问题答案: 您可以使用data()将延迟的对象与文档相关联,然后在处理程序中将它解决()。这样,您应该可以将

  • 问题内容: 正确,我有一个JTabbedPane,它的JPanel包含一个JLabel和一个JTextField。 我的密码 JTabbed Pane声明: 文本字段声明: JLabel:this.channelLabel = new JLabel(“ Channel name:”); this.channelLabel.setSize(150,30); this.channelLabel.set

  • 问题内容: 假设我有一个.class文件,可以获取该类中包含的所有方法吗? 问题答案: 要了解所有方法,请在控制台中使用以下语句: 要么 或例如:

  • 遵循Joshua Bloch的《有效的Java》中使用的风格,并与这个问题的答案一致,我过去在Java SE环境中使用AssertionErrors来表示不应该执行的代码路径。 看看JavaEE,EJB3.1规范说 如果bean方法遇到系统异常或错误,它应该简单地将错误从bean方法传播到容器(即,bean方法不必捕获异常)。 再往下一点,它说在非应用程序异常的情况下必须丢弃相关的EJB实例。据我

  • 我在java中遇到了一个问题,因为我们知道,如果由于某些异常而出现一些代码错误,如果我们不设置try-catch块,我们的代码将无法运行,但有时,我们不知道哪一行会出现问题,例如,这一行 我想知道所有的结果,但正如你所知,变量和可能会出错,因为除以0,程序将在那个时候 当我们执行变量e并在不立即退出程序且不写入块的情况下获得错误时,有没有办法运行其余的代码? 非常感谢。

  • 问题内容: 假设我有类,并且其中的类具有可读和可写的属性: 是否可以只使用该方法而只使用该方法? 问题答案: 不可以,无法分配每个类别的访问权限。 考虑将您的类分为单独的接口,以便每个类仅获得一个具有所需接口的对象。例如: 当然,这涉及安全性,但这应该使您朝正确的方向进行思考。