jpane1_java – 如何将数据从一个JPanel传递给其他...

您没有显示任何代码,因此无法知道为什么您会获得“null”值.如果您希望所有三个JPanel都包含具有相同内容的JTextField,则有两种可能的解决方案:

>将共享的JTextField放在JTabbedPane所持有的JPanel之外,而不是放在保存JTabbedPane的JPanel中,这样无论显示什么标签,该字段始终可见,或者

>使用多个JTextField但让它们共享相同的Document或“model”.

例如.,

import java.awt.Dimension;

import javax.swing.*;

import javax.swing.text.PlainDocument;

public class SharedField extends JTabbedPane {

private static final int TAB_COUNT = 5;

private static final int MY_WIDTH = 600;

private static final int MY_HEIGHT = 300;

PlainDocument doc = new PlainDocument();

public SharedField() {

for (int i = 0; i < TAB_COUNT; i++) {

JTextField tField = new JTextField(10);

tField.setDocument(doc);

JPanel panel = new JPanel();

panel.add(tField);

add("Panel " + i, panel);

// to demonstrate some of the JTextFields acting like

// a label

if (i % 2 == 1) { // if i is odd

tField.setEditable(false);

tField.setBorder(null);

}

}

}

@Override

public Dimension getPreferredSize() {

return new Dimension(MY_WIDTH, MY_HEIGHT);

}

private static void createAndShowUI() {

JFrame frame = new JFrame("SharedField");

frame.getContentPane().add(new SharedField());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

public static void main(String[] args) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

createAndShowUI();

}

});

}

}

编辑1

我看到你在java-forums.org/上交叉发布了这个,你展示了一些代码:

pacage Demotool;

Class:MainFrame

This is the actionPerformed code of first panel

both str and scrTxt is (public static)

public void actionPerformed(ActionEvent e)

{

String act=e.getActionCommand();

if(act.equals("ADD"))

{

str=scrnTxt.getText();

System.out.println("Hi :"+str);

Demotool.DemoTool.jtp.setSelectedIndex(1);

}

}

using the belove code i tried to access the data but I am getting null String:

System.out.println("Hello:"+Demotool.MainFrame.str);

问题:

>除非有充分的理由,否则不要使用静态变量或方法.在这里,你没有.

>您可能尝试在将任何内容放入其中之前访问MainFrame.str变量,使其为null,或者您在第二个类中创建一个新的MainFrame对象,一个未显示的对象,因此str变量为空或null – 很难说.

无论哪种方式,这种设计并不好.你最好向我们展示一个小的演示程序,它显示你编译和运行的代码的问题,sscce,所以我们可以玩和修改你的代码,并且能够向你展示一个不错的解决方案.

一个这样不错的解决方案是将DocumentListener添加到JTextField,以便将JTextField保存的文本的更改“推送”到正在侦听更改的观察者(您的其他类).

例如,使用DocumentListeners:

import java.awt.Dimension;

import javax.swing.*;

import javax.swing.event.DocumentEvent;

import javax.swing.event.DocumentListener;

import javax.swing.text.BadLocationException;

public class SharedField2 extends JTabbedPane {

private static final int LABEL_PANEL_COUNT = 4;

private static final int MY_WIDTH = 600;

private static final int MY_HEIGHT = 300;

public SharedField2() {

TextFieldPanel tfPanel = new TextFieldPanel();

LabelPanel[] labelPanels = new LabelPanel[LABEL_PANEL_COUNT];

add("TextFieldPanel", tfPanel);

for (int i = 0; i < labelPanels.length; i++) {

labelPanels[i] = new LabelPanel();

// add each label panel's listener to the text field

tfPanel.addDocumentListenerToField(labelPanels[i].getDocumentListener());

add("Label Panel " + i, labelPanels[i]);

}

}

@Override

public Dimension getPreferredSize() {

return new Dimension(MY_WIDTH, MY_HEIGHT);

}

private static void createAndShowUI() {

JFrame frame = new JFrame("SharedField2");

frame.getContentPane().add(new SharedField2());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

public static void main(String[] args) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

createAndShowUI();

}

});

}

}

class TextFieldPanel extends JPanel {

private JTextField tField = new JTextField(10);

public TextFieldPanel() {

add(tField);

}

public void addDocumentListenerToField(DocumentListener listener) {

tField.getDocument().addDocumentListener(listener);

}

}

class LabelPanel extends JPanel {

private DocumentListener myListener;

private JLabel label = new JLabel();

public LabelPanel() {

add(label);

myListener = new DocumentListener() {

@Override

public void changedUpdate(DocumentEvent e) {

updateLabel(e);

}

@Override

public void insertUpdate(DocumentEvent e) {

updateLabel(e);

}

@Override

public void removeUpdate(DocumentEvent e) {

updateLabel(e);

}

private void updateLabel(DocumentEvent e) {

try {

label.setText(e.getDocument().getText(0,

e.getDocument().getLength()));

} catch (BadLocationException e1) {

e1.printStackTrace();

}

}

};

}

public DocumentListener getDocumentListener() {

return myListener;

}

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部