簡體   English   中英

Java JDialog 使用 JDialog 中的 Sumbit 按鈕從 JDialog 內部傳遞對象

[英]Java JDialog Passing Object From Within the JDialog using a Sumbit Button from the JDialog

我在網上搜索了幾個小時的答案,到目前為止我還沒有找到任何有用的東西,我有一個 JDialog 應該將一個對象發送回調用它的 JPanel,在多次運行代碼后我注意到 JPanel在我按下 JDialog 中的 Save 按鈕之前,構造函數完成,我的問題是,

我如何將對象從 JDialog 傳遞到 JPanel,我應該在 Jpanel 代碼的哪一部分編寫它?

這是JPanel代碼:

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.*;
public class AquaPanel extends JPanel implements ActionListener
{
    private JFrame AQF;
    private BufferedImage img;
    private HashSet<Swimmable> FishSet;
    private int FishCount;
    private AddAnimalDialog JDA;
    public AquaPanel(AquaFrame AQ)
    {
        super();
        FishCount=0;
        this.setSize(800, 600);
        this.AQF = AQ;
        gui();
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, null);
//        if(!FishSet.isEmpty())
//        {
//          Iterator  ITR = FishSet.iterator();
//        
//          while(ITR.hasNext())
//          {
//              ((Swimmable) ITR.next()).drawAnimal(g);
//          }
//        }
    }
    private void AddAnim()
    {
    Swimmable test = null;
    JDA = new AddAnimalDialog(test);
    JDA.setVisible(true);//shows jdialog box needs to set to false on new animal


}
private void Sleep()
{

}
private void Wake()
{

}
private void Res()
{

}
private void Food()
{

}
private void Info()
{
}
private void gui()
{
    JPanel ButtonPanel = new JPanel();
    Makebuttons(ButtonPanel);
    this.setLayout(new BorderLayout());
    this.setBackground(Color.WHITE);
    ButtonPanel.setLayout(new GridLayout(1,0));
    this.add(ButtonPanel,BorderLayout.SOUTH);

}
private void Makebuttons(JPanel ButtonPanel)
{
    JButton Addanim = new JButton("Add Animal");
    Addanim.setBackground(Color.LIGHT_GRAY);
    Addanim.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            AddAnim();
        }
    });
    JButton Sleep = new JButton("Sleep");
    Sleep.setBackground(Color.LIGHT_GRAY);
    Sleep.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            Sleep();
        }
    });
    JButton Wake = new JButton("Wake Up");
    Wake.setBackground(Color.LIGHT_GRAY);
    Wake.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            Wake();
        }
    });
    JButton Res = new JButton("Reset");
    Res.setBackground(Color.LIGHT_GRAY);
    Res.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            Res();
        }
    });
    JButton Food = new JButton("Food");
    Food.setBackground(Color.LIGHT_GRAY);
    Food.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            Food();
        }
    });
    JButton Info = new JButton("Info");
    Info.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            Info();
        }
    });
    Info.setBackground(Color.LIGHT_GRAY);
    JButton ExitAQP = new JButton("Exit");
    ExitAQP.setBackground(Color.LIGHT_GRAY);
    ExitAQP.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e) 
        {
            System.exit(0);
        }
    });
    ButtonPanel.add(Addanim);
    ButtonPanel.add(Sleep);
    ButtonPanel.add(Wake);
    ButtonPanel.add(Res);
    ButtonPanel.add(Food);
    ButtonPanel.add(Info);
    ButtonPanel.add(ExitAQP);
}
public void actionPerformed(ActionEvent e) 
{
    if(e.getSource()=="Confirm Add")
    {
        if(JDA.GetDone())
        {
            FishSet.add(JDA.GetAnim()) ;
            JOptionPane.showMessageDialog(this, JDA.GetAnim().getAnimalName());
        }
    }
}
public void setBackgr(int sel)
{
    switch (sel)
    {
        case 0:
            img=null;
            this.setBackground(Color.WHITE);
            break;
        case 1:
            img=null;
            this.setBackground(Color.BLUE);
            break;
        case 2:
        try {
            img = ImageIO.read(new File("src/aquarium_background.jpg"));
        } catch (IOException e) {
            System.out.println("incorrect input image file path!!!!");
            e.printStackTrace();
        }
    }
}
private void ConfirmAnimal()
{
    if(JDA.GetAnim()!=null)
    {
        JOptionPane.showMessageDialog(this, "fish exists");
    }
    else
    {
        JOptionPane.showMessageDialog(this, "fish doesn't exists");
    }
}
}

和 JDialog 代碼:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class AddAnimalDialog extends JDialog 
{
private JTextField SizeField;
private JTextField HSpeedField;
private JTextField VSpeedField;
private int SelectedAnimal;
private int SelectedColor;
private Boolean IsDone;
private JButton SaveBTN;
Swimmable Animal;
public AddAnimalDialog(Swimmable Anim)
{
    super();
    this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    IsDone = false;
    gui();
    Anim = Animal;
}
private void gui()
{
    this.setSize(new Dimension(400, 300));
    JPanel panel = new JPanel();
    this.getContentPane().add(panel);
    GridBagLayout gbl_panel = new GridBagLayout();
    gbl_panel.columnWidths = new int[]{151, 62, 63, 0};
    gbl_panel.rowHeights = new int[]{20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    gbl_panel.columnWeights = new double[]{0.0, 1.0, 1.0, Double.MIN_VALUE};
    gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    panel.setLayout(gbl_panel);

    JLabel AnimName = new JLabel("Animal Type:");
    GridBagConstraints gbc_AnimName = new GridBagConstraints();
    gbc_AnimName.insets = new Insets(0, 0, 5, 5);
    gbc_AnimName.gridx = 0;
    gbc_AnimName.gridy = 1;
    panel.add(AnimName, gbc_AnimName);
    JComboBox AnimTypecomboBox = new JComboBox();
    AnimTypecomboBox.addItem("Fish");
    AnimTypecomboBox.addItem("Jellyfish");
    GridBagConstraints gbc_AnimTypecomboBox = new GridBagConstraints();
    gbc_AnimTypecomboBox.insets = new Insets(0, 0, 5, 5);
    gbc_AnimTypecomboBox.anchor = GridBagConstraints.NORTH;
    gbc_AnimTypecomboBox.gridx = 1;
    gbc_AnimTypecomboBox.gridy = 1;
    panel.add(AnimTypecomboBox, gbc_AnimTypecomboBox);

    JLabel AnimSize = new JLabel("Size(between 20 to 320):");
    GridBagConstraints gbc_AnimSize = new GridBagConstraints();
    gbc_AnimSize.insets = new Insets(0, 0, 5, 5);
    gbc_AnimSize.gridx = 0;
    gbc_AnimSize.gridy = 2;
    panel.add(AnimSize, gbc_AnimSize);

    SizeField = new JTextField();
    GridBagConstraints gbc_SizeField = new GridBagConstraints();
    gbc_SizeField.insets = new Insets(0, 0, 5, 5);
    gbc_SizeField.fill = GridBagConstraints.HORIZONTAL;
    gbc_SizeField.gridx = 1;
    gbc_SizeField.gridy = 2;
    panel.add(SizeField, gbc_SizeField);
    SizeField.setColumns(10);

    JLabel HSpeed = new JLabel("Horizontal Speed(between 1 to 10):");
    GridBagConstraints gbc_HSpeed = new GridBagConstraints();
    gbc_HSpeed.insets = new Insets(0, 0, 5, 5);
    gbc_HSpeed.gridx = 0;
    gbc_HSpeed.gridy = 3;
    panel.add(HSpeed, gbc_HSpeed);

    HSpeedField = new JTextField();
    GridBagConstraints gbc_HSpeedField = new GridBagConstraints();
    gbc_HSpeedField.insets = new Insets(0, 0, 5, 5);
    gbc_HSpeedField.fill = GridBagConstraints.HORIZONTAL;
    gbc_HSpeedField.gridx = 1;
    gbc_HSpeedField.gridy = 3;
    panel.add(HSpeedField, gbc_HSpeedField);
    HSpeedField.setColumns(10);

    JLabel VSpeed = new JLabel("Vertical Speed(between 1 to 10):");
    GridBagConstraints gbc_VSpeed = new GridBagConstraints();
    gbc_VSpeed.insets = new Insets(0, 0, 5, 5);
    gbc_VSpeed.gridx = 0;
    gbc_VSpeed.gridy = 4;
    panel.add(VSpeed, gbc_VSpeed);

    VSpeedField = new JTextField();
    GridBagConstraints gbc_VSpeedField = new GridBagConstraints();
    gbc_VSpeedField.insets = new Insets(0, 0, 5, 5);
    gbc_VSpeedField.fill = GridBagConstraints.HORIZONTAL;
    gbc_VSpeedField.gridx = 1;
    gbc_VSpeedField.gridy = 4;
    panel.add(VSpeedField, gbc_VSpeedField);
    VSpeedField.setColumns(10);

    JLabel lblAnimalColor = new JLabel("Animal Color:");
    GridBagConstraints gbc_lblAnimalColor = new GridBagConstraints();
    gbc_lblAnimalColor.insets = new Insets(0, 0, 5, 5);
    gbc_lblAnimalColor.gridx = 0;
    gbc_lblAnimalColor.gridy = 5;
    panel.add(lblAnimalColor, gbc_lblAnimalColor);

    JComboBox ColorComboBox = new JComboBox();
    ColorComboBox.setModel(new DefaultComboBoxModel(new String[] {"Red", "Magenta", "Cyan", "Blue", "Green"}));
    GridBagConstraints gbc_ColorComboBox = new GridBagConstraints();
    gbc_ColorComboBox.insets = new Insets(0, 0, 5, 5);
    gbc_ColorComboBox.fill = GridBagConstraints.HORIZONTAL;
    gbc_ColorComboBox.gridx = 1;
    gbc_ColorComboBox.gridy = 5;
    panel.add(ColorComboBox, gbc_ColorComboBox);

    JButton btnAddAnimal = new JButton("Confirm Add");
    GetInput(btnAddAnimal,AnimTypecomboBox,ColorComboBox);
    GridBagConstraints gbc_btnAddAnimal = new GridBagConstraints();
    gbc_btnAddAnimal.insets = new Insets(0, 0, 0, 5);
    gbc_btnAddAnimal.gridx = 0;
    gbc_btnAddAnimal.gridy = 9;
    panel.add(btnAddAnimal, gbc_btnAddAnimal);

    JButton btnClear = new JButton("Clear");
    GridBagConstraints gbc_btnClear = new GridBagConstraints();
    gbc_btnClear.gridx = 2;
    gbc_btnClear.gridy = 9;
    panel.add(btnClear, gbc_btnClear);
}
private Color Getcolor(Object obj)
{
    Color clr=Color.RED;
    if(obj instanceof String)
    {
        switch((String)obj)
        {
        case "Red":
            clr = Color.RED;
            break;
        case "Magenta":
            clr = Color.MAGENTA;
            break;
        case "Cyan":
            clr = Color.CYAN;
            break;
        case "Blue":
            clr = Color.BLUE;
            break;
        case "Green":
            clr = Color.GREEN;
            break;
        }
    }
    return clr;
}
private Fish MakeFish(int size,Color col,int horSpeed,int verSpeed)
{
    return new Fish(size,col,horSpeed,verSpeed);
}
private Jellyfish MakeJellyfish(int size,Color col,int horSpeed,int verSpeed)
{
    return new Jellyfish(size,col,horSpeed,verSpeed);
}
public Swimmable GetAnim()
{
    return Animal;
}
public Boolean GetDone()
{
    return IsDone;
}
private void GetInput(JButton Jbtn,JComboBox type,JComboBox col)
{
    Jbtn.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent arg0) 
        {
            if((type.getSelectedItem() instanceof String)&&
                ((String)type.getSelectedItem()=="Fish"))   
            {
                Color clr=Color.RED;
                Object tmp = col.getSelectedItem();
                if(col.getSelectedItem() instanceof String)
                {
                    clr = Getcolor(tmp);

                }
                int size = Integer.parseInt(SizeField.getText());
                int Hspeed = Integer.parseInt(HSpeedField.getText());
                int VSpeed = Integer.parseInt(VSpeedField.getText());
                Animal = MakeFish(size,clr,Hspeed,VSpeed);
            }
            else if((type.getSelectedItem() instanceof String)&&
                    ((String)type.getSelectedItem()=="Jellyfish"))
            {
                Color clr=Color.RED;
                Object tmp = type.getSelectedItem();
                if(col.getSelectedItem() instanceof String)
                {
                    clr = Getcolor(tmp);
                }
                int size = Integer.parseInt(SizeField.getText());
                int Hspeed = Integer.parseInt(HSpeedField.getText());
                int VSpeed = Integer.parseInt(VSpeedField.getText());
                Animal = MakeJellyfish(size,clr,Hspeed,VSpeed);
            }
            IsDone=true;
            Hide();
            SaveBTN = Jbtn;
        }
    });
}
private void Hide()
{
    this.setVisible(false);
}
public JButton GetBTN()
{
    return SaveBTN;
}
}

所以簡而言之,在 JDialog 中,我需要從組合框和 texfields 中獲取信息並將該數據發送到對象構造函數,然后在“保存”按鈕上單擊我需要將對象從我使用構造函數創建的 JDialog 傳輸到 JPanel , 我該怎么做?

我意識到我可以將 JPanel 發送到 JDialog,並在我創建對象的 JDialog 代碼中,相應地修改 Jpanel 的 Hashset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM