出現,同時在程序工作在一些網頁上消失了,我做了我的一些領域,即靜態的E-Number
一個JTextField
的。但是現在這個領域的行爲並不像我預期的那樣,在我看來的一些頁面上,在其他一些頁面上它消失了。 由於我在很多靜力學方面工作不是很有經驗,所以可能有一個我不理解的概念。JTextField的是靜態的時候,而在其他
,如果你想測試我創建了我的程序(MCVE)的一個非常簡單的,但工作示例。
它顯示我的總覽頁面,在第一 - 在E-Number JTextField
丟失。
如果你點擊搜索按鈕,它顯示了跟蹤頁面 - 與E-Number JTextField
存在。
兩頁都包含相同workNumberPanel
我無法找到差異,這將解釋行爲。
那麼,爲什麼是E-Number JTextField
目前概覽頁面上缺少跟蹤頁面上?任何幫助/解釋讚賞!
MainProgram.java
import java.awt.CardLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import net.miginfocom.swing.MigLayout;
public class MainProgram extends JFrame {
private static final long serialVersionUID = 1L;
public static JPanel centerPanel = new JPanel();
public static CardLayout contentCardsLayout = new CardLayout();
OverviewPage overviewPage = new OverviewPage();
TrackingPage trackingPage = new TrackingPage();
public void initialize() {
createCenterPanel();
}
private void createCenterPanel() {
centerPanel.setLayout(contentCardsLayout);
overviewPage.setName("overviewPage");
trackingPage.setName("trackingPage");
centerPanel.add(overviewPage, "overviewPage");
centerPanel.add(trackingPage, "trackingPage");
add(centerPanel, "growx, wrap");
}
public MainProgram() {
setBounds(300, 50, 1200, 900);
setLayout(new MigLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
MainProgram window = new MainProgram();
window.setVisible(true);
window.initialize();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
OverviewPage.java
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
public class OverviewPage extends JPanel {
WorkNumberPanel workNumberPanel = new WorkNumberPanel();
private static final long serialVersionUID = 1L;
public OverviewPage() {
setLayout(new MigLayout());
add(workNumberPanel, "wrap, growx");
}
}
TrackingPage.java
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
public class TrackingPage extends JPanel {
private static final long serialVersionUID = 1L;
WorkNumberPanel equipmentNumberPanel = new WorkNumberPanel();
public TrackingPage(){
setLayout(new MigLayout("", "grow, fill"));
add(equipmentNumberPanel, "wrap, growx");
}
}
WorkNumberPanel.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;
public class WorkNumberPanel extends JPanel {
private static final long serialVersionUID = 1L;
private static final Integer TEXTFIELD_LENGTH = 20;
JPanel mainWorkNumberPanel = new JPanel();
JLabel lblWorkNumber = new JLabel("E-Nr: ");
JLabel lblN_Number = new JLabel("N-Nr.: ");
JLabel lblSNumber = new JLabel("W-Nr.: ");
public static JTextField txtWorkNumber = new JTextField(TEXTFIELD_LENGTH);
JTextField txtNNumber = new JTextField(TEXTFIELD_LENGTH);
JTextField txtSNumber = new JTextField(TEXTFIELD_LENGTH);
JButton btnSearchEntry = new JButton("Search");
public WorkNumberPanel() {
createEquipmentNumberPanel();
btnSearchEntry.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MainProgram.contentCardsLayout.show(MainProgram.centerPanel, "trackingPage");
}
});
}
private void createEquipmentNumberPanel() {
setLayout(new MigLayout());
mainWorkNumberPanel.setLayout(new MigLayout("", "[][grow, fill][][grow, fill][][grow, fill][]"));
mainWorkNumberPanel.add(lblWorkNumber);
mainWorkNumberPanel.add(txtWorkNumber);
mainWorkNumberPanel.add(lblN_Number);
mainWorkNumberPanel.add(txtNNumber);
mainWorkNumberPanel.add(lblSNumber);
mainWorkNumberPanel.add(txtSNumber);
mainWorkNumberPanel.add(btnSearchEntry);
add(mainWorkNumberPanel, "push, span, growx");
}
}
兩個答案都說得很清楚,我的錯誤是什麼。現在我必須找到一種無靜態使用'JTextField'的方法。我正在創建一個'OrderObject',我從概覽頁面發送到跟蹤頁面。在那裏我想在'JTextField'中顯示訂單號(E-Number)。但我還沒有弄清楚,概覽頁面如何告訴跟蹤頁面將文本設置爲E-Number,因此我使用靜態,因爲這看起來很簡單,但是錯誤? – hamena314
是的,以這種方式使用'static'不是一個解決方案。您必須獲得第一個對話框的結果並將其插入到第二個對話框中。這可以通過多種方式完成,我更喜歡[此方法](http://stackoverflow.com/a/4089370/930640)。 – BadCash
那些不是對話。我有一個頁面,其中是一個導航面板(左側),號碼面板(標題),其餘是內容(中)。我使用卡片佈局從一個頁面切換到另一個頁面,並且需要在每個頁面的標題中的數字面板上保留相同的數字,因爲它們都屬於相同的順序。 – hamena314