公告
财富商城
积分规则
提问
发文
2019-03-28 10:58发布
相关推荐>>
Is it possible to add a button to a tabbed pane like in firefox.
The plus-button is what I want.
Thanks
I have tried several solutions and came with this one:
import java.awt.Dimension; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; public class TestTab { public static void main(String[] args) { JFrame parent = new JFrame(); final JTabbedPane tabEntity = new JTabbedPane(); tabEntity.addTab("Details", null, new JScrollPane()); tabEntity.addTab("Context", null, new JScrollPane()); tabEntity.addTab("", null, new JScrollPane()); addButtonToTab(tabEntity); parent.add(tabEntity); parent.setSize(new Dimension(400, 200)); parent.setVisible(true); } public static void addButtonToTab(final JTabbedPane tabEntity) { tabEntity.setTabComponentAt(tabEntity.getTabCount() - 1, new JButton( "+")); } }
So you have:
Write Following Code in Default Constructor Of Class
JPanel panel = new JPanel(); tabbedPane.addTab("Welcome", null, panel, null); tabbedPane.addTab(" + ", null, panel1, null); tabbedPane.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent evt) { JTabbedPane tabbedPane = (JTabbedPane)evt.getSource(); if(tabbedPane.getSelectedIndex() == tabbedPane.indexOfTab(" + ")) { createTab(); } } });
And Create Method to declare and initialized int tab2 = 2; at Starting of main class. Its Worked.
int tab2 = 2;
private void createTab() { tabbedPane.addTab("New Tab",new Panel()); tabbedPane.addTab(" + ",null,panel1,null); tabbedPane.setSelectedIndex(tab2); tab2++; }
You can try this:
public static void main (String[] args) { JFrame parent = new JFrame (); final JTabbedPane pane = new JTabbedPane (); pane.addTab ("test", null); FlowLayout f = new FlowLayout (FlowLayout.CENTER, 5, 0); // Make a small JPanel with the layout and make it non-opaque JPanel pnlTab = new JPanel (f); pnlTab.setOpaque (false); // Create a JButton for adding the tabs JButton addTab = new JButton ("+"); addTab.setOpaque (false); // addTab.setBorder (null); addTab.setContentAreaFilled (false); addTab.setFocusPainted (false); addTab.setFocusable (false); pnlTab.add (addTab); pane.setTabComponentAt (pane.getTabCount () - 1, pnlTab); ActionListener listener = new ActionListener () { @Override public void actionPerformed (ActionEvent e) { String title = "Tab " + String.valueOf (pane.getTabCount () - 1); pane.addTab (title, new JLabel (title)); } }; addTab.setFocusable (false); addTab.addActionListener (listener); pane.setVisible (true); parent.add (pane); parent.setSize (new Dimension (400, 200)); parent.setVisible (true); }
I think you should be able to manage it by building your own JTabbedPaneUI and setting it on the JTabbedPane using setUI.
JTabbedPaneUI
JTabbedPane
setUI
Your ComponentUI has methods to get a hold of the accessible children. If you specify a JButton and a JLabel then you may be in business.
ComponentUI
JButton
JLabel
I haven't attempted this myself though. This is "at your own risk" :)
最多设置5个标签!
I have tried several solutions and came with this one:
So you have:
Write Following Code in Default Constructor Of Class
And Create Method to declare and initialized
int tab2 = 2;
at Starting of main class. Its Worked.You can try this:
I think you should be able to manage it by building your own
JTabbedPaneUI
and setting it on theJTabbedPane
usingsetUI
.Your
ComponentUI
has methods to get a hold of the accessible children. If you specify aJButton
and aJLabel
then you may be in business.I haven't attempted this myself though. This is "at your own risk" :)