1

我使用 setLocation(x, y) 将组件放置在基于 AWT 的小程序中,但是当我切换选项卡时,组件的位置会回到它们的默认布局。

import java.applet.*;
import java.awt.*;

public class AppletEx extends Applet {

  Label test;

  public void init() {

      test = new Label("test");
      add(test);   

  }

  public void start() {
  }

  public void stop() {
  }

  public void destroy() {
  }

  public void paint() {
      test.setLocation(10, 10);
  }

}
4

2 回答 2

1
import java.awt.BorderLayout;
// it is the 3rd millennium, time to use Swing
import javax.swing.*;
import javax.swing.border.EmptyBorder;

/** <applet code='AppletEx' width='120' height='50'></applet> */
public class AppletEx extends JApplet {

  JLabel test;

  public void init() {
      test = new JLabel("test");
      // a border can be used for component padding
      test.setBorder(new EmptyBorder(10,10,10,10));
      // default layout of Applet is FlowLayout,
      // while JApplet is BorderLayout
      add(test, BorderLayout.PAGE_START);
  }
}

其他提示。

  • 不要尝试在paint()其中创建或更改任何组件会导致循环。
  • paint()除非进行自定义绘画,否则不要覆盖。
  • 不要在or之paint()类的顶级容器中覆盖,而是在可以添加到其中 的or之类的东西中覆盖。AppletFramePanelJPanel
  • 使用布局 (与无意义的null布局相反)。
于 2012-12-14T01:49:46.593 回答
-1

如果要使用绝对定位,则不需要使用布局管理器:

setLayout(null);
test = new Label("test");
add(test);
test.setLocation(10, 10);
test.setSize(test.getPreferredSize());
于 2012-12-13T21:39:16.217 回答