我试图在JScrollPane中显示JTextArea,但是当我运行我的(简化)程序时,我只是得到一个空框架:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class ScrollPaneTest extends JFrame {
private Container myCP;
private JTextArea resultsTA;
private JScrollPane scrollPane;
public ScrollPaneTest() {
setSize(500, 500);
setLocation(100, 100);
myCP = this.getContentPane();
myCP.setLayout(null);
resultsTA = new JTextArea("Blah blah");
scrollPane = new JScrollPane(resultsTA,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(200, 100));
scrollPane.setLocation(100, 300);
myCP.add(scrollPane);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new ScrollPaneTest();
}
}
我使用null LayoutManager来与我正在教学的教科书保持一致。
可以:
public class ScrollPaneTest extends JFrame {
private Container myCP;
private JTextArea resultsTA;
private JScrollPane scrollPane;
public ScrollPaneTest() {
setSize(500, 500);
setLocation(100, 100);
myCP = this.getContentPane();
myCP.setLayout(null);
resultsTA = new JTextArea("Blah blah");
resultsTA.setBounds(10, 10, 150, 30);
scrollPane = new JScrollPane(resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setPreferredSize(new Dimension(200, 100));
scrollPane.setBounds(0, 0, 500, 500);
myCP.add(scrollPane);
setVisible(true);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new ScrollPaneTest();
}
}
如果你使用空布局,那么你必须指定边界。
编辑
setBounds()
方法涵盖了setLocation()
方法的任务。
例如,setBounds(x,y,w,h);
first 2将设置该组件相对于其容器的x/y位置。第二个2(w/h)将设置该组件的大小。
换句话说:-
- setBounds(int x, int y, int width, int height) -设置组件的大小和位置
- setLocation(int x, int y) -设置组件的位置
我不得不同意kleopatra对此的评论。
下面是Harry Joy代码的一个变体,它使用了布局。它在屏幕上显示的大小几乎与原始GUI相同,但可以调整大小。它也可以很容易地适应不同的plaf,默认字体大小等(尽管它可能最终在屏幕上显示不同的大小),而null
布局的东西不会。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ScrollPaneTest extends JFrame {
private Container myCP;
private JTextArea resultsTA;
private JScrollPane scrollPane;
public ScrollPaneTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 100);
myCP = this.getContentPane();
resultsTA = new JTextArea("Blah blah", 28, 43);
scrollPane = new JScrollPane(resultsTA,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
myCP.add(scrollPane);
setVisible(true);
pack();
}
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
new ScrollPaneTest();
}
};
SwingUtilities.invokeLater(r);
}
}