java - JTabbedPane 中的选项卡会影响内容

标签 java swing jtabbedpane

如果选项卡的内容按预期工作,为什么 JTabbedPane 中选项卡的顺序会影响?

我正在编写我的第一个高级应用程序,但我的 JTabbedPane 遇到了一些问题。 这是我所拥有的:

public ProjectTracker() {
    initialize();
    newJobTab();
    newUpdateTab();
    newReportsTab();
}

newJobTab()、newUpdateTab() 和 newReportsTab() 被放置到 initialize() 方法内的 JTabbed Pane 中。每个都创建一个我制作的 GUI 类的实例。它基本上有一堆文本字段和组合框等,它们与数据库交互以填充字段或从字段收集信息。

选项卡上按钮的功能是三者之间的主要区别。单独来看,每个选项卡都按照我的预期工作。当我将它们放在选项卡式 Pane 中时,只有第三个选项卡可以正常工作。如果我调换顺序,结果是一样的。无论第三个选项卡是哪一个,都是唯一能按我想要的方式运行的选项卡。

这是我对原始帖子的修订...现在带有代码。

public class SampleTracker {

private JFrame frmProjectTracker;
private JTabbedPane tabbedPane;
public String Title;

SampleTJV newJobPanel;
SampleTJV updatePanel;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                SampleTracker window = new SampleTracker();
                window.frmProjectTracker.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public SampleTracker() {
    initialize();
    newJobTab();
    newUpdateTab();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frmProjectTracker = new JFrame();
    frmProjectTracker.setBounds(100, 100, 662, 461);
    frmProjectTracker.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmProjectTracker.getContentPane().setLayout(new FormLayout(new ColumnSpec[] {
            ColumnSpec.decode("662px"),},
        new RowSpec[] {
            RowSpec.decode("50px"),
            RowSpec.decode("389px"),}));

    tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    frmProjectTracker.getContentPane().add(tabbedPane, "1, 2, fill, fill");
}


private void newJobTab(){
    newJobPanel = new SampleTJV();
    newJobPanel.UpdateButton.setText("Enter Job");
    tabbedPane.addTab("Enter New Job", null, newJobPanel, null);
    newJobPanel.UpdateButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
                newJobPanel.collectInfo();
                Title = newJobPanel.Title;
                //Here the connection to DB is made and the Title is written to DB
                newJobPanel.newJobField.setText(Title);
            }
    }); 
}

private void newUpdateTab(){
    updatePanel = new SampleTJV();
    newJobPanel.UpdateButton.setText("Update Job");
    tabbedPane.addTab("Update Job", null, updatePanel, null);
    updatePanel.UpdateButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            updatePanel.collectInfo();
            Title = updatePanel.Title;
            updatePanel.updateJobField.setText(Title);
        }
    }); 
}

}

public class SampleTJV extends JPanel {

private static final long serialVersionUID = 1L;
public static JTextField TitleField;

public String Title;
public JButton UpdateButton;
public JTextField newJobField;
public JTextField updateJobField;
/**
 * Create the panel.
 */
public SampleTJV() {
    setLayout(null);
    TitleField = new JTextField();

    TitleField.setColumns(10);
    TitleField.setBounds(109, 6, 134, 28);
    add(TitleField);

    newJobField = new JTextField();
    newJobField.setBounds(171, 79, 134, 28);
    add(newJobField);
    newJobField.setColumns(10);

    UpdateButton = new JButton("Update Job");
    UpdateButton.setBounds(267, 7, 112, 29);
    add(UpdateButton);

    JLabel lblNewJobResult = new JLabel("New Job Result");
    lblNewJobResult.setBounds(47, 85, 112, 16);
    add(lblNewJobResult);

    JLabel lblUpdateJobResult = new JLabel("Update Job Result");
    lblUpdateJobResult.setBounds(47, 125, 112, 16);
    add(lblUpdateJobResult);

    updateJobField = new JTextField();
    updateJobField.setColumns(10);
    updateJobField.setBounds(171, 119, 134, 28);
    add(updateJobField);

}

public void collectInfo(){  
    Title = TitleField.getText();
}

}

最佳答案

以下是复制错误:

private void newUpdateTab(){
    updatePanel = new SampleTJV();
    newJobPanel.UpdateButton.setText("Update Job");

newJobPanel 可能不是有意的。

<小时/>

静态 GUI 字段也是错误的:

static JTextField TitleField;

关于java - JTabbedPane 中的选项卡会影响内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505154/

相关文章:

java - 使用队列中的对象中的方法,Java

java - 登录后重定向至特定页面

java - 需要帮助从 Arraylist 中删除并删除

java - 将 JPanel 定位在 JFrame 中的特定位置

java swing JTabbedPane 位置选项卡标题从右下到左

java - 在jframe上添加webview引擎控制

Java 如何从 ActionListener 类继承变量

java - Java 有没有办法传递方法引用?

java - TableModel 未加载来自通过 JTabbedPane 的 MouseClick 上的 JPA 查询的数据

java - GUI 程序,选项卡面板的问题