好吧基本上我一直在尝试用swing,awt等制作一个交互式地图。我在直接进入我的项目之前测试了一些东西,我在图像大小方面遇到了困难,并且添加了一个滚动条,图像是2000x1000 png,但它似乎只显示中间的500x500像素(我将提供图像)我也查找了一些滚动条,但它似乎没有做任何事情?基本上我希望帮助整个图像以及任何其他窗口中的滚动条。这是我的代码。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class GuiM extends JFrame{
private JPanel map;
private JPanel buttons;
private JLabel imageLabel;
public GuiM(){
JScrollPane scroller = new JScrollPane(map);
this.getContentPane().add(scroller, BorderLayout.EAST);
map = new JPanel();
map.setLayout(new GridLayout());
buttons = new JPanel();
imageLabel = new JLabel(new ImageIcon(getClass().getResource("MapLI.png")));
map.add(imageLabel);
setLayout(new GridLayout());
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
setResizable(true);
add(map);
add(buttons);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
public class MainM {
public static void main(String[] args){
GuiM gui = new GuiM();
}
}
以下是一些图片
这个图像是我想在我的面板中显示的内容
然而,这就是我所得到的
答案 0 :(得分:1)
JScrollPane scroller = new JScrollPane(map);
由于map变量为null,因此上述语句不执行任何操作。摆脱它。
this.getContentPane().add(scroller, BorderLayout.EAST);
上述语句不执行任何操作,因为您稍后将布局更改为GridLayout,并且滚动条不包含任何要显示的组件。摆脱它。
您想要将滚动条添加到GUI,而不是地图,因此代码应该类似于:
//add(map);
JScrollPane scroller = new JScrollPane(map); // or add the "imageLabel"
add(scroller);
或者,将标签添加到滚动窗格会更容易,不需要创建一个面板来保存标签。
此外,setVisible(true)
语句应该移动到程序的底部,在组件添加到框架之后和包装()之后。
答案 1 :(得分:0)
您没有将标签imagelabel添加到JScrollPane,如下所示。请将此添加到您的代码:
修改后的代码将如下所示。
GuiM.java
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class GuiM extends JFrame{
private JPanel map;
private JPanel buttons;
private JLabel imageLabel;
public GuiM(){
JScrollPane scroller = new JScrollPane(map);
this.getContentPane().add(scroller, BorderLayout.EAST);
map = new JPanel();
map.setLayout(new GridLayout());
buttons = new JPanel();
imageLabel = new JLabel(new ImageIcon(getClass().getResource("MapLI.png")));
JScrollPane scrollpane=new JScrollPane(imageLabel);
map.add(scrollpane);
setLayout(new GridLayout());
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
setResizable(true);
add(map);
add(buttons);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
和 MainM.java
public class MainM {
public static void main(String[] args){
GuiM gui = new GuiM();
}
}
答案 2 :(得分:0)
您可以使用java.awt类将滚动条添加到代码中。请参阅链接以获取完整代码。 http://www.fixoncloud.com/Home/LoginValidate/OneProblemComplete_Detailed.php?problemid=558