Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTabbedPane内部组件的焦点_Java_Swing_User Interface_Jtabbedpane - Fatal编程技术网

Java JTabbedPane内部组件的焦点

Java JTabbedPane内部组件的焦点,java,swing,user-interface,jtabbedpane,Java,Swing,User Interface,Jtabbedpane,我对这个完全陌生 实际上,我有一个JPanel,有两个面板,即上面板和下面板 上面板是一个JPanel和 下面板为JTabbedPane 在JtabbedPane中,我有两个选项卡。 每个选项卡都包含一个JPanelhaving null布局,该布局包含一个或多个组件,如jtextfield、jbutton、jscrollpanewith jtable等 问题是,当我切换到任何选项卡时,我都无法获得正常的jpanel效果。 无法使用鼠标单击按钮可以通过按tab键选择按钮n然后按空格键单击,无法在

我对这个完全陌生

实际上,我有一个JPanel,有两个面板,即上面板和下面板 上面板是一个JPanel和 下面板为JTabbedPane

在JtabbedPane中,我有两个选项卡。 每个选项卡都包含一个JPanelhaving null布局,该布局包含一个或多个组件,如jtextfield、jbutton、jscrollpanewith jtable等

问题是,当我切换到任何选项卡时,我都无法获得正常的jpanel效果。 无法使用鼠标单击按钮可以通过按tab键选择按钮n然后按空格键单击,无法在鼠标单击时选择文本字段只能通过按tab键等进行选择

有什么解决办法吗??我希望jtabbedpane内的面板能够像普通jpanel一样工作:
谢谢:

如果没有任何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);
    }



}
第一个只有Infotext的JPanel

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());
    }

}
两个选项卡面板

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!");
        }
    }
}
第二组

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();
            }
        });
    }
}

希望这个小应用能对你有所帮助。

每个选项卡都包含一个JPanelhaving null布局。不要使用空布局。为了更好的帮助,也要学会使用,发布感谢peeskillet,这真的很有帮助。没有使用空布局,它真的按照我想要的方式工作,谢谢:是的,下次我一定会得到一个例子来获取更多信息是的,太棒了,帕特里克!!这也帮了我很大的忙,让我的工作更有效率: