我已经在互联网上寻找解决方案,而且我似乎找不到适合我的方案......如果你想知道,我是Swing的新手。所以,这就是JButton
出现的问题,但是JTextArea
并没有。我不知道如何解决这个问题......帮帮我们......
public class FrameCreation
{
public JFrame createFrame(int width, int height, String name)
{
JFrame frame = new JFrame(name);
frame.setVisible(true);
frame.setSize(width, height);
frame.setLayout(null);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.DARK_GRAY);
return frame;
}
public JButton createButton(int width, int height, int xPos, int yPos, String text)
{
JButton button = new JButton(text);
button.setBounds(xPos, yPos, width, height);
button.setBackground(Color.GRAY);
button.setForeground(Color.WHITE);
return button;
}
public JTextArea createTextArea(int width, int height, int xPos, int yPos)
{
JTextArea txt = new JTextArea();
txt.setVisible(true);
txt.setBounds(xPos, yPos, width, height);
txt.setText("Help this poor JTextArea to appear on the frame...");
return txt;
}
}
public class Main
{
public static void main(String[] args)
{
FrameCreation mainFrame = new FrameCreation();
JFrame f = new FrameCreation().createFrame(600, 600, "My Frame");
f.add(mainFrame.createButton(100, 40, 10, 10, "Click me!"));
f.add(mainFrame.createTextArea(200, 200, 390, 10));
}
}
答案 0 :(得分:0)
找到你真正的问题;请不要使用frame.setLayout(null);
。 Here是一篇解释为什么空布局不好的帖子。相反,我使用了流程布局,它按照预期的方式工作。这是代码(我把它们改成了两个类):
Main.java
import javax.swing.*;
public class Main
{
public static void main(String[] args)
{
FrameCreation mainFrame = new FrameCreation();
JFrame f = new FrameCreation().createFrame(600, 600, "My Frame");
f.add(mainFrame.createButton(100, 40, 10, 10, "Click me!"));
f.add(mainFrame.createTextArea(300, 300, 390, 10));
f.setVisible(true);
}
}
FrameCreation.java
import javax.swing.*;
import java.awt.*;
public class FrameCreation
{
public JFrame createFrame(int width, int height, String name)
{
JFrame frame = new JFrame(name);
frame.setVisible(true);
frame.setSize(width, height);
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.DARK_GRAY);
return frame;
}
public JButton createButton(int width, int height, int xPos, int yPos, String text)
{
JButton button = new JButton(text);
button.setBounds(xPos, yPos, width, height);
button.setBackground(Color.GRAY);
button.setForeground(Color.WHITE);
return button;
}
public JTextArea createTextArea(int width, int height, int xPos, int yPos)
{
JTextArea txt = new JTextArea();
txt.setBounds(xPos, yPos, width, height);
txt.setText("Help this poor JTextArea to appear on the frame...");
return txt;
}
}
这是输出:
答案 1 :(得分:0)
删除frame.setVisible(true);从FrameCreation类中,添加它f.setVisible(true);在主要方法的最后。
public static void main(String[] args) {
FrameCreation mainFrame = new FrameCreation();
JFrame f = new FrameCreation().createFrame(600, 600, "My Frame");
f.add(mainFrame.createButton(100, 40, 10, 10, "Click me!"));
f.add(mainFrame.createTextArea(200, 200, 390, 10));
//This new line
f.setVisible(true);
}
答案 2 :(得分:0)
当您向可见的GUI添加组件时,您需要告诉框架重新绘制自己。
所以你需要添加:
f.revalidate();
f.repaint();
在main()方法的末尾。
但是,这不是正确的解决方案,不应该使用。你需要重新设计你的课程。
我是Swing的新手
此处列出的代码有太多问题。所以我建议你先阅读Swing Tutorial的Swing基础知识。
可能从How to Use Text Areas
上的部分开始。 TextDemo
将向您展示如何更好地构建代码,以便您: