Jtabbedpane使用多个类

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

谢谢

如果要将创建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); } } 

截图:

在此处输入图像描述

编辑:

此外,不是使用JPanel扩展类,而是在该类中创建一个返回自定义JPanel 。 这样你的类就会继续“打开”inheritance。

你说:

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

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

另一方面,如果你想知道是否可以在一个选项卡所持有的一个组件中使用JButton / ActionListener并让这些操作导致另一个选项卡上保存的另一个组件发生更改,那么即使两个视图都是由不同的类创建。 这是观察者或听众设计模式出现的地方。 有关详细信息,请提供有关特定问题的更多详细信息。

此外,我非常同意brano88 – 在您非常熟悉并且实际上基于Swing库的基础之前,不要使用窗口构建器程序。