2014-01-07 65 views
1

我想添加到窗口从x,y位置JTextArea与滚动。 问题是,当我做可视化代码时,它确实填充了500x500窗口,我希望在x,y pos只填充200x200的完整值。GUI JTextArea&JScrollPane&定位

我在做什么错?这里是我的代码:

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

@AndrewThompson,对于一个强大的图形用户界面,最合理的举动是使用布局管理器? Arent还有其他的选择吗? – user1768615

回答

3

Padded Text Area

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的图形用户界面可能需要在多个平台上工作,使用不同PLAFs不同的屏幕分辨率&。因此,它们不利于组件的准确放置。要为可靠的GUI组织组件,请改为使用布局管理器或combinations of them 以及布局填充&边框为white space

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(); 

当您显示帧文本区域将占据整个空间,但如果调整框架更大然后文本区域将只显示在北部和CENTER会有空的空间。

+2

还可以考虑利用'EmptyBorder'来影响组件的位置和大小 – MadProgrammer