티스토리 뷰
* CardLayout을 사용하여 두가지 이상의 패널을 이용할 경우
* 패널이 열렸을때 JScrollPane이 마우스 휠에 반응을 하지 않는다.
* 현재 파악한 바로는 Focus문제인듯하며 해당 패널이 열릴때 잠시나마
* 해당 JScrollPane의 requestFocusInWindow() 메소드 이용하여
* 포커스를 주면 정상적으로 마우스 휠에 반응을 하여 스크롤이 가능하다.
메인 프레임
패널1
패널2
* 패널이 열렸을때 JScrollPane이 마우스 휠에 반응을 하지 않는다.
* 현재 파악한 바로는 Focus문제인듯하며 해당 패널이 열릴때 잠시나마
* 해당 JScrollPane의 requestFocusInWindow() 메소드 이용하여
* 포커스를 주면 정상적으로 마우스 휠에 반응을 하여 스크롤이 가능하다.
메인 프레임
public class Frame extends JFrame{
private CardLayout cards = new CardLayout();;
private P_One one;
private P_Two two;
public Frame() {
super("JScrollPane need Focus.");
setSize(500, 500);
getContentPane().setLayout(cards);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
one = new P_One(this);
two = new P_Two(this);
getContentPane().add("One", one);
getContentPane().add("Two", two);
setVisible(true);
}
public void changePanel() {
cards.next(this.getContentPane());
//show될때 한번 포커스를 주면 마우스 휠에 바로 반응한다.
one.getScrollPane().requestFocusInWindow();
two.getScrollPane().requestFocusInWindow();
}
}
|
패널1
public class P_One extends JPanel {
private JTextField textField;
private JLabel lblNewLabel;
private JButton btnNewButton;
private Frame F;
private JScrollPane scrollPane;
public P_One(Frame f) {
setSize(500, 500);
setLayout(null);
F = f;
textField = new JTextField();
textField.setColumns(10);
textField.setBounds(12, 10, 116, 21);
add(textField);
scrollPane = new JScrollPane();
scrollPane.setBounds(0, 250, 500, 250);
add(scrollPane);
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(480, 650));
scrollPane.setViewportView(panel);
panel.setLayout(null);
JTextArea textPane = new JTextArea();
textPane.setText("A");
textPane.setBounds(12, 10, 460, 200);
panel.add(textPane);
JTextArea txtrB = new JTextArea();
txtrB.setText("B");
txtrB.setBounds(12, 220, 460, 200);
panel.add(txtrB);
JTextArea txtrC = new JTextArea();
txtrC.setText("C");
txtrC.setBounds(12, 430, 460, 200);
panel.add(txtrC);
lblNewLabel = new JLabel("Panel One");
lblNewLabel.setBounds(429, 13, 59, 15);
add(lblNewLabel);
btnNewButton = new JButton("Change Panel");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
F.changePanel();
}
});
btnNewButton.setBounds(375, 195, 113, 23);
add(btnNewButton);
setVisible(true);
}
public JScrollPane getScrollPane() { return scrollPane; }
}
|
패널2
public class P_Two extends JPanel {
private JTextField textField;
private JLabel lblNewLabel;
private JButton btnNewButton;
private Frame F;
private JScrollPane scrollPane;
public P_Two(Frame f) {
setSize(500, 500);
setLayout(null);
F = f;
textField = new JTextField();
textField.setColumns(10);
textField.setBounds(12, 10, 116, 21);
add(textField);
scrollPane = new JScrollPane();
scrollPane.setBounds(0, 250, 500, 250);
add(scrollPane);
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(480, 650));
scrollPane.setViewportView(panel);
panel.setLayout(null);
JTextArea textPane = new JTextArea();
textPane.setText("A");
textPane.setBounds(12, 10, 460, 200);
panel.add(textPane);
JTextArea txtrB = new JTextArea();
txtrB.setText("B");
txtrB.setBounds(12, 220, 460, 200);
panel.add(txtrB);
JTextArea txtrC = new JTextArea();
txtrC.setText("C");
txtrC.setBounds(12, 430, 460, 200);
panel.add(txtrC);
lblNewLabel = new JLabel("Panel Two");
lblNewLabel.setBounds(427, 13, 61, 15);
add(lblNewLabel);
btnNewButton = new JButton("Change Panel");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
F.changePanel();
}
});
btnNewButton.setBounds(375, 195, 113, 23);
add(btnNewButton);
setVisible(true);
}
public JScrollPane getScrollPane() { return scrollPane; }
}
|
댓글