如果您只想通过访问其 setText() 方法来更改标签。您所要做的就是以下(保持其他一切相同):
public void makeFrames() {
CreateFrame frame = new CreateFrame("Label1");
frame.label.setText("new Label");
}
以下是查看标签更改的快速技巧:
public class Main {
JButton button;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Main object = new Main();
object.makeFrames();
}
});
}
public void makeFrames() {
final CreateFrame frame = new CreateFrame("Label1");
button = new JButton("Click");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.label.setText("new Label");
}
});
frame.frame.add(BorderLayout.NORTH, button);
}
}
当您单击按钮时,标签将更改为新标签。
编辑 2:(对 main() 所做的更改,按钮声明为静态,因此可以从 main() 中访问它
public class Main {
static JButton button;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final CreateFrame frameFromMain = new CreateFrame("Label1");
button = new JButton("Click");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frameFromMain.label.setText("new Label");
}
});
frameFromMain.frame.add(BorderLayout.NORTH, button);
}
});
}
}
请记住,您访问 CreateFrame 类中的标签就像访问类的任何其他成员一样。如果您像这样声明变量为静态,则可以直接访问它:
public class CreateFrame {
JFrame frame;
static JLabel label;
// the rest of the class remains the same
}
public class Main {
static JButton button;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
CreateFrame frameFromMain = new CreateFrame("Label1");
button = new JButton("Click");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CreateFrame.label.setText("new Label");
}
});
frameFromMain.frame.add(BorderLayout.NORTH, button);
}
});
}
}
编辑 3:
如果您不想要该按钮,请删除该按钮的代码并执行以下操作:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
CreateFrame frameFromMain = new CreateFrame("Label1");
CreateFrame.label.setText("new Label"); // accessing label directly from main()
}
});
}
编辑 4:使用 OP 的代码:
public class TestFrame extends javax.swing.JFrame {
javax.swing.JLabel label;
public TestFrame() {
initComponents();
label=sampleLabel;
}
private void initComponents() {
sampleLabel = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
sampleLabel.setText("anotherText");
add(sampleLabel);
pack();
}
private javax.swing.JLabel sampleLabel;
}
然后你的 main() 看起来像这样:
public class Main {
public static void main(String[] args) {
final TestFrame frame = new TestFrame();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
frame.setVisible(true);
}
});
frame.label.setText("Text From Main");
}
}
我做了最小的改变。这段代码运行完美,可以满足您的要求。我摆脱了您的“getContentPane”,因为您在 Java 6、7 中不需要它。我也摆脱了您的布局设置,因为我自己不熟悉它们。你需要学习导入java类。
您似乎正处于学习 Java 的早期阶段。我建议您坚持使用命令行程序,直到您弄清楚 Java 是如何工作的,然后再继续使用 Swing。