Re: [jCrollPane]Positionning the view with a command
Daniel Moyne wrote:
I have a jCrollPane built with netbeans and I have many jPanels vertically
positionned in it and of course by using the vertical slider attached to the
jScrollPane I can position the view wherever I want.
Now I want by a java method depending of the index number of a particular
jPanel make this object visible within the window ; I know how many jPanels
I have got installed vertically and I can get a int variable in percentage
for this position regarding the vertical height :
int verticalPosition= (int) (index_of_my_Jpanel/number_of_Jpanels)
or maybe I can go with the index_of_my_Jpanel itself by setting for the
vertical slider a min index and a max index.
Now how do I recover information on the vertical slider to set its position
with my selected int variable ?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test extends JFrame {
final NPanel[] panels = new NPanel[10];
final JScrollPane sp;
public test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
for (int i=0; i<panels.length; i++) {
panels[i] = new NPanel(i);
p.add(panels[i],c);
}
sp = new JScrollPane(p);
sp.getViewport().setPreferredSize(new Dimension(320,400));
add(sp,BorderLayout.CENTER);
JTextField tf = new JTextField(10);
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JTextField tf = (JTextField)ae.getSource();
try {
int n = Integer.parseInt(tf.getText());
JViewport vp = sp.getViewport();
vp.setViewPosition(panels[n].getLocation());
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
}
}
});
add(tf,BorderLayout.SOUTH);
pack();
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new test();
}
});
}
class NPanel extends JPanel {
final int n;
public NPanel(int n) {
this.n = n;
setPreferredSize(new Dimension(320,240));
setBorder(BorderFactory.createLineBorder(Color.BLUE));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(new Font("Arial",Font.BOLD,32));
FontMetrics fm = g.getFontMetrics();
String nStr = Integer.toString(n);
int w = fm.stringWidth(nStr);
int h = fm.getHeight();
g.drawString(nStr,(getWidth()-w)/2,(getHeight()-h)/2);
}
}
}
--
Knute Johnson
email s/nospam/knute2009/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access