Hallo,
durch Mausclick möchte ich die Nummer der Componente, auf die geclickt wurde, in einem JScrollPane ermitteln (0 .. n).
Durch Neuzeichnen der Componenten während der Laufzeit sind keine statischen Spalten oder Zeilen vorhanden.
Die JLabels mit einer laufenden Nummer zu vesehen macht keinen Sinn, da in dem "richtigen" Programm die Componenten verschoben oder sortiert werden. Dann müsste nach jedem Vorgang die laufende Nummer neu erstellt werden.
Im API für JScrollPane oder JViewPort bin ich nicht fündig geworden.
Gibt es ausser einer Eigenberechnung ein Java-Lösung?
In meinem Beispiel ist folgende Verschachtelung:
JFrame beinhaltet ein JScrollPane.
JScrollPane beinhaltet ein JPane mit Layout=null.
Auf diesem JPane werden 100 JLabel gezeichnet.
Die JLabels sind in einem Vector gespeichert und werden nach verändern der Fenstergrösse neu gezeichnet. Dabei werden die Labels am rechten Rand des Fenster umgebrochen.
Grüss Max
durch Mausclick möchte ich die Nummer der Componente, auf die geclickt wurde, in einem JScrollPane ermitteln (0 .. n).
Durch Neuzeichnen der Componenten während der Laufzeit sind keine statischen Spalten oder Zeilen vorhanden.
Die JLabels mit einer laufenden Nummer zu vesehen macht keinen Sinn, da in dem "richtigen" Programm die Componenten verschoben oder sortiert werden. Dann müsste nach jedem Vorgang die laufende Nummer neu erstellt werden.
Im API für JScrollPane oder JViewPort bin ich nicht fündig geworden.
Gibt es ausser einer Eigenberechnung ein Java-Lösung?
In meinem Beispiel ist folgende Verschachtelung:
JFrame beinhaltet ein JScrollPane.
JScrollPane beinhaltet ein JPane mit Layout=null.
Auf diesem JPane werden 100 JLabel gezeichnet.
Die JLabels sind in einem Vector gespeichert und werden nach verändern der Fenstergrösse neu gezeichnet. Dabei werden die Labels am rechten Rand des Fenster umgebrochen.
Grüss Max
Code:
import javax.swing.*;
import java.util.*;
import java.awt.*;
import javax.swing.border.*;
import java.awt.event.*;
public class Test extends JFrame{
JLabel label = new JLabel();
JPanel panel = new JPanel();
JScrollPane scrollPane = new JScrollPane(panel);
Vector<JLabel> vc = new Vector<JLabel>();
//------------------------------------------------------------------------------------------------
public Test(){
Container contPane = getContentPane();
contPane.add(scrollPane);
panel.setLayout(null);
panel.setPreferredSize(new Dimension(1110,510));
panel.addMouseListener(new PanelMouseListener());
this.addComponentListener(new frame_ComponentListener());
for(int i=0;i<100;i++){
vc.add(new JLabel("Label " + String.valueOf(i)));
}
drawLabel();
}
//------------------------------------------------------------------------------------------------
public void drawLabel(){
int s = vc.size();
JLabel l;
int x,y;
int frameWidth = getWidth();
x=10;
y=10;
for(int i = 0; i< s;i++){
l = vc.elementAt(i);
l.setBorder(new LineBorder(new Color(0,0,0)));
l.setHorizontalAlignment(SwingConstants.CENTER);
l.setBounds(x,y,100,40);
panel.add(l);
x+=110;
if(x>frameWidth - 90){
x=10;
y+=50;
}
}
panel.setPreferredSize(new Dimension(frameWidth, y+50));
panel.validate();
}
//------------------------------------------------------------------------------------------------
public static void main(String args[]){
Test t = new Test();
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
t.setBounds(10,10,900,200);
t.setVisible(true);
}
//================================================================================================
class frame_ComponentListener extends ComponentAdapter{
//------------------------------------------------------------------------------------------------
public void componentResized(ComponentEvent e){
drawLabel();
}
//------------------------------------------------------------------------------------------------
}
//================================================================================================
class PanelMouseListener extends MouseAdapter{
JLabel hitLabel;
//------------------------------------------------------------------------------------------------
public void mousePressed(MouseEvent evt){
Component c = panel.getComponentAt(evt.getPoint());
if (c instanceof JLabel) {
hitLabel = (JLabel) c;
System.out.println("Click: " + hitLabel.getText());
// hier Nummer der Componente ermitteln
}
}
//------------------------------------------------------------------------------------------------
}
//================================================================================================}