gpt4 book ai didi

Java Swing 滚动绘图

转载 作者:行者123 更新时间:2023-12-02 12:01:27 24 4
gpt4 key购买 nike

我正在尝试将 JScrollpane 添加到我的 JPanel 中。问题是滚动 Pane 无法识别我的绘图位于框架之外。那么如何正确添加 JScrollpane 呢?

主类:

public MainFrame() extends JFrame{

public MainFrame() {

Container container = getContentPane();
container(new BorderLayout());
container.add(new JScrollPane(new Drawing()));

setSize(1280,720);
setVisible(true);
}

绘画类:

public class Drawing() extends JPanel {

@Override
protected void paintComponent(Graphics g) {
g.drawLine(10, 100, 30000, 10);
}
}

最佳答案

您的代码中有几个错误,让我们逐步检查每个错误:

  1. 您正在扩展 JFrame,您应该避免它,请参阅:Extends JFrame vs. creating it inside the program了解更多相关信息。您实际上并没有改变它的行为,因此不需要扩展它。

  2. 要让 JScrollPane 显示整行,您需要将窗口大小更改为与行大小相同(如 @MadProgrammer 的 this answer 所示)。

  3. 与第 2 点相关,避免使用 setSize(...),而是重写 getPreferredSize():请参阅 Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?了解更多信息

  4. 您忘记在 paintComponent() 方法中调用 super.paintComponent(...) 方法。

  5. 与第 2、3 点相关,您需要调用 pack(),以便 Swing 计算组件的最佳首选大小。

请参阅此示例:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class LongDraw {
private JFrame frame;
private Drawing drawing;

public static void main(String[] args) {
SwingUtilities.invokeLater(new LongDraw()::createAndShowGui);
}

private void createAndShowGui() {
frame = new JFrame(getClass().getSimpleName());

drawing = new Drawing();

JScrollPane scroll = new JScrollPane(drawing);

frame.add(scroll);

frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

class Drawing extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2d = (Graphics2D) g;
g2d.drawLine(10, 100, 3000, 10);
}

@Override
public Dimension getPreferredSize() {
return new Dimension(3000, 500);
}
}
}

这会产生类似的结果:

enter image description here

关于Java Swing 滚动绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47228741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com