我想添加到窗口,从x,y位置JTextArea
开始添加滚动条。
问题是,当我对代码进行可视化时,它确实填充了500x500窗口,我确实希望在x,y pos只填充200x200的完整。
我做错了什么?这是我的代码:
public static void main(String args[])
{
JFrame window = new JFrame();
window.setSize(500, 500);
window.setResizable(false);
JTextArea ta = new JTextArea("Default message");
ta.setEditable(true);
JScrollPane scroll = new JScrollPane(ta);
scroll.setBounds(10,10,200,200);
window.add(scroll);
window.setVisible(true);
}
答案 0 :(得分:4)
不要使用setBounds()来设置组件的大小。 Swing使用布局管理器来调整组件的大小。
默认情况下,JFrame使用BorderLayout,您将组件添加到CENTER,以便组件占用所有可用空间。
取而代之的是:
JTextArea text Area = new JTextArea(5, 40);
JScrollPane scrollPane = new JScrollPane( textArea );
frame.add(scrollPane, BorderLayout.NORTH);
frame.pack();
frame.setVisible();
当您显示框架时,文本区域将占据整个空间,但如果您将框架调整为更大,则文本区域将仅显示在NORTH中,并且CENTER中将有空白区域。
答案 1 :(得分:3)
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class PaddedTextArea {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
// the GUI as seen by the user (without frame)
JPanel gui = new JPanel(new BorderLayout());
// adjust as needed
gui.setBorder(new EmptyBorder(20,10,20,10));
// better way to size a text area is using columns/rows
// in the constructor
JTextArea ta = new JTextArea(3,40);
JScrollPane sp = new JScrollPane(ta);
gui.add(sp);
JFrame f = new JFrame("Padded Text Area");
f.add(gui);
// Ensures JVM closes after frame(s) closed and
// all non-daemon threads are finished
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
// See https://stackoverflow.com/a/7143398/418556 for demo.
f.setLocationByPlatform(true);
// ensures the frame is the minimum size it needs to be
// in order display the components within it
f.pack();
// should be done last, to avoid flickering, moving,
// resizing artifacts.
f.setVisible(true);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency
SwingUtilities.invokeLater(r);
}
}
更一般地说:Java GUI可能必须在许多平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置。要组织强大的GUI组件,而是使用布局管理器,或combinations of them 1 ,以及布局填充和& white space 2 的边框。