Witam wszystkich bardzo serdecznie!
Od kilku tygodni próbuję pisać programy w Javie, nie posiadając wcześniejszego doświadczenia w programowaniu.
O ile do tej pory jakoś sobie radziłem, ostatnio natrafiłem na problem którego nie potrafię rozwiązać.
Zatem nie przeciągając już więcej: mam problem ze zmianą pozycji suwaków JScrollPane
poprzez wykorzystanie JButton
.
Struktura mojego programu wygląda następująco:
Składnia xFrame:
package xframe;
import java.awt.FlowLayout;
import javax.swing.JFrame;
public class XFrame extends JFrame implements xInterface{
public XFrame(){
setTitle("xFrame");
setSize(400, 400);
setLocation(400, 200);
setResizable(false);
setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(panel_1);
add(panel_2);
setVisible(true);
}
public static void main(String[] args) {
new XFrame();
}
}
Składnia xInterface:
package xframe;
public interface xInterface {
xPanel_1 panel_1 = new xPanel_1();
xPanel_2 panel_2 = new xPanel_2();
}
Okno programu składa się więc z dwóch oddzielnych elementów:
JPanel
panel_1 zawiera w sobie JScrollPane
w którym chcę zmienić pozycję suwaków, natomiast JPanel
panel_2 przechowuje JButton
który tą pozycję ma zmienić na 0, 0.
Składnia xPanel_1:
package xframe;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class xPanel_1 extends JPanel{
JScrollPane xScrollPane;
public xPanel_1(){
setPreferredSize(new Dimension(400, 300));
setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
setBackground(Color.orange);
xScrollPane = new JScrollPane(new JLabel(new ImageIcon("xImageIcon.png")));
xScrollPane.setPreferredSize(new Dimension(400, 300));
xScrollPane.getViewport().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
System.out.println("y" + xScrollPane.getVerticalScrollBar().getValue() + " " + "x" + xScrollPane.getHorizontalScrollBar().getValue());
}
});
add(xScrollPane);
}
void xScroll(){
xScrollPane.getViewport().setViewPosition(new Point(0, 0));
System.out.println("Wciśnięto Przycisk!");
System.out.println("y" + xScrollPane.getVerticalScrollBar().getValue() + " " + "x" + xScrollPane.getHorizontalScrollBar().getValue());
}
}
Składnia xPanel_2:
package xframe;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class xPanel_2 extends JPanel{
public xPanel_2(){
setPreferredSize(new Dimension(400, 100));
setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
setBackground(Color.darkGray);
JButton xButton = new JButton("xButton");
xButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
xPanel_1 panel = new xPanel_1();
panel.xScroll();
}
});
add(xButton);
}
}
Po wciśnięciu xButton pozycja suwaków w xScrollPane nie ulegała zmianie. Chcąc przyjrzeć się problemowi bliżej dodałem do programu wypisywanie pozycji suwaków xScrollPane.
Jak widać na załączonym obrazku, wartości po kliknięciu na przycisk zostają zmienione na 0, 0, program jednak ignoruje tą zmianę.
Rozwiązania tego problemu szukałem od kilku dni, jednak nie udało mi się znaleźć niczego co by mi pomogło.
Z góry dziękuję za wszelką udzieloną pomoc.
Pozdrawiam.