首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个类的Jtabbedpane

使用多个类的Jtabbedpane
EN

Stack Overflow用户
提问于 2012-11-27 08:21:29
回答 2查看 6.3K关注 0票数 2

我是java的新手,正在创建一个windowbuilder程序。我想知道在使用Jtabbedpane并在程序窗口的选项卡之间切换时,是否可以使用actionlistener从单独的类中获取内容。例如,我有一个包含两个选项卡和两个类的程序,第一个选项卡包含来自一个类的代码,第二个选项卡包含来自第二个类的代码。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 08:45:46

如果你想把创建GUI的代码分成多个类,你可以使用这个方法:

这将是包含JTabbedPane的主类

代码语言:javascript
复制
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或其他类型的容器:

代码语言:javascript
复制
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的第三个类的示例

代码语言:javascript
复制
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);
    }
}

截图:

编辑:

此外,明智的做法是只在返回自定义JPanel的类中创建一个方法,而不是使用JPanel扩展类。这样,您的类将保持“打开”状态以进行继承。

票数 9
EN

Stack Overflow用户

发布于 2012-11-27 08:33:53

你声明:

我想知道在使用Jtabbedpane并在程序窗口的选项卡之间切换时,是否可以使用actionlistener从单独的类中获取内容。

如果您希望侦听选定选项卡中的更改,则ActionListener将不起作用,因为这只由AbstractButton类的子类激活。相反,请注意,JTabbedPane使用SingleSelectionModel作为其模型,您可以使用ChangeListener监听对此的更改。API和教程可以帮助填写详细信息。

另一方面,如果您想知道是否可以在选项卡所包含的一个组件中使用JButton/ActionListener,并让这些操作在另一个选项卡中包含的另一个组件中引起更改,那么答案肯定是肯定的,即使这两个视图是由不同的类创建的。这就是观察者或侦听器设计模式脱颖而出的地方。有关这方面的详细信息,请提供有关您的特定问题的更多详细信息。

此外,我非常同意brano88的观点--在您非常熟悉并且实际上已经很好地掌握了Swing库的基础之前,不要使用窗口生成器程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13575456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档