我无法理解为什么JTextArea没有显示我的代码。 这是我第一次在swing程序中使用FocusAdapter类。
这是代码。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Focus extends FocusAdapter
{
JFrame f;
JTextArea jt;
Focus()
{
f=new JFrame("focus");
jt=new JTextArea(50,50);
jt.addFocusListener(this);
jt.setFont(new Font("varinda",Font.PLAIN,15));
f.setSize(550,550);
f.setLayout(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void focusGained(FocusEvent fe)
{
jt.setText("focusgained");
}
public static void main(String s[])
{
new Focus();
}
}
答案 0 :(得分:2)
我无法理解为什么JTextArea没有显示我的代码。这是我第一次在swing程序中使用FocusAdapter类。
这是因为您将JFrame的布局设置为null,并且我没有看到您将JTextField添加到JFrame。
你可以这样做:
f.add(jt);
jt.setBounds(x, y, width, height); //Give int values for x, y, width, height
最后但并非最不重要的是,尝试使用JFrame的布局,您可以考虑向JFrame添加JPanel,而不是直接将组件添加到JFrame中。
答案 1 :(得分:2)
避免使用null
布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正
问题的基本答案是,您需要将JTextArea
实际添加到展位容器中,例如,您的JFrame
,...
public class Focus extends FocusAdapter
{
JFrame f;
JTextArea jt;
Focus()
{
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
jt=new JTextArea(50,50);
jt.addFocusListener(this);
jt.setFont(new Font("varinda",Font.PLAIN,15));
f = new JFrame("Testing");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new JScrollPane(jt));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
public void focusGained(FocusEvent fe)
{
jt.setText("focusgained");
}
public static void main(String s[])
{
new Focus();
}
}
看看
了解更多详情
答案 2 :(得分:0)
您尚未将JTextArea添加到JFrame。这就是为什么它'没有添加。 ;)
您可以通过以下方式实现:
f.add(jt);
f.setSize(500,500);
或:
f.add(new JScrollPane(jt) );