20/04/12 14:16
Bonny
Tempo fa avevo lo stesso problema ho trovato questo esempio
(Questo è il codice relativo al button di chiusura)
Quando aggiungo un nuovo tab al JTabbedPane(tabPane)
Tutto ciò funziona.
Comunque mi ha fatto impazzire la gestione di questa cosa...
Se trovi un metodo migliore fammi sapere
(Questo è il codice relativo al button di chiusura)
import java.awt.event.*; import java.io.File; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.plaf.basic.BasicButtonUI; /** * * @author bonny */ public class ButtonTab extends JPanel { private JTabbedPane pane; private JLabel label; public ButtonTab(final JTabbedPane pane) { super(new FlowLayout(FlowLayout.LEFT, 0, 0)); if (pane == null) { throw new NullPointerException("TabbedPane is null"); } this.pane = pane; setOpaque(false); label = new JLabel() { @Override public String getText() { int i = pane.indexOfTabComponent(ButtonTab.this); if (i != -1) { return pane.getTitleAt(i); } return null; } @Override public void setText(String str) { int i = pane.indexOfTabComponent(ButtonTab.this); if (i != -1) { pane.setTitleAt(i, str); } } }; label.setFont(new Font("Arial", Font.PLAIN, 14)); add(label); label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); JButton button = new TabButton(); add(button); setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0)); } private class TabButton extends JButton implements ActionListener { public TabButton() { int size = 17; setPreferredSize(new Dimension(size, size)); setToolTipText("chiudi questo tab"); setUI(new BasicButtonUI()); setContentAreaFilled(false); setFocusable(false); setBorder(BorderFactory.createEtchedBorder()); setBorderPainted(false); addMouseListener(buttonMouseListener); setRolloverEnabled(true); addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { int i = pane.indexOfTabComponent(ButtonTab.this); if (i != -1) { //codice gestione evento click } } @Override public void updateUI() { } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g.create(); if (getModel().isPressed()) { g2.translate(1, 1); } g2.setStroke(new BasicStroke(2)); g2.setColor(Color.BLACK); /* if (getModel().isRollover()) { g2.setColor(Color.red); } * */ int delta = 6; g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1); g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1); g2.dispose(); } } private final static MouseListener buttonMouseListener = new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { Component component = e.getComponent(); if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(true); } } @Override public void mouseExited(MouseEvent e) { Component component = e.getComponent(); if (component instanceof AbstractButton) { AbstractButton button = (AbstractButton) component; button.setBorderPainted(false); } } }; }
Quando aggiungo un nuovo tab al JTabbedPane(tabPane)
//aggiungo un tab tabPane.addTab("nome tab", new JTextArea()); int c = tabPane.getTabCount() - 1; //creo il pulsante ButtonTab bt = new ButtonTab(tabPane); //aggiungo nel tab appena creato tabPane.setTabComponentAt(c, bt); tabPane.setSelectedIndex(c);
Tutto ciò funziona.
Comunque mi ha fatto impazzire la gestione di questa cosa...
Se trovi un metodo migliore fammi sapere
aaa
20/04/12 14:33
Franck
Scusa per farlo partire ci vuole il metodo principale cioè il main, mi potresti fare un esempio.
aaa
20/04/12 18:18
Bonny
public class Main { public static void main(String[] args) { JFrame f = new JFrame(); JTabbedPane tabPane = new JTabbedPane(); tabPane.addTab("nome tab", new JTextArea()); int c = tabPane.getTabCount() - 1; //creo il pulsante ButtonTab bt = new ButtonTab(tabPane); //aggiungo nel tab appena creato tabPane.setTabComponentAt(c, bt); tabPane.setSelectedIndex(c); f.getContentPane().add(tabPane); f.setSize(500,500); f.setVisible(true); } }
aaa
22/04/12 10:26
Franck
Cercando su internet sono riuscito a trovare questo,
terai.xrea.jp/Swing/… ma non ho capito bene come posso andarlo a modificare...
terai.xrea.jp/Swing/… ma non ho capito bene come posso andarlo a modificare...
aaa