java - Jtabbedpane 使用多个类

标签 java swing class jtabbedpane

我对java相当陌生,正在创建一个windowbuilder程序。我想知道在使用 Jtabbedpane 并在程序窗口中的选项卡之间切换时是否可以使用 Action 监听器从单独的类获取内容。例如,我有一个包含两个选项卡和两个类的程序,第一个选项卡将包含一个类的代码,第二个选项卡将包含第二个类的代码。

谢谢

最佳答案

如果您想将创建 GUI 的代码分离到多个类,您可以使用以下方法:

这将是您的主类,其中将包含 JTabbedPane:

import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

public class Main {
    JFrame frame = new JFrame();
    JTabbedPane tabbedPane = new JTabbedPane();
    FirstPanel fp = new FirstPanel();
    SecondPanel sp = new SecondPanel();

    public Main() {
        tabbedPane.add("First", fp);
        tabbedPane.add("Second", sp);
        frame.getContentPane().add(tabbedPane);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(640, 480);
        // frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

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

}

这将是您的第二个类,它扩展了 JPanel 或其他类型的容器:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JPanel;

public class FirstPanel extends JPanel{

    public void paintComponent(Graphics g){
        g.setColor(Color.BLACK);
        g.setFont(new Font("Verdana",Font.BOLD,16));
        g.drawString("Hello there", 20, 20);
    }
}

也扩展了 JPanel 的第三类示例:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class SecondPanel extends JPanel{
    JButton button = new JButton("Click me!");

    public SecondPanel() {
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(null, "You just clicked button");
            }
        });
        add(button);
    }

    public void paintComponent(Graphics g){
        g.setColor(Color.BLACK);
        g.setFont(new Font("Verdana",Font.BOLD,16));
        g.drawString("Hello there again!", 20, 20);
    }
}

屏幕截图:

enter image description here

编辑:

此外,明智的做法是在该类中仅创建一个返回自定义 JPanel 的方法,而不是使用 JPanel 扩展类。这样你的类就可以保持“开放”的继承状态。

关于java - Jtabbedpane 使用多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575456/

相关文章:

java - j8583.xml 查找所有 128 个字段

java.lang.OutOfMemory错误: Java heap space

java - JTable - 如何为特定列中的每一行插入新的 JLabel?

java - 在类中设置值不起作用

java - 内部池和外部池使用情况

java - Android DNS MX 记录查询

Java GridBagLayout 更改列大小

java - 测试设置向导出错

c++ - 一个类的所有实例都可以访问的变量

Java类设计问题