簡體   English   中英

在 JPanel 內滾動 JFrame

[英]Scrolling a JFrame inside a JPanel

我用這個例子來繪制多邊形作為基礎來制作我自己的多邊形抽屜,但保留了最重要的部分:

public class Main extends JPanel {

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    // polygon maker
}

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("DrawPoly");
    frame.setSize(1000, 1000);
    frame.setLocationRelativeTo(null);
    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
    Container contentPane = frame.getContentPane();
    contentPane.add(new Main());
    frame.show();
}
}

我發現如果多邊形具有負坐標值,它們只是 go 離開屏幕,我無法看到它們的整體。 為此,我想象某種滾動或縮放到在主內部創建的 JFrame,或者可能到內容窗格。 如何使用鏈接代碼作為基礎實現簡單的滾動?

我發現如果多邊形具有負坐標值,它們只是 go 離開屏幕

您不能使用具有負值的 JScrollPane。

相反,您需要:

  1. 創建所有要繪制的多邊形並將它們添加到 ArrayList。
  2. 遍歷 ArrayList 以找到所有多邊形的最大負 x/y 值
  3. 如果您找到負的“x”或“y”坐標,則再次遍歷 ArrayList 並通過 x 或 y 坐標的絕對值調用translate(...)方法以將面板上的所有多邊形移動到它們都將可見
  4. 最后,您遍歷 ArrayList 並繪制每個多邊形。

筆記。 理想情況下,您將創建多邊形並添加,然后在 paintComponent() 方法之外執行 ArrayList。 然后進行翻譯。 所以現在 paintComponent() 方法只需要迭代 ArrayList 並繪制它們,而無需在每次組件需要重新繪制自身時進行創建/翻譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM