[英]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);
這會將滾動窗格添加到BorderLayout
的CENTER
。 這將允許滾動窗格占用框架中的所有可用空間。 然后滾動條將出現在滾動窗格邊界內無法顯示的面板部分。
當您將滾動窗格添加到 WEST 時,它會嘗試遵守滾動窗格的首選寬度,該寬度大於桌面的寬度並且似乎是導致問題的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.