我正在嘗試創建一個 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);
}
}
uj5u.com熱心網友回復:
改變:
//frame.getContentPane().add(new JScrollPane(redPanel), BorderLayout.WEST);
frame.getContentPane().add(new JScrollPane(redPanel), BorderLayout.CENTER);
這會將滾動窗格添加CENTER到BorderLayout. 這將允許滾動窗格占用框架中的所有可用空間。然后滾動條將出現在無法在滾動窗格范圍內顯示的面板部分。
當您將滾動窗格添加到 WEST 時,它將嘗試尊重滾動窗格的首選寬度,該寬度大于桌面的寬度,并且似乎是導致問題的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511831.html
標籤:爪哇摇摆面板awt
