2014-04-19 3 views
0

Я новичок в этом .....Фокус компонентов внутри JTabbedPane

Ну, на самом деле я имею JPanel, имеющий две панели (скажем, верхняя и нижняя панель) верхняя панель является JPanel и ниже панель является JTabbedPane ..

внутри JtabbedPane У меня есть две вкладки. Каждая вкладка содержит JPanel (имеющий нулевой макет), который имеет 1 или более компонентов, таких как jtextfield, jbutton, jscrollpane (с jtable) и т. Д.

проблема в том, что когда я переключаюсь на любую вкладку, я не могу получить нормальный эффект jpanel. кнопки не могут щелкнуть мышью (можно нажать, нажав клавишу вкладок для выбора кнопки n, затем нажав клавишу пробела), текстовое поле не может быть выбрано при щелчке мыши (может быть выбрано только нажатием клавиши вкладок) и т. Д.

так что есть решение для этого? Я хочу, чтобы панели внутри jtabbedpane работали как обычный jpanel :) :) спасибо :)

+1

_ "Каждая вкладка содержит JPanel (с нулевым расположением)" _. Не используйте пустые макеты. Научитесь использовать [LayoutManagers] (http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html) –

+2

Также для лучшей помощи опубликуйте [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) –

+0

Спасибо peeskillet, что действительно помогло. Без использования нулевого макета, он действительно работал так, как я хотел, спасибо :) И да, в следующий раз я обязательно получу пример для получения дополнительной информации. :) – Vineet

ответ

0

Без каких-либо MCVE трудно помочь, поэтому я сделал простой пример приложения, который, я надеюсь, подходит для вашего приложение.

import java.awt.BorderLayout; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class MainFrame extends JFrame { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    private static MainFrame frame; 

    private MainFrame() { 
     this.setTitle("Focus on JTabbedPane"); 
     this.setSize(new Dimension(800, 600)); 

     this.getContentPane().add(initComponents()); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    private JPanel initComponents() { 
     JPanel panel = new JPanel(new BorderLayout(10, 10)); 
     panel.add(new MyInfoPanel(), BorderLayout.NORTH); 
     panel.add(new MyTabPanel(), BorderLayout.CENTER); 

     return panel; 
    } 

    public static void createAndShowGui() { 
     frame = new MainFrame(); 
     frame.setVisible(true); 
    } 



} 

Первый JPanel с только Infotext

import javax.swing.JLabel; 
import javax.swing.JPanel; 


public class MyInfoPanel extends JPanel { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public MyInfoPanel() { 
     this.add(new JLabel("Some info text")); 
    } 

} 

MyTabbedPanel

import javax.swing.JTabbedPane; 


public class MyTabPanel extends JTabbedPane { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public MyTabPanel() { 
     this.addTab("Tab 1", new FirstTabPanel()); 
     this.addTab("Tab 2", new SecondTabPanel()); 
    } 

} 

Эти два TabPanels

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 


public class FirstTabPanel extends JPanel implements ActionListener { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    JButton button; 
    JTextField tf; 
    public FirstTabPanel() { 
     tf = new JTextField("Textfield"); 
     this.add(tf); 
     button = new JButton("Button"); 
     button.addActionListener(this); 
     this.add(button); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource().equals(button)) { 
      tf.setText("Button on was clicked!"); 
     } 
    } 
} 

SecondTabPanel

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 


public class SecondTabPanel extends JPanel { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    JTextArea area; 
    JTextField field; 

    public SecondTabPanel() { 

     this.setLayout(new BorderLayout(10, 10)); 

     field = new JTextField(); 
     this.add(field, BorderLayout.NORTH); 
     area = new JTextArea(); 
     this.add(area, BorderLayout.CENTER); 
     field.addKeyListener(new KeyListener() { 

      @Override 
      public void keyTyped(KeyEvent e) { 
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void keyPressed(KeyEvent e) { 
       area.setText(area.getText() + e.getKeyChar()); 
      } 
     }); 
    } 


} 

И начать это

import javax.swing.SwingUtilities; 


public class App { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       MainFrame.createAndShowGui(); 
      } 
     }); 
    } 
} 

Надеется, что это мини-приложение поможет вам.

+0

Yup, это здорово, Патрик !! Это тоже помогло, сделав мою работу немного более эффективным способом :) – Vineet

Смежные вопросы