我正在尝试创建一个允许我滚动到JPanel不同区域的屏幕。即我想要一个用于绘制的JPanel,其大小比它所在的JFrame大,我试图使用JScrollPane来查看JPanel的不同区域。
JFrame mainFrame = new JFrame("My Frame");
mainFrame.setSize(700, 700);
clickScreen = new ClickPanel();
clickScreen.setPreferredSize(new Dimension(2000, 2000));
JScrollPane scrollArea = new JScrollPane(clickScreen,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
mainFrame.getContentPane().add(scrollArea, BorderLayout.CENTER);
其中ClickPanel是我创建的类,它扩展了JPanel并用于绘图。
我的问题是:当我使用滚动条滚动时,视点会移动,但是我的paintComponent中的绘图在同一个地方显示。我希望能够滚动到它下面的新区域,以便我可以在那里画画。
答案 0 :(得分:2)
你可以试试这个:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class ScrollingView extends JFrame {
private static final long serialVersionUID = -866635590539200791L;
private JScrollPane scrollPane;
private JPanel panel;
public ScrollingView() {
panel = new JPanel();
panel.setPreferredSize(new Dimension(2000, 2000));
panel.setLayout(new BorderLayout());
panel.add(new JLabel("Label 1 Set to West"), BorderLayout.WEST);
panel.add(new JLabel("Label 2 Set to East"), BorderLayout.EAST);
scrollPane = new JScrollPane(panel);
setPreferredSize(new Dimension(700, 700));
setContentPane(scrollPane);
pack();
setVisible(true);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ScrollingView();
}
});
}
}
答案 1 :(得分:0)
要了解有关jscrollpane的更多信息,请参阅Jscrollpane oracle docs