gpt4 book ai didi

java - 为什么我有一个 scrollPanel 有效而另一个无效?

转载 作者:行者123 更新时间:2023-11-30 07:13:39 26 4
gpt4 key购买 nike

我在左边有一个大面板,上面环绕着一个滚动面板,它工作正常;但在右上角我有一个面板,它也应该有一个 scrollPanel,但我似乎无法得到它,所以滚动条实际上​​可以移动。他们只是保持饱满而不动。谁能帮我弄清楚这是为什么?

这个 scrollPanel 是导致问题的原因:

public MapBuilderSidePanel(Dimension size){
tileSetPanel = new MapBuilderTileSetPanel(new Dimension(tileSetPanelWidth,tileSetPanelHeight),6,17, tileSetPanelHeight, tileSetPanelWidth, this);
scrollPane = new JScrollPane(tileSetPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//add(tileSet, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);

setPreferredSize(size);
setBorder(new BevelBorder(BevelBorder.LOWERED));
setVisible(true);
}

这是我的小应用程序的代码,我尽量去掉了。复制粘贴编译运行。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.BevelBorder;

public class MapBuilderFrame extends JFrame {

/**
* @param args
*/
private String frameTitle = "Yoonsio Map Editor";
private int frameWidth = 1000;
private int frameHeight = 1000;
private MapBuilderPanel mainPanel;
private MapBuilderSidePanel myLeftSidePanel;
private MapBuilderSidePanel myRightSidePanel;
private JScrollPane scrollPane;



public MapBuilderFrame() {
myRightSidePanel = new MapBuilderSidePanel(new Dimension(200,2000));
mainPanel = new MapBuilderPanel(myRightSidePanel);
setTitle(frameTitle);
setSize(frameWidth,frameHeight);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setPreferredSize(new Dimension(450, 110));
setResizable(false);
scrollPane = new JScrollPane(mainPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(scrollPane, BorderLayout.CENTER);
add(myRightSidePanel, BorderLayout.EAST);

}




public static void main(String[] args) {
new MapBuilderFrame();
}



}

/***************************************************************************/
class MapBuilderPanel extends JPanel {

/**
* @param args
*/
private final int NUMERIC_TO_ASCII_OFFSET = 96;
private MapBuilderSidePanel mySidePanel;
private Rectangle hoverRect;

public MapBuilderPanel(MapBuilderSidePanel mySidePanel){
this.mySidePanel = mySidePanel;
setPreferredSize(new Dimension(2000,2000));
setBackground(new Color(0x00006595));
}

public void refresh(){
this.repaint();
}


public void paint(Graphics g){
g.setColor(new Color(0x00006595));
g.fillRect(0, 0, 2000, 2000);
}



}
/***************************************************************************/

class MapBuilderSidePanel extends JPanel {


/* Ypos = the Y position counter used to draw the grid*/
private MapBuilderTileSetPanel tileSetPanel;
/* Width and Heights pertaining to the tileset grid */
private int tileSetPanelHeight = 400;
private int tileSetPanelWidth = 175;

private JScrollPane scrollPane;


/*only constructor needed*/
public MapBuilderSidePanel(Dimension size){
tileSetPanel = new MapBuilderTileSetPanel(new Dimension(tileSetPanelWidth,tileSetPanelHeight),6,17, tileSetPanelHeight, tileSetPanelWidth, this);
scrollPane = new JScrollPane(tileSetPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//add(tileSet, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);

setPreferredSize(size);
setBorder(new BevelBorder(BevelBorder.LOWERED));
setVisible(true);
}

// Remember override paintComponent(); NOT paint().
public void paintComponent(Graphics g){
}

public void loadTileSet(String filename, int r, int c){
//tileSet.loadTileSet(filename, r, c);
}

public void refresh(){
tileSetPanel.repaint();
}

}
/***************************************************************************/
class MapBuilderTileSetPanel extends JPanel{
private MapBuilderSidePanel myParent;
MapBuilderTileSetPanel(Dimension size, int columns, int rows, int parentPanelHeight, int parentPanelWidth, MapBuilderSidePanel mp){
this.myParent = mp;
setBackground(Color.BLACK);
setPreferredSize(size);
setSize(1000,1000);
setBorder(new BevelBorder(BevelBorder.LOWERED));
}

public void loadTileSet(String filename, int c, int r){
}

public void paintComponent(Graphics g){
g.setColor(new Color(0x00550055));
g.drawRect(25, 25, 25, 25);
g.setColor(new Color(0x0000FF00));
g.drawRect(30, 30, 200, 500);
}

public MapBuilderTileSetPanel returnThis() {
return this;
}


}

最佳答案

您可能正在寻找 JScrollNavigator,已检查 here .

image

关于 SSCCE 的注意事项:

  • Swing GUI 对象应该event dispatch thread 上构造和操作.

  • “Swing 程序应该覆盖 paintComponent() 而不是覆盖 paint()。”— Painting in AWT and Swing: The Paint Methods .

  • 当您真的想覆盖 getPreferredSize() 时,不要使用 setPreferredSize(),如讨论的 here .

  • 只要滚动 Pane 小于封闭的组件,滚动条就会自动出现,如前所述here .

关于java - 为什么我有一个 scrollPanel 有效而另一个无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249154/

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