首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Merlin Frame 增強:無修飾視窗與最大化狀態程式化控制

     編輯:Java 相關知識

無修飾 Frame

J2SE 1.4 允許程式化隱藏平台相關視窗修飾(標題列、邊框)。frame.setUndecorated(true) 需在 show() 前調用,否則拋出 IllegalComponentStateException。隱藏修飾後失去系統拖曳支援,需自行添加滑鼠監聽器實現拖曳:

Point origin = new Point();
frame.addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent e) { origin.x=e.getX(); origin.y=e.getY(); }
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
  public void mouseDragged(MouseEvent e) {
    Point p = frame.getLocation();
    frame.setLocation(p.x+e.getX()-origin.x, p.y+e.getY()-origin.y);
  }
});

最大化/圖標化狀態控制

1.2 引入 setState() 控制圖標化,1.4 新增 setExtendedState(int) 使用位掩碼:

  • NORMAL:正常
  • ICONIFIED:最小化
  • MAXIMIZED_BOTH:水平垂直最大化
  • MAXIMIZED_HORIZ:水平最大化
  • MAXIMIZED_VERT:垂直最大化

組合狀態用按位或 |。保留最大化同時最小化:frame.setExtendedState(Frame.ICONIFIED | frame.getExtendedState())。

完整範例:自定義標題列按鈕

隱藏修飾,添加「最大化」、「最小化」、「還原」、「關閉」四按鈕,並支援拖曳區域。使用 GridLayout(5,1) 排列。

public class FrameTest {
  static Point origin = new Point();
  public static void main(String[] args) {
    final Frame frame = new Frame();
    frame.setUndecorated(true);
    // 拖曳監聽器同上
    frame.setSize(300,300);
    Button b1 = new Button("Maximize");
    b1.addActionListener(e -> frame.setExtendedState(Frame.MAXIMIZED_BOTH));
    Button b2 = new Button("Iconify");
    b2.addActionListener(e -> frame.setExtendedState(Frame.ICONIFIED | frame.getExtendedState()));
    Button b3 = new Button("Normal");
    b3.addActionListener(e -> frame.setExtendedState(Frame.NORMAL));
    Button b4 = new Button("Close");
    b4.addActionListener(e -> System.exit(0));
    frame.setLayout(new GridLayout(5,1));
    frame.add(b1); frame.add(b2); frame.add(b3); frame.add(b4);
    frame.show();
  }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved