我有一个JScroll面板和一个JGroup添加到它。我想绘制到JGroup并使JScrollPane的滚动条在绘图超过面板大小时出现,并且能够垂直和水平滚动绘图。
我尝试过咨询各种论坛和官方文档,并尝试了一些事情(设置边框、首选尺寸等),但似乎都没有产生预期的效果。
我有一个JFrame(附带GridBagLayout,btw.):
JFrame frame1 = new JFrame("Application");
frame1.setVisible(true);
frame1.setMinimumSize(new Dimension(580,620));
frame1.setResizable(false);
frame1.setLocationRelativeTo(null);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
相关组件包括:
JPanel panel1 = new JPanel();
JScrollPane scrollPane = new JScrollPane(panel1);
frame1.add(scrollPane, gbc_panel1); //added with layout constraints
JPanel公司:
panel1.setBackground(Color.BLACK);
panel1.setPreferredSize(new Dimension(500,500));
panel1.setMinimumSize(new Dimension(360,360));
panel1.setMaximumSize(new Dimension(1000,1000));
JScrollPane:
scrollPane.setAutoscrolls(true);
绘制图形的按钮的操作事件中的相关代码:
Graphics g;
g = panel1.getGraphics();
panel1.paint(g);
g.setColor(new Color(0,128,0));
/* this is followed by some more code that
does the drawing of a maze with g.drawLine() methods */
代码绘制得很完美,我似乎不知道如何实现滚动和动态调整大小。
如果有任何有用的意见或评论,我将不胜感激!
非常感谢。
最终,重写绘制方法实现了@MadProgrammer所建议的技巧。我只是希望我可以在不必定义自定义JPanel类的情况下完成绘制,但看起来它不是这样工作的。
自定义类如下所示:
class Drawing extends JPanel {
int mazeSize;
public Drawing(JTextField jtf)
{
try {
this.mazeSize = Integer.parseInt(jtf.getText());
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "ERROR! Invalid size value!");
}
} // the constructor gets the size of the drawing from a textField
public Dimension getPreferredSize() {
return new Dimension(mazeSize*10,mazeSize*10);
} //getPreferredSize - this method is used by the scroll pane to adjust its own size automatically
public void drawMaze (Graphics g)
{
/* some irrelevant code that does the desired drawing to the panel by calling g.drawLine()*/
} // drawMaze method that does the de facto drawing
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
drawMaze(g);
}// paintComponent() @Override method - this was the tricky part
}//Drawing JPanel subclass
还值得注意的是(如果像我这样的noob碰巧遇到这个问题),在action事件中实例化新的JPanel子类后,我必须以以下方式将其添加到JScrollPanel中,而不仅仅是使用其add()方法:
Drawing drawPanel = new Drawing(textfield1);
scrollPane.getViewport().add(drawPanel);
再次感谢您的建议!
完成程序(使用递归回溯算法的随机迷宫生成器)后,我将在github概要文件中提供源代码。
问题内容: 我有一个与作为布局经理。 在南边界中,我有一个,我希望用户可以调整其大小,即用户可以单击边界的边缘并将其向上拖动以使其变大。 您是否知道我可以做到这一点? 问题答案: 为了使框架中的面板可单独调整大小,您需要将其添加到。 而不是将其放置在框架的南部,而是将其放置在中心。拆分窗格将使拆分中的底部面板看起来像在南方,而拆分中的顶部面板将位于框架的中心。 确保使用设置两个面板的方向。 然后,
我被一些奇怪的东西卡住了。我有一个带有JScrollPane的JFrame,其中包含一个比实际屏幕大得多的jPanel。我用圆柱画正方形,我希望这些正方形越过JPanel的右边框。(以便在向右滚动时显示它们。)但是使用paintComponents方法绘制的方块只是在JScrollPane的可见视口处停止。 下面是JFrame内部的JScrollPane的代码: public void initC
起初,我只有文本栏和状态栏,如下例所示(我不需要父容器): 这是应该的。但是,请记住状态栏的高度。现在,如果您将StatusBar类更改为下面的类,那么高度几乎会增加一倍。为什么会这样? 这种设置并不需要更多的垂直空间: 我可以让这成为一个新问题,但我觉得不值得...
问题内容: 我有一个快速的问题,我不太确定要进行设置。我在其他地方看到过示例,但没有什么比我的情况更具体。我想使用PHP调整图像的大小,以使图像易于阅读,而不仅仅是像使用HTML那样随意拉伸。如果它们的宽度不是250像素,也不是160像素,那么如何调整图片的大小,使其成比例但适合该空间? 谢谢! 问题答案: 好的,下面是我在商店中使用的Image对象。保持规模-需要GD 我在请求时调整图像的大
我制作了一个包含三个jpanel的jframe,这三个panel将jframe分成三个相等的部分。每一个面板都包含一个图像。我想调整图像和面板的大小,当帧的大小从高到低的时候。有人能告诉我如何做吗。
问题内容: 我有一个子类,可以在其上添加按钮,标签,表格等。要在屏幕上显示,请使用: 但是,当我调整窗口大小时,面板的大小不会改变。即使调整了尺寸,如何使面板的尺寸与窗口的尺寸相同? 问题答案: 您可以设置一个类似于BorderLayout的布局管理器,然后更具体地定义面板应该放置的位置: 这会将面板置于框架的中央区域,并在调整框架大小时自动增长。