我是java的新手,正在创建一个windowbuilder程序。我想知道是否可以使用Jtabbedpane并在程序窗口中的选项卡之间切换,如果我可以使用actionlistener从单独的类中获取内容。例如,我有一个带有两个选项卡和两个类的程序,第一个选项卡将包含来自一个类的代码,第二个选项卡将来自第二个类。
由于
答案 0 :(得分:9)
如果你想将创建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
的方法。这样你的类就会继续“打开”继承。
答案 1 :(得分:3)
你说:
我想知道在使用Jtabbedpane并在程序窗口中的选项卡之间切换是否可行,如果我可以使用actionlistener从单独的类中获取内容。
如果您希望在所选标签中监听更改,则ActionListener将无法工作,因为这仅由AbstractButton类的子项激活。请注意,JTabbedPane使用SingleSelectionModel作为其模型,您可以使用ChangeListener监听对此的更改。 API和教程可以帮助填写详细信息。
另一方面,如果您想知道是否可以在选项卡所持有的一个组件中使用JButton / ActionListener并让操作导致另一个选项卡上保存的另一个组件发生更改,那么答案肯定是,即使两个视图由不同的类创建。这是观察者或听众设计模式出现的地方。有关详细信息,请提供有关特定问题的更多详细信息。
此外,我非常同意brano88 - 在您非常熟悉并且事实上基于Swing库的基础之前,不要使用窗口构建器程序。