私はアプリケーションを構築していて、テキストフィールドの内容を '転送'したいが、何か問題があり、なぜ..1つのJFrameから別のJFrameにテキストを転送する(コードで間違いを見つけられない)
私のメインフレームのコードです。ユーザーがfile-new-Actorにナビゲートすると、Frameがポップアップします。ここで、ユーザーはいくつかの情報を入力する必要があります。この情報(この場合はテキストからテキスト)をメインフレームのテキストフィールドに転送したいと思います。私はメニューに移動し、新しい俳優を選択すると、ウィンドウのポップをこのコードを使用して
class NewActorFrame extends JFrame implements ItemListener
{
final String[] typeList = {"Human","Machine","System"};
public JTextField actorNameText = new JTextField();
private JButton btnCreateActor = new JButton("Create");
private JLabel lblTypeOfActor = new JLabel("Type of actor");
private JComboBox typeOfActor = new JComboBox();
private JPanel topPanel = new JPanel();
public NewActorFrame()
{
setTitle("Create a new actor");
setSize(489, 414);
setBackground(Color.gray);
getContentPane().setLayout(new BorderLayout());
topPanel.setLayout(null);
getContentPane().add(topPanel, BorderLayout.CENTER);
// Create a combobox where the user can choose the type of actor to be created
typeOfActor.setBounds(140, 109, 260, 20);
topPanel.add(typeOfActor);
// Populate the combobox list
for(int countTypes = 0; countTypes < typeList.length; countTypes++){
typeOfActor.addItem(typeList[countTypes]);
}
// Disable edits - the user can not add other types of actors
typeOfActor.setEditable(false);
lblTypeOfActor.setBounds(12, 112, 121, 15);
topPanel.add(lblTypeOfActor);
JLabel lblNameOfActor = new JLabel("Name of Actor");
lblNameOfActor.setBounds(12, 155, 121, 15);
topPanel.add(lblNameOfActor);
actorNameText.setBounds(140, 153, 225, 19);
topPanel.add(actorNameText);
actorNameText.setColumns(10);
btnCreateActor.setBounds(293, 229, 117, 25);
topPanel.add(btnCreateActor);
// Watch for changes
typeOfActor.addItemListener(this);
btnCreateActor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
okButtonAction();
}
});
}
public void itemStateChanged(ItemEvent event)
{
if(event.getSource() == typeOfActor
&& event.getStateChange() == ItemEvent.SELECTED)
{
System.out.println("Change:"
+ typeOfActor.getSelectedItem());
}
}
public String getFieldText() {
return actorNameText.getText();
}
private void okButtonAction() {
System.out.println(getFieldText());
System.out.println("Create pressed");
this.dispose();
}
}
:
public class GUI {
private JFrame frmGUI = new JFrame();
private JMenuItem mntmActor;
private JTextField gotText = new JTextField();
private NewActorFrame actorFrame = new NewActorFrame();
private JPanel panel = new JPanel();
private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI window = new GUI();
window.frmGUI.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
initComponents();
createEvents();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////// this method is for visualising all the components of the GUI such
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// as
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// buttons,
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// panels,
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// etc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void initComponents() {
// TODO Auto-generated method stub
frmGUI.setTitle("Use Case Tool");
frmGUI.setBounds(100, 100, 762, 621);
frmGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmGUI.getContentPane().setLayout(new BorderLayout(0, 0));
// add elements to the form
frmGUI.getContentPane().add(panel, BorderLayout.SOUTH);
frmGUI.getContentPane().add(tabbedPane, BorderLayout.CENTER);
tabbedPane.addTab("New tab", null, gotText, null);
gotText.setColumns(10);
JTree tree = new JTree();
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JPanel textView = new JPanel();
tabbedPane.addTab("Text View", null, textView, null);
}
});
tree.setModel(new DefaultTreeModel(new DefaultMutableTreeNode("Project \"Test\"") {
{
add(new DefaultMutableTreeNode("Use Cases"));
add(new DefaultMutableTreeNode("Actors"));
}
}));
frmGUI.getContentPane().add(tree, BorderLayout.WEST);
JMenuBar menuBar = new JMenuBar();
frmGUI.setJMenuBar(menuBar);
JMenu mnFile = new JMenu("FIle ");
menuBar.add(mnFile);
JMenu mnN = new JMenu("New");
mnFile.add(mnN);
JMenuItem mntmFolderInProject = new JMenuItem("Folder in Project");
mnN.add(mntmFolderInProject);
mntmActor = new JMenuItem("Actor");
mnN.add(mntmActor);
JMenuItem mntmUseCase = new JMenuItem("Use Case");
mnN.add(mntmUseCase);
JMenuItem mntmSystem = new JMenuItem("System");
mnN.add(mntmSystem);
JMenuItem mntmExport = new JMenuItem("Exit");
mnFile.add(mntmExport);
JMenu mnCreate = new JMenu("Help");
menuBar.add(mnCreate);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////// this method is for the events which are going to be triggered
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private void createEvents() {
mntmActor.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Create a new actor");
actorFrame.setVisible(true);
gotText.setText(actorFrame.getFieldText());
}
});
}
}
これが現れ、他の1のために今のメインウィンドウのためのクラスであり、私は名前の値を入力しますが、ボタンを押すとテキストは表示されません。私は、これを行うと再びアクションを作成し、メニューのActorを押すと、前のテキストフィールドの値が取得されることに気付きました。そして、これは私が欲しいものではありません。
お手伝いをしてくださったみなさん、ありがとうございます!
1)、2)は、JavaのGUIは、「異なるOS上で動作する必要がある[複数JFramesの使用、グッド/悪い習慣?](http://stackoverflow.com/q/9554636/418556)を参照してください画面サイズ、画面さまざまなロケールで異なるPLAFを使用しています。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –
*「お手伝いしてくれている皆様、ありがとうございます!」*質問してくれてありがとう!待って。何?あなたの質問*「どのようにX?」*ですか?その場合は、[質問の編集](http://stackoverflow.com/posts/37336756/edit)として追加してください。そうでない場合は、特定の質問を考えて同じことをしてください(編集)。 –
はBTW - 'NewActorFrame'は' NewActorModalDialog'であるべきで、それが何かを拡張するが、 'JDialog'の標準インスタンスを使用しないでください.. –