簡體   English   中英

如何創建大於顯示尺寸的 JPanel

[英]How can I create a JPanel larger than the size of the display

我正在嘗試創建一個 JPanel 以在繪圖區域大於顯示尺寸的地方繪圖。 我期待一個帶有滾動窗格的 JPanel 出現,以解釋巨大的尺寸。 我似乎無法讓它發揮作用。 我看到底部有一個滾動條,有向左箭頭但沒有向右箭頭,屏幕右側沒有滾動條。 我將這個示例與我在其他示例中找到的代碼放在一起。 它完整但丑陋。 我需要改變什么才能得到我想要的東西——一個可以上下左右滾動的區域? --- 全部由程序繪制,無用戶交互。

package com.example.paneltest;
 
import java.awt.*;
import java.util.Random;
import javax.swing.*;

public class Paneltest {
  private static void createAndShowGUI() {
    JFrame frame = new JFrame("JPanel Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    
    Toolkit tk = Toolkit.getDefaultToolkit();
    int frameWidth = tk.getScreenSize().width;
    int frameHeight = tk.getScreenSize().height;
 
    JPanel redPanel = new paintablePanel();
    redPanel.setOpaque(true);
    redPanel.setBackground(new Color(128, 0, 0));
    redPanel.setPreferredSize(new Dimension(6000,6000));
    frame.getContentPane().add(new JScrollPane(redPanel), BorderLayout.WEST);
    //frame.pack();
    frame.setVisible(true);
 }
public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
            }
        });
    }
}
class paintablePanel extends JPanel {
  private void doDrawing(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.setPaint(Color.white);
    int w = 6000;
    int h = 6000;
    Random r = new Random();
    for (int i = 0; i < 10000; i++) {
        int x = Math.abs(r.nextInt()) % w;
        int y = Math.abs(r.nextInt()) % h;
        g2d.drawLine(x, y, x, y);
    }
}
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    doDrawing(g);
    }
}

改變:

//frame.getContentPane().add(new JScrollPane(redPanel), BorderLayout.WEST);
frame.getContentPane().add(new JScrollPane(redPanel), BorderLayout.CENTER);

這會將滾動窗格添加到BorderLayoutCENTER 這將允許滾動窗格占用框架中的所有可用空間。 然后滾動條將出現在滾動窗格邊界內無法顯示的面板部分。

當您將滾動窗格添加到 WEST 時,它會嘗試遵守滾動窗格的首選寬度,該寬度大於桌面的寬度並且似乎是導致問題的原因。

暫無
暫無

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

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