I
inflamer
Gast
Morgen!
Mal 'ne ganz blöde Frage: ...Eigentlich steht die schon im Titel... wie geht das am saubersten?
Mal 'ne ganz blöde Frage: ...Eigentlich steht die schon im Titel... wie geht das am saubersten?
int line = textarea.getLineOfOfffset(textarea.getCaretPosition());
public class MyTextArea extends JScrollPane {
private int lineNumber = 0;
public MyTextArea(String text) {
super(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
final JTextArea textArea = new JTextArea();
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setText(text);
final JViewport vp = new JViewport();
vp.setView(textArea);
super.setViewport(vp);
final JLabel lbl = new JLabel("1", JLabel.CENTER);
lbl.setBorder(new javax.swing.border.LineBorder(Color.black, 1, false));
final JWindow win = new JWindow();
win.getContentPane().add(lbl, BorderLayout.CENTER);
win.setLocationRelativeTo(vp);
win.setSize(50, lbl.getPreferredSize().height);
getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
try { /* irgendwie sieht mir das zu gefährlich aus */
Graphics g = textArea.getGraphics();
FontMetrics fm = g.getFontMetrics();
lineNumber = getInsets().top + getVerticalScrollBar().getValue() /
(fm.getHeight() + fm.getLeading());
lbl.setText(Integer.toString(lineNumber));
} catch (Exception exception) {}
}
});
getVerticalScrollBar().addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
try { /* irgendwie sieht mir das zu gefährlich aus */
lbl.setText(Integer.toString(lineNumber));
Point p = vp.getLocationOnScreen();
win.setLocation(p.x + vp.getWidth() - win.getWidth(), p.y);
win.setVisible(true);
} catch (Exception exception) {}
}
public void mouseReleased(MouseEvent e) {
win.setVisible(false);
}
});
}
}