如何跨两个类使用JTextField。例如从一个类获取一个整数值并将其显示在另一个类的textField中。从jFrame到JFrame如何在多个类中使用JTextField
回答
有那么嵌套让您拥有它得到这实际上显示它如一个内部的整数值类:
//Note: this is only a rough representation of the concept
// what I am trying to get across, it wouldn't really
// work like this
class Displayer{
ValueGetter valueGetter;
JTextField textField;
public Displayer(){
valueGetter = new ValueGetter();
}
public void display(){
int value = valueGetter.workOutValue();
textField.setText(value);
}
}
即使你能做到这一点,你也不应该这样做。取而代之的是,有两个JTextField
s表示两者属于Integer
值
你的问题是:
我怎么会用一个JTextField在两个班。例如从一个类获取一个整数值并将其显示在另一个类的textField中。
而且我会建议您以不同的角度思考这个问题。最好考虑一般问题:
一个对象如何与其他对象共享其数据及其状态?
一个常见而有用的答案是给出第一个类,这里是包含JTextField,getter方法的类,如果需要setter方法,允许其他类有能力检索JTextField(如果需要的话甚至可以改变它)。例如,你可以给你的GUI类中的方法是这样的:
public String getTextFieldText() {
return textField.getText();
}
然后,你必须确保需要这些信息的类有一个有效实例的GUI类,即一个实例的显示 GUI,然后让它在需要来自GUI的最新信息时调用此方法。
编辑 编辑完你的问题,并有加,
从JFrame中到JFrame中
这让我担心,因为它意味着你的程序使用一个以上的JFrame中。如果是这样,请重新考虑您的程序设计,因为它需要多个JFrame是不寻常的。如果需要显示另一个窗口,通常这是通过显示一个模态或非模态JDialog来完成的。如果需要更改“视图”,通常使用CardLayout交换JPanel。
编辑2
为了什么,我描述了一个例子,请参阅从this answer我的代码。这种代码通过从一个模态的JDialog信息转换成启动它,准确地使用了我所提到的技术JFrame中:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogEg {
private static void createAndShowGUI() {
MainPanelGen mainPanelGen = new MainPanelGen();
JFrame frame = new JFrame("DialogEg");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanelGen.getMainPanel());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
class MainPanelGen {
private JPanel mainPanel = new JPanel();
private JTextField field = new JTextField(10);
private JButton btn = new JButton(new BtnActn());
private JDialog dialog;
private DialogPanel dialogPanel = new DialogPanel();
public MainPanelGen() {
mainPanel.add(field);
mainPanel.add(btn);
field.setEditable(false);
field.setFocusable(false);
}
public JPanel getMainPanel() {
return mainPanel;
}
private class BtnActn extends AbstractAction {
BtnActn() {
super("Button");
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (dialog == null) {
Window win = SwingUtilities.getWindowAncestor(mainPanel);
if (win != null) {
dialog = new JDialog(win, "My Dialog",
Dialog.ModalityType.APPLICATION_MODAL);
dialog.getContentPane().add(dialogPanel);
dialog.pack();
dialog.setLocationRelativeTo(null);
}
}
dialog.setVisible(true); // here the modal dialog takes over
System.out.println (dialogPanel.getFieldText());
field.setText(dialogPanel.getFieldText());
}
}
}
class DialogPanel extends JPanel {
private JTextField field = new JTextField(10);
private JButton exitBtn = new JButton(new ExitBtnAxn("Exit"));
public DialogPanel() {
add(field);
add(exitBtn);
}
public String getFieldText() {
return field.getText();
}
private class ExitBtnAxn extends AbstractAction {
public ExitBtnAxn(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent arg0) {
Window win = SwingUtilities.getWindowAncestor(DialogPanel.this);
if (win != null) {
win.dispose();
}
}
}
}
JPanel中显示的模态的JDialog已经一个JTextField字段称为(适当地) field
:
class DialogPanel extends JPanel {
private JTextField field = new JTextField(10);
而且具有一个getter方法,以允许其他类以检查该字段的状态:
public String getFieldText() {
return field.getText();
}
主要GUI类,称为MainPanelGen携带称为dialogPanel
的DialogPanel类的一个实例:
class MainPanelGen {
// .... etc
private DialogPanel dialogPanel = new DialogPanel();
在主GUI一个ActionListener,一个模态的JDialog创建“懒惰”,即,对话是如果JDialog变量为空,则创建实例,然后将该实例分配给此变量。该DailogPanel对象放置在模态对话框显示:
public void actionPerformed(ActionEvent arg0) {
if (dialog == null) {
Window win = SwingUtilities.getWindowAncestor(mainPanel);
if (win != null) {
dialog = new JDialog(win, "My Dialog",
Dialog.ModalityType.APPLICATION_MODAL);
dialog.getContentPane().add(dialogPanel);
dialog.pack();
dialog.setLocationRelativeTo(null);
}
}
由于对话框是模态,当显示该对话框的主界面的代码流冻结,并且不会重新启动,直到对话框不再可见。因此,我们知道在对话框中调用setVisible(true)
之后的所有代码都处于假死状态,并且只有在处理完对话框后才会重新启动。然后,我们查询DialogPanel的文本框的文本和我们来说:
dialog.setVisible(true); // here the modal dialog takes over
System.out.println (dialogPanel.getFieldText());
field.setText(dialogPanel.getFieldText());
- 1. actionPerformed使用多个JTextField的
- 2. 使用toString为多个JTextField
- 3. 如何在Android中使用多个类
- 4. Clean多个JTextField
- 5. 如何在JTextField中
- 6. 如何在JTextField中
- 7. 如何在一个JTextField
- 8. 如何从另一个JtextField更新JTextField
- 9. 如何在Jlabel顶部使用Jtextfield?
- 10. 如何使用多个类在PHP
- 11. JTextField中如何在文本
- 12. 如何在JTextField中方法
- 13. 如何在Java中的一个包中使用多个类?
- 14. 如何在多个类中使用相同的类别?
- 15. 如何在用户类型中获取JTextField内容的长度?
- 16. 如何使JTextField扩展一个BorderLayout(Java)
- 17. 如何使JTextField中的游标跨越FlowLayout中的多行?
- 18. 如何使用json_encode在PHP中调用多个类?
- 19. 如何在java中的多个类中使用变量?
- 20. 在一个单独的类中使用ActionListener在原始类中使用来自JTextfield的数据
- 21. 如何在多个输入后更改JTextField字体(更新)
- 22. 如何使JTextField半透明
- 23. 如何从一个JTextField数据传递到另一个的JTextField
- 24. 我如何在Java中每次输入一个值到数组中使用JTextField
- 25. 使用JTextField从一个类到另一个
- 26. 如何在另一个不可编辑的JTextField中动态复制JTextField内容
- 27. 使用私人类访问JTextField
- 28. 我如何一起使用JTextField和JLabel?
- 29. 如何使用jtextfield值弹出jtable
- 30. 如何使用log4j与多个类?
这会工作,谢谢! –