2014-05-10 33 views
-1

我正在製作一個調用三個面板的面板項目。第一個面板包含所有信息,另外兩個面板是我按下按鈕時打開的面板。它是如何工作的,我打電話給第一個面板,按下按鈕,打開第二個面板。然後在第二個面板中插入一個密碼。如果這是正確的,則會打開第三個面板。我需要將第一個面板的值調入第三個面板。我知道如何使用構造函數,訪問器和增變器,但是我需要的值是在按下按鈕時在事件中生成的。我正試圖弄清楚如何從事件中將這些值調入第三個面板。基本上,這些值是計劃期間所有交易的計數器,小計,稅金和總計。這是我的代碼。Java - GUI:將值從幀傳遞到另一個

主類:

import javax.swing.*; 

public class AppleRegister { 

    public static void main(String[] args) 
    { 
     double subTotalp2 = 0, taxP2 = 0, realTotalp2 = 0; 

     JFrame frame = new JFrame("Apple Crazy Cola Cash (Apple IIC) Register"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     AppleRegisterPanel panel = new AppleRegisterPanel 
       (subTotalp2, taxP2, realTotalp2); 

     frame.getContentPane().add(panel); 

     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

第一屏:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.text.DecimalFormat; 

public class AppleRegisterPanel extends JPanel 
{ 
private JButton button1, button2, button3, button4, button5, button6; 
private JLabel label1, label2, label3, label4, label5, label6, label7; 
private JTextField text, text1, text2, text3, text4, text5, text6, text7, text8; 
private JTextArea area ; 
private JPanel panel, panel2, panel3, panel4; 
private int counter, counter2, counter3, counter4, counterp21, counterp22, 
    counterp23, counterp24; 
private String string; 
private final double MD_TAX = 0.06; 
private double subTotal, realTotal, tax, subTotalp2, realTotalp2, taxP2; 
private double num100, num50, num20, num10, num5, num1, num25cents, num10cents, 
     num5cents, num1cents; 

public AppleRegisterPanel(double subTotalp2, double taxP2, double realTotalp2) 
{ 
    this.subTotalp2 = subTotalp2; 
    this.taxP2 = taxP2; 
    this.realTotalp2 = realTotalp2; 

    setLayout(new BorderLayout()); 
    text = new JTextField(10); 
    text1 = new JTextField(5); 
    text2 = new JTextField(5); 
    text3 = new JTextField(5); 
    text4 = new JTextField(5); 
    text5 = new JTextField(10); 
    text6 = new JTextField(10); 
    text7 = new JTextField(10); 
    text8 = new JTextField(10); 
    area = new JTextArea(); 

    button1 = new JButton("Child"); 
    button2 = new JButton("Medium"); 
    button3 = new JButton("Large"); 
    button4 = new JButton("Ex Large"); 
    button5 = new JButton("Close Out Register"); 
    button6 = new JButton("Complete Transaction"); 

    panel = new JPanel(); 
    panel.setPreferredSize(new Dimension(240,250)); 
    panel.setBackground(Color.cyan); 
    add(panel, BorderLayout.WEST); 
    panel.add(button1); 
    button1.addActionListener(new TempListener2()); 
    panel.add(text1); 
    panel.add(Box.createRigidArea(new Dimension(0,20))); 
    panel.add(button2); 
    button2.addActionListener(new TempListener2()); 
    panel.add(text2); 
    panel.add(Box.createRigidArea(new Dimension(0,20))); 
    panel.add(button3); 
    button3.addActionListener(new TempListener2()); 
    panel.add(text3); 
    panel.add(Box.createRigidArea(new Dimension(0,20))); 
    panel.add(button4); 
    button4.addActionListener(new TempListener2()); 
    panel.add(text4); 
    panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); 

    panel2 = new JPanel(); 
    label6 = new JLabel("Change"); 
    panel2.setPreferredSize(new Dimension(270,250)); 
    panel2.setBackground(Color.cyan); 
    add(panel2, BorderLayout.EAST); 
    panel2.add(button5); 
    button5.addActionListener(new TempListener()); 
    panel2.add(label6); 
    panel2.add(area); 
    panel2.add(button6); 
    button6.addActionListener(new TempListener1()); 
    panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS)); 

    panel3 = new JPanel(); 
    label1 = new JLabel("Apple Crazy Cola Cash (Apple IIC) Register "); 
    label7 = new JLabel(" By Robert Burns"); 
    panel3.setPreferredSize(new Dimension(50,50)); 
    panel3.setBackground(Color.cyan); 
    add(panel3, BorderLayout.NORTH); 
    panel3.add(label1); 
    panel3.add(label7); 

    panel4 = new JPanel(); 
    label1 = new JLabel("Sub-Total"); 
    label2 = new JLabel("Tax"); 
    label3 = new JLabel("Total"); 
    label4 = new JLabel("Payment"); 
    label5 = new JLabel("Change Owed"); 
    panel4.setPreferredSize(new Dimension(140,250)); 
    panel4.setBackground(Color.cyan); 
    add(panel4, BorderLayout.CENTER); 
    panel4.add(label1); 
    panel4.add(text); 
    panel4.add(label2); 
    panel4.add(text5); 
    panel4.add(label3); 
    panel4.add(text6); 
    panel4.add(label4); 
    panel4.add(text7); 
    text7.addActionListener(new TempListener3()); 
    panel4.add(label5); 
    panel4.add(text8); 

} 

private class TempListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event) 
    { 

     if (event.getSource() == button5) 
     { 
      JFrame frame3 = new JFrame("Apple Crazy Cola Cash (Apple 
          IIC) Register"); 
      frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      AppleRegisterPanel3 panel = new AppleRegisterPanel3(); 
      frame3.getContentPane().add(panel); 

      frame3.pack(); 
      frame3.setVisible(true); 
     } 
    } 
} 

private class TempListener1 implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event) 
    { 

     if (event.getSource() == button6) 
     { 
      counter = 0; 
      text1.setText(Integer.toString(counter)); 
      counter2 = 0; 
      text2.setText(Integer.toString(counter2)); 
      counter3 = 0; 
      text3.setText(Integer.toString(counter3)); 
      counter4 = 0; 
      text4.setText(Integer.toString(counter4)); 
      subTotal = 0; 
      text.setText(Double.toString(subTotal)); 
      tax = 0; 
      text5.setText(Double.toString(tax)); 
      realTotal = 0; 
      text6.setText(Double.toString(realTotal)); 
      text7.setText(""); 
      text8.setText(""); 
     } 
    } 
} 

private class TempListener2 implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event) 
    { 
     DecimalFormat df = new DecimalFormat("#.##"); 

     if (event.getSource() == button1) 
     { 
      counter++; 
      string = text1.getText(); 
      text1.setText(Integer.toString(counter)); 

      subTotal += counter * 0.90; 
      string = text.getText(); 
      text.setText(df.format(subTotal)); 

      tax += subTotal * MD_TAX; 
      string = text5.getText(); 
      text5.setText(df.format(tax)); 

      realTotal += subTotal + tax; 
      string = text6.getText(); 
      text6.setText(df.format(realTotal)); 

      counterp21++; 
      subTotalp2 += counterp21 * 0.90; 
      taxP2 += subTotalp2 * MD_TAX; 
      realTotalp2 += subTotalp2 * taxP2; 
     } 

     if (event.getSource() == button2) 
     { 
      counter2++; 
      string = text2.getText(); 
      text2.setText(Integer.toString(counter2)); 

      subTotal += counter2 * 1.40; 
      string = text.getText(); 
      text.setText(df.format(subTotal)); 

      tax += subTotal * MD_TAX; 
      string = text5.getText(); 
      text5.setText(df.format(tax)); 

      realTotal += subTotal + tax; 
      string = text6.getText(); 
      text6.setText(df.format(realTotal)); 

      counterp22++; 
      subTotalp2 += counterp22 * 1.40; 
      taxP2 += subTotalp2 * MD_TAX; 
      realTotalp2 += subTotalp2 * taxP2; 
     } 

     if (event.getSource() == button3) 
     { 
      counter3++; 
      string = text3.getText(); 
      text3.setText(Integer.toString(counter3)); 

      subTotal += counter3 * 1.75; 
      string = text.getText(); 
      text.setText(df.format(subTotal)); 

      tax += subTotal * MD_TAX; 
      string = text5.getText(); 
      text5.setText(df.format(tax)); 

      realTotal += subTotal + tax; 
      string = text6.getText(); 
      text6.setText(df.format(realTotal)); 

      counterp23++; 
      subTotalp2 += counterp23 * 1.75; 
      taxP2 += subTotalp2 * MD_TAX; 
      realTotalp2 += subTotalp2 * taxP2; 
     } 

     if (event.getSource() == button4) 
     { 
      counter4++; 
      string = text4.getText(); 
      text4.setText(Integer.toString(counter4)); 

      subTotal += counter4 * 2.00; 
      string = text.getText(); 
      text.setText(df.format(subTotal)); 

      tax += subTotal * MD_TAX; 
      string = text5.getText(); 
      text5.setText(df.format(tax)); 

      realTotal += subTotal + tax; 
      string = text6.getText(); 
      text6.setText(df.format(realTotal)); 

      counterp24++; 
      subTotalp2 += counterp24 * 2.00; 
      taxP2 += subTotalp2 * MD_TAX; 
      realTotalp2 += subTotalp2 * taxP2; 
     } 
    } 
} 

如果向下滾動到TempListner2,看到變量subTotalp2,taxP2,realTotalp2;那些是我需要繼續的變量。你會看到我讓構造函數中有這些變量,所以我可以在第三個面板中調用方法,但是沒有骰子。當我打開第三個面板時出現0.0。不確定是否因爲它在無效事件中。我將在這裏張貼第三個面板的一部分,我試圖從第一個面板調用構造函數,並將這些值插入到第三個面板中。

第三小組:

public AppleRegisterPanel2() 
{ 

    AppleRegisterPanel p = new AppleRegisterPanel(subTotalp2, taxP2, 
      realTotalp2); 
    this.subTotalp2 = subTotalp2; 
    this.taxP2 = taxP2; 
    this.realTotalp2 = realTotalp2; 

    subTotalp2 = p.getSubTotal(); 
    taxP2 = p.getTax(); 
    realTotalp2 = p.getTotal(); 

你會看到這裏,我想一個奇怪的屁股的方式來調用值。

+0

[標籤:java描述]標籤移除 - 我看不到這個問題如何有什麼用JavaScript - 你爲什麼要添加這個誤導標籤? –

+0

因爲我不知道這是誤導。我對此仍然陌生。抱歉。 – user3443047

回答

1

一個問題是,您打開JFrame的另一個JFrame,而應該顯示模態JDialog。原因在於,在用戶輸入適當的信息之前,您無法推進您的程序,所以第二個窗口應該是模態的,它將阻止與底層窗口的交互,直到對話窗口完全處理完畢。如果你這樣做,並將你的JPanel放入一個模態的JDialog中,那麼你可以很容易地查詢第二個JPanel的結果,因爲你會知道你的代碼到底是什麼時候處理的 - 你的主GUI代碼會從你設置的地方模態對話框可見。

例如:

import java.awt.Window; 
import java.awt.Dialog.ModalityType; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class WindowCommunication { 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("WindowCommunication"); 
     frame.getContentPane().add(new MyFramePanel()); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    // let's be sure to start Swing on the Swing event thread 
    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 

class MyFramePanel extends JPanel { 
    private JTextField field = new JTextField(10); 
    private JButton openDialogeBtn = new JButton("Open Dialog"); 

    // here my main gui has a reference to the JDialog and to the 
    // MyDialogPanel which is displayed in the JDialog 
    private MyDialogPanel dialogPanel = new MyDialogPanel(); 
    private JDialog dialog; 

    public MyFramePanel() { 
     openDialogeBtn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      openTableAction(); 
     } 
     }); 
     field.setEditable(false); 
     field.setFocusable(false); 

     add(field); 
     add(openDialogeBtn); 
    } 

    private void openTableAction() { 
     // lazy creation of the JDialog 
     if (dialog == null) { 
     Window win = SwingUtilities.getWindowAncestor(this); 
     if (win != null) { 
      dialog = new JDialog(win, "My Dialog", 
        ModalityType.APPLICATION_MODAL); 
      dialog.getContentPane().add(dialogPanel); 
      dialog.pack(); 
      dialog.setLocationRelativeTo(null); 
     } 
     } 
     dialog.setVisible(true); // here the modal dialog takes over 

     // this line starts *after* the modal dialog has been disposed 
     // **** here's the key where I get the String from JTextField in the GUI held 
     // by the JDialog and put it into this GUI's JTextField. 
     field.setText(dialogPanel.getFieldText()); 
    } 
} 

class MyDialogPanel extends JPanel { 
    private JTextField field = new JTextField(10); 
    private JButton okButton = new JButton("OK"); 

    public MyDialogPanel() { 
     okButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      okButtonAction(); 
     } 
     }); 
     add(field); 
     add(okButton); 
    } 

    // to allow outside classes to get the text held by the JTextField 
    public String getFieldText() { 
     return field.getText(); 
    } 

    // This button's action is simply to dispose of the JDialog. 
    private void okButtonAction() { 
     // win is here the JDialog that holds this JPanel, but it could be a JFrame or 
     // any other top-level container that is holding this JPanel 
     Window win = SwingUtilities.getWindowAncestor(this); 
     if (win != null) { 
     win.dispose(); 
     } 
    } 
} 
+0

謝謝你。我很感激幫助和信息。 – user3443047

相關問題