Я пытаюсь заставить JScrollPane постоянно прокручиваться в этой программе. Я также пытаюсь заставить это прокручивать, даже когда изображение сжимается после нажатия кнопки. Я могу заставить панель прокрутки прокручиваться только тогда, когда JFrame максимизируется. Также после того, как изображение внутри JScrollPane уменьшается наполовину при нажатии на кнопку, JScrollPane больше не появляется. Я думал, что у JScrollPane всегда есть горизонтальная и вертикальная полосы прокрутки, делая панель, которая держит ее намного больше, чем JFrame, в котором находится панель. Пожалуйста, см. Код ниже и, если возможно, помогите отладить его.Как получить прокрутку области jscrollpane?
package Ex3;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.awt.AWTException;
import javax.swing.JScrollPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import java.awt.Image;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
public class Ex3MF {
JFrame jframe = new JFrame("Crappy Screen Grabber 1.0");
ImageIcon icon = new ImageIcon(this.getClass().getClassLoader().getResource("screenshot-ex3mf.png"));
JLabel jl;
JScrollPane jsp;
Container c = jframe.getContentPane();
JButton button1 = new JButton("Resize Image");
static Ex3MF e;
static Toolkit t = Toolkit.getDefaultToolkit();
static Dimension d = t.getScreenSize();
static int x_width = d.width/2;
static int x_height = d.width/2;
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
void setupJFrame() {
jframe.setSize(300, 300);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setLocationRelativeTo(null);
button1.addActionListener(new TrimImage());
p2.setSize(200,100);
//p2.setLayout(new BorderLayout());
p2.add(button1);
jframe.add(p2, BorderLayout.NORTH);
}
void image2ScrollPane(ImageIcon ic) {
setupJFrame();
p1.setSize(3000,3000);
p1.setLayout(new BorderLayout());
if (jl == null) {
jl = new JLabel("Crappy Screencapture", ic, JLabel.CENTER);
} else {
jl.setIcon(ic);
}
if (jsp == null) {
jsp = new JScrollPane(jl);
} else {
jsp.setViewportView(jl);
}
p1.add(jsp);
//c.add(p1);
//p1.add(jl); //and the jlabel to the panel
// jsp = new JScrollPane(p1); //and the panel to the ScrollPane
// c.add(jsp); //add the JScrollPane to the Container
jframe.add(p1, BorderLayout.CENTER);
jframe.setVisible(true);
jframe.pack();
}
void createScreenCapture() {
try {
Robot ro = new Robot();
Toolkit t = Toolkit.getDefaultToolkit();
final Dimension d = t.getScreenSize();
Rectangle re = new Rectangle(d.width, d.height);
BufferedImage image = ro.createScreenCapture(re);
//write screen capture to disk
ImageIO.write(image, "png", new File("screenshot-ex3mf.png"));
} catch(IOException ioe) {
System.out.println("IOException thrown " + ioe);
}
catch(AWTException awte) {
System.out.println("AWTException thrown " + awte);
}
}
ImageIcon resizeTheCapture() {
Image image = icon.getImage();
x_width = x_width/2;
x_height = x_height/2;
Image newimg = image.getScaledInstance((x_width), (x_height), java.awt.Image.SCALE_SMOOTH);
return new ImageIcon(newimg);
}
public static void main(String[] args) {
e = new Ex3MF();
e.createScreenCapture();
e.image2ScrollPane(e.icon);
System.out.println("\nProgram complete...");
}
} //end class
Код, управляющий кнопкой, следует за этим предложением.
package Ex3;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class TrimImage implements ActionListener {
public void actionPerformed(ActionEvent ae) {
Ex3MF ex3 = new Ex3MF();
ex3.e.image2ScrollPane(ex3.e.resizeTheCapture());
}
}
Благодарю вас за чтение всего этого. Я ценю любые раздражающие комментарии к snobby, а также любую реальную помощь, чтобы сделать меня лучшим программистом и другими людьми во всем мире лучшими программистами, которые читают это после поиска в своей любимой поисковой системе. :)
Чтобы лучше помочь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). Это означает, что она должна быть одной копией/пастой, избыточным импортом и не учитывать изображения с помощью компонента-заполнителя. Но если вы должны использовать изображения. Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, видимые в [этом вопросе & ответа] (http://stackoverflow.com/q/19209650/418556). –