Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - JTabbedPane
Forum - Java - JTabbedPane

Avatar
Franck (Normal User)
Rookie


Messaggi: 43
Iscritto: 06/07/2010

Segnala al moderatore
Postato alle 15:59
Venerdì, 20/04/2012
Salve a tutti, sto creando un programma che contiene alcune schede vorrei sapere alcune informazioni.

a)Come posso mettere sulla scheda una specie di x che servirebbe per uscire dalla scheda?
b)Come posso intercettare l'evento di chiusura della scheda?
8-)

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 16:16
Venerdì, 20/04/2012
Tempo fa avevo lo stesso problema ho trovato questo esempio
(Questo è il codice relativo al button di chiusura)
Codice sorgente - presumibilmente Java

  1. import java.awt.event.*;
  2. import java.io.File;
  3. import javax.swing.*;
  4. import javax.swing.filechooser.FileNameExtensionFilter;
  5. import javax.swing.plaf.basic.BasicButtonUI;
  6.  
  7. /**
  8.  *
  9.  * @author bonny
  10.  */
  11. public class ButtonTab extends JPanel {
  12.  
  13.     private JTabbedPane pane;
  14.     private JLabel label;
  15.  
  16.    
  17.     public ButtonTab(final JTabbedPane pane) {
  18.  
  19.         super(new FlowLayout(FlowLayout.LEFT, 0, 0));
  20.         if (pane == null) {
  21.             throw new NullPointerException("TabbedPane is null");
  22.         }
  23.         this.pane = pane;
  24.         setOpaque(false);
  25.  
  26.  
  27.         label = new JLabel() {
  28.  
  29.             @Override
  30.             public String getText() {
  31.                 int i = pane.indexOfTabComponent(ButtonTab.this);
  32.                 if (i != -1) {
  33.                     return pane.getTitleAt(i);
  34.                 }
  35.                 return null;
  36.             }
  37.  
  38.             @Override
  39.             public void setText(String str) {
  40.                 int i = pane.indexOfTabComponent(ButtonTab.this);
  41.                 if (i != -1) {
  42.                     pane.setTitleAt(i, str);
  43.                 }
  44.             }
  45.         };
  46.  
  47.         label.setFont(new Font("Arial", Font.PLAIN, 14));
  48.         add(label);
  49.         label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
  50.         JButton button = new TabButton();
  51.         add(button);
  52.         setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
  53.  
  54.     }
  55.  
  56.  
  57.     private class TabButton extends JButton implements ActionListener {
  58.  
  59.         public TabButton() {
  60.             int size = 17;
  61.             setPreferredSize(new Dimension(size, size));
  62.             setToolTipText("chiudi questo tab");
  63.             setUI(new BasicButtonUI());
  64.             setContentAreaFilled(false);
  65.             setFocusable(false);
  66.             setBorder(BorderFactory.createEtchedBorder());
  67.             setBorderPainted(false);
  68.             addMouseListener(buttonMouseListener);
  69.             setRolloverEnabled(true);
  70.             addActionListener(this);
  71.         }
  72.  
  73.         @Override
  74.         public void actionPerformed(ActionEvent e) {
  75.             int i = pane.indexOfTabComponent(ButtonTab.this);
  76.             if (i != -1) {
  77.                 //codice gestione evento click
  78.             }
  79.         }
  80.  
  81.         @Override
  82.         public void updateUI() {
  83.         }
  84.  
  85.         @Override
  86.         protected void paintComponent(Graphics g) {
  87.             super.paintComponent(g);
  88.             Graphics2D g2 = (Graphics2D) g.create();
  89.  
  90.             if (getModel().isPressed()) {
  91.                 g2.translate(1, 1);
  92.             }
  93.             g2.setStroke(new BasicStroke(2));
  94.             g2.setColor(Color.BLACK);
  95.             /*
  96.             if (getModel().isRollover()) {
  97.             g2.setColor(Color.red);
  98.             }
  99.              *
  100.              */
  101.             int delta = 6;
  102.             g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1);
  103.             g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1);
  104.             g2.dispose();
  105.         }
  106.     }
  107.     private final static MouseListener buttonMouseListener = new MouseAdapter() {
  108.  
  109.         @Override
  110.         public void mouseEntered(MouseEvent e) {
  111.             Component component = e.getComponent();
  112.             if (component instanceof AbstractButton) {
  113.                 AbstractButton button = (AbstractButton) component;
  114.                 button.setBorderPainted(true);
  115.             }
  116.         }
  117.  
  118.         @Override
  119.         public void mouseExited(MouseEvent e) {
  120.             Component component = e.getComponent();
  121.             if (component instanceof AbstractButton) {
  122.                 AbstractButton button = (AbstractButton) component;
  123.                 button.setBorderPainted(false);
  124.             }
  125.         }
  126.     };
  127. }



Quando aggiungo un nuovo tab al JTabbedPane(tabPane)
Codice sorgente - presumibilmente Java

  1. //aggiungo un tab
  2.         tabPane.addTab("nome tab", new JTextArea());
  3.         int c = tabPane.getTabCount() - 1;
  4.         //creo il pulsante
  5.         ButtonTab bt = new ButtonTab(tabPane);
  6.         //aggiungo nel tab appena creato
  7.         tabPane.setTabComponentAt(c, bt);
  8.         tabPane.setSelectedIndex(c);


Tutto ciò funziona.
Comunque mi ha fatto impazzire la gestione di questa cosa...
Se trovi un metodo migliore fammi sapere:k:

PM Quote
Avatar
Franck (Normal User)
Rookie


Messaggi: 43
Iscritto: 06/07/2010

Segnala al moderatore
Postato alle 16:33
Venerdì, 20/04/2012
Scusa per farlo partire ci vuole il metodo principale cioè il main, mi potresti fare un esempio. :)

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 20:18
Venerdì, 20/04/2012
Codice sorgente - presumibilmente Java

  1. public class Main {
  2.  
  3.     public static void main(String[] args) {
  4.  
  5.         JFrame f = new JFrame();
  6.         JTabbedPane  tabPane = new JTabbedPane();
  7.  
  8.         tabPane.addTab("nome tab", new JTextArea());
  9.         int c = tabPane.getTabCount() - 1;
  10.         //creo il pulsante
  11.         ButtonTab bt = new ButtonTab(tabPane);
  12.         //aggiungo nel tab appena creato
  13.         tabPane.setTabComponentAt(c, bt);
  14.         tabPane.setSelectedIndex(c);
  15.  
  16.         f.getContentPane().add(tabPane);
  17.        
  18.         f.setSize(500,500);
  19.         f.setVisible(true);
  20.  
  21.     }
  22. }


PM Quote
Avatar
Franck (Normal User)
Rookie


Messaggi: 43
Iscritto: 06/07/2010

Segnala al moderatore
Postato alle 12:26
Domenica, 22/04/2012
Cercando su internet sono riuscito a trovare questo,
http://terai.xrea.jp/Swing/NewTabButton.html ma non ho capito bene come posso andarlo a modificare...

PM Quote