我正在开发一个带标签的简单网页浏览器。我在tabbedpane下方添加一个文本字段时遇到了很多麻烦,就像在chrome中一样。以下是我到目前为止的情况: 公共类浏览器 { 私有JFrame框架; 私人JPanel panelTop; 私人JEditorPane编辑; 私有JScrollPane滚动; 私有JTextField字段; 私人JButton按钮; 私人JButton家; 私人网址网址; private JMenu file = new JMenu(“File”); private JMenuItem exit = new JMenuItem(“Exit”); private JMenuBar menuBar = new JMenuBar(); private ImageIcon nt = new ImageIcon(“./ Icons / newTab.jpg”); private ImageIcon cl = new ImageIcon(“./ Icons / close.png”); 私人JButton newTab =新JButton(cl); private JTabbedPane tabbedPane = new JTabbedPane(); private int tabCounter = 0; private Dimension dim = new Dimension(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);
}
}
谢谢!
答案 0 :(得分:1)
查看此示例。我不想尝试猜测哪个变量适用于哪个组件,所以我想到了一个类似的例子。您需要做的是将所需的所有内容放在选项卡中,在选项卡的面板中。所以基本上每个面板都有自己的文本字段和编辑器窗格
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();
}
});
}
}