Hallo,
Teile meines Problems habe ich schon unter folgenden Beiträgen gepostet:
www.java-forum.org/de/topic68160_listener-button-auf-jscrollbar.html
java-forum.org/de/viewtopic.php?t=68364&highlight=
java-forum.org/de/viewtopic.php?t=68644&highlight=
Jetzt habe aber noch zwei Probleme:
1. Leider komme ich nicht ohne
aus. Das soll aber ein Hack sein, den man nicht verwenden soll!!!
2. Folgende Rechnung stimmt bei mir nicht (nur am Anfang stimmt sie, später nicht mehr):
Damit man sich besser ein Bild machen kann, habe ich mein Problem zu einem zusammenhängenden Code zusammengestückelt:
Vielen Dank im Voraus.
Teile meines Problems habe ich schon unter folgenden Beiträgen gepostet:
www.java-forum.org/de/topic68160_listener-button-auf-jscrollbar.html
java-forum.org/de/viewtopic.php?t=68364&highlight=
java-forum.org/de/viewtopic.php?t=68644&highlight=
Jetzt habe aber noch zwei Probleme:
1. Leider komme ich nicht ohne
Code:
final JButton b0 = (JButton)bar.getAccessibleContext().getAccessibleChild(0);
2. Folgende Rechnung stimmt bei mir nicht (nur am Anfang stimmt sie, später nicht mehr):
Code:
if(bar.getValue()==bar.getMaximum()-bar.getVisibleAmount()){
Damit man sich besser ein Bild machen kann, habe ich mein Problem zu einem zusammenhängenden Code zusammengestückelt:
Code:
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
public class JScrollBarTest extends JFrame implements Runnable{
private static boolean isPressed=false;
private static JScrollBar bar;
private static DefaultTableModel model;
private static JScrollPane scrollPane;
public void run() {
while(isPressed){
try {
Thread.sleep(50);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("MouseDown");
System.out.println("Value vor:"+bar.getValue());
System.out.println("max vor:"+bar.getMaximum());
System.out.println("visibleAmount vor:"+bar.getVisibleAmount());
if(bar.getValue()==bar.getMaximum()-bar.getVisibleAmount()){
System.out.println("Value in:"+bar.getValue());
System.out.println("visibleAmount in:"+bar.getVisibleAmount());
System.out.println("max in:"+bar.getMaximum());
Vector newDatas = createRow(false,"test","test","test","test","test");
model.addRow( newDatas );
scrollPane.validate();
bar.setMaximum(bar.getMaximum());
bar.setValue(bar.getMaximum());
try {
Thread.sleep(50);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
public static void main(String args[]){
JScrollBarTest scrollbar = new JScrollBarTest();
scrollbar.setSize(400,400);
scrollbar.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table = new JTable();
String[] titles = new String[]{ "", "Name", "Vorname", "Strasse", "PLZ", "Ort"};
model = new TableModelDefault(titles, 41);
table.setModel( model );
scrollPane= new JScrollPane(table);
scrollbar.getContentPane().add(scrollPane, BorderLayout.CENTER);
scrollbar.setVisible(true);
bar = scrollPane.getVerticalScrollBar();
final JButton b0 = (JButton)bar.getAccessibleContext().getAccessibleChild(0);
b0.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
isPressed=true;
new Thread(new JScrollBarTest()).start();
}
public void mouseReleased(MouseEvent e) {
isPressed=false;
System.out.println("MouseUp");
}
});
}
public static Vector createRow(Boolean selected, String name, String vorname, String strasse, String plz, String ort){
Vector vector = new Vector();
vector.add(selected);
vector.add(name);
vector.add(vorname);
vector.add(strasse);
vector.add(plz);
vector.add(ort);
return vector;
}
}
class TableModelDefault extends DefaultTableModel{
public TableModelDefault(String[]titles, int rowSize){
super(titles, rowSize);
}
public TableModelDefault(){
super();
}
public Class getColumnClass(int columnIndex) {
switch( columnIndex ){
case 0: return Boolean.class;
case 1: return String.class;
case 2: return String.class;
case 3: return String.class;
case 4: return String.class;
case 5: return String.class;
case 6: return String.class;
case 7: return String.class;
default: return null;
}
}
}
Vielen Dank im Voraus.