Hallo,
ich möchte für das Importieren und Exportieren von Tabelleninhalten (Excel, Access, etc.) Linien zwischen den verschiedenen Tabellenspaltenüberschriften zeichnen lassen. Also erst klickt man die Überschrift aus dem linken Panel an, dann aus dem rechten.
1. Irgendwie gefällt mir das mit den Linien nicht. Vielleicht hat jemand eine bessere Idee für mich. Ich möchte einfach die verschiedenen Spalten einer Tabelle in Excel oder Access meiner Tabelle zuweisen lassen, jedoch können die Spalten eben auch in einer anderen Reihenfolge vorliegen.
2. Der ValueChangedListener der JScrollBar funktioniert nicht richtig. Wenn ich ein paar Mal die ScrollBar hoch- und runter schiebe sind die Linien nicht mehr da wo sie ursprünglich mal waren.
Zum Testen habe ich mal ein wenig Code zusammengestückelt. Ich hoffe, es ist nicht zu viel, um das Hauptproblem noch erkennen zu können...
Vielen Dank im Voraus!
ich möchte für das Importieren und Exportieren von Tabelleninhalten (Excel, Access, etc.) Linien zwischen den verschiedenen Tabellenspaltenüberschriften zeichnen lassen. Also erst klickt man die Überschrift aus dem linken Panel an, dann aus dem rechten.
1. Irgendwie gefällt mir das mit den Linien nicht. Vielleicht hat jemand eine bessere Idee für mich. Ich möchte einfach die verschiedenen Spalten einer Tabelle in Excel oder Access meiner Tabelle zuweisen lassen, jedoch können die Spalten eben auch in einer anderen Reihenfolge vorliegen.
2. Der ValueChangedListener der JScrollBar funktioniert nicht richtig. Wenn ich ein paar Mal die ScrollBar hoch- und runter schiebe sind die Linien nicht mehr da wo sie ursprünglich mal waren.
Zum Testen habe ich mal ein wenig Code zusammengestückelt. Ich hoffe, es ist nicht zu viel, um das Hauptproblem noch erkennen zu können...
Vielen Dank im Voraus!
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.SystemColor;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
public class Panels {
private final Panel panelForPaint = new Panel();
private Vector vectorForIntLabels = new Vector();
private Vector vectorForExtLabels = new Vector();
private boolean shouldPaint =false;
private Vector lineCache = new Vector();
private boolean deleteAll=false;
private int valueOfScrollBar;
public void init(){
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(300,220));
JPanel panelForBackground = new JPanel();
panelForBackground.setLayout(new BorderLayout());
panelForBackground.setPreferredSize(new Dimension(300,220));
JPanel emptyLeftPanel = new JPanel();
emptyLeftPanel.setPreferredSize(new Dimension(350,30));
emptyLeftPanel.setBackground(Color.lightGray);
JPanel emptyRightPanel = new JPanel();
emptyRightPanel.setPreferredSize(new Dimension(350,30));
emptyRightPanel.setBackground(Color.lightGray);
JPanel textPanelForExtHeader = new JPanel();
textPanelForExtHeader.setLayout(new GridLayout(8,1));
textPanelForExtHeader.setBackground(Color.white);
textPanelForExtHeader.setPreferredSize(new Dimension(120,130));
JPanel textPanelForIntHeader = new JPanel();
textPanelForIntHeader.setLayout(new GridLayout(6,1));
textPanelForIntHeader.setBackground(Color.white);
textPanelForIntHeader.setPreferredSize(new Dimension(120,100));
panelForPaint.setPreferredSize(new Dimension(60,50));
panelForPaint.setBackground(Color.lightGray);
final HashMap mapping = new HashMap();
final int size = 5;
final int sizeExt = 7;
for(int i=0;i<size;i++){
final JLabel label = new JLabel();
label.setText("test"+i);
label.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 5, Color.white));
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
for(int j=0;j<size;j++){
((JLabel) vectorForIntLabels.get(j)).setOpaque(false);
((JLabel) vectorForIntLabels.get(j)).setForeground(Color.black);
((JLabel) vectorForIntLabels.get(j)).setBackground(Color.white);
((JLabel) vectorForIntLabels.get(j)).repaint();
}
for(int k=0;k<sizeExt;k++){
if(((JLabel) vectorForExtLabels.get(k)).getBackground().toString().contains("java.awt.SystemColor")){
if(!mapping.containsKey(((JLabel) vectorForExtLabels.get(k)).getText())&&!mapping.containsValue(label.getText())){
shouldPaint=true;
Vector pointVector = new Vector();
pointVector.add(((JLabel) vectorForExtLabels.get(k)).getX());
pointVector.add(((JLabel) vectorForExtLabels.get(k)).getY());
pointVector.add(label.getX());
pointVector.add(label.getY());
lineCache.add(pointVector);
mapping.put(((JLabel) vectorForExtLabels.get(k)).getText(), label.getText());
panelForPaint.setCordinates(((JLabel) vectorForExtLabels.get(k)).getX(), ((JLabel) vectorForExtLabels.get(k)).getY(),label.getX(), label.getY());
panelForPaint.paintComponent(panelForPaint.getGraphics());
}
}
}
for(int j=0;j<sizeExt;j++){
((JLabel) vectorForExtLabels.get(j)).setOpaque(false);
((JLabel) vectorForExtLabels.get(j)).setForeground(Color.black);
((JLabel) vectorForExtLabels.get(j)).setBackground(Color.white);
((JLabel) vectorForExtLabels.get(j)).repaint();
}
label.setOpaque(true);
label.setBackground(SystemColor.textHighlight);
label.setForeground(SystemColor.textHighlightText);
}
});
textPanelForIntHeader.add(label);
vectorForIntLabels.add(label);
}
for(int i=0;i<sizeExt;i++){
final JLabel label = new JLabel();
label.setText("test"+i);
label.setBorder(BorderFactory.createMatteBorder(0, 5, 0, 5, Color.white));
label.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
for(int j=0;j<sizeExt;j++){
((JLabel) vectorForExtLabels.get(j)).setOpaque(false);
((JLabel) vectorForExtLabels.get(j)).setForeground(Color.black);
((JLabel) vectorForExtLabels.get(j)).setBackground(Color.white);
((JLabel) vectorForExtLabels.get(j)).repaint();
}
for(int k=0;k<size;k++){
if(((JLabel) vectorForIntLabels.get(k)).getBackground().toString().contains("java.awt.SystemColor")){
if(!mapping.containsKey(((JLabel) vectorForIntLabels.get(k)).getText())&&!mapping.containsValue(label.getText())){
shouldPaint=true;
Vector pointVector = new Vector();
pointVector.add(((JLabel) vectorForIntLabels.get(k)).getX());
pointVector.add(((JLabel) vectorForIntLabels.get(k)).getY());
pointVector.add(label.getX());
pointVector.add(label.getY());
lineCache.add(pointVector);
mapping.put(((JLabel) vectorForIntLabels.get(k)).getText(), label.getText());
panelForPaint.setCordinates(((JLabel) vectorForIntLabels.get(k)).getX(), ((JLabel) vectorForIntLabels.get(k)).getY(),label.getX(), label.getY());
panelForPaint.paintComponent(panelForPaint.getGraphics());
}
}
}
for(int j=0;j<size;j++){
((JLabel) vectorForIntLabels.get(j)).setOpaque(false);
((JLabel) vectorForIntLabels.get(j)).setForeground(Color.black);
((JLabel) vectorForIntLabels.get(j)).setBackground(Color.white);
((JLabel) vectorForIntLabels.get(j)).repaint();
}
label.setOpaque(true);
label.setBackground(SystemColor.textHighlight);
label.setForeground(SystemColor.textHighlightText);
}
});
textPanelForExtHeader.add(label);
vectorForExtLabels.add(label);
}
JPanel panelForPanels = new JPanel();
panelForPanels.setLayout(new BorderLayout());
JScrollPane scrollPaneForInt = new JScrollPane(textPanelForIntHeader,ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPaneForInt.setPreferredSize(new Dimension(120,200));
final JScrollPane scrollPaneForExt = new JScrollPane(textPanelForExtHeader,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPaneForExt.setPreferredSize(new Dimension(120,200));
valueOfScrollBar = scrollPaneForExt.getVerticalScrollBar().getValue();
scrollPaneForExt.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener(){
public void adjustmentValueChanged( AdjustmentEvent e){
deleteAll=true;
Vector pointVector = new Vector();
int size = lineCache.size();
System.out.println("e.Value:"+e.getValue());
System.out.println("value:"+valueOfScrollBar);
System.out.println("y der scrollbar:"+scrollPaneForExt.getVerticalScrollBar().getValue());
System.out.println("Max:"+scrollPaneForExt.getVerticalScrollBar().getMaximum());
System.out.println("Min:"+scrollPaneForExt.getVerticalScrollBar().getMinimum());
for(int k=0;k<size;k++){
pointVector = (Vector) lineCache.get(k);
if(valueOfScrollBar!=scrollPaneForExt.getVerticalScrollBar().getValue()){
if(valueOfScrollBar<e.getValue()){
pointVector.set(3, ((Integer)pointVector.get(3))-(scrollPaneForExt.getVerticalScrollBar().getValue()-valueOfScrollBar));
pointVector.set(3,(Integer)(pointVector.get(3))-1);
}
else{
if(e.getValue()<scrollPaneForExt.getVerticalScrollBar().getMaximum()&&e.getValue()!=0){
pointVector.set(3, ((Integer)pointVector.get(3))+(valueOfScrollBar-scrollPaneForExt.getVerticalScrollBar().getValue()));
pointVector.set(3,(Integer)(pointVector.get(3))+1);
}
}
lineCache.remove(k);
lineCache.add(pointVector);
}
}
valueOfScrollBar=e.getValue();
panelForPaint.paintComponent(panelForPaint.getGraphics());
}
});
panelForPanels.add("West",scrollPaneForInt);
panelForPanels.add("Center",panelForPaint);
panelForPanels.add("East",scrollPaneForExt);
JPanel panelForNorth = new JPanel();
panelForNorth.setPreferredSize(new Dimension(100,320));
panelForNorth.setBackground(Color.lightGray);
JPanel panelForSouth = new JPanel();
panelForSouth.setPreferredSize(new Dimension(100,320));
panelForSouth.setBackground(Color.lightGray);
panelForBackground.add("North", panelForNorth);
panelForBackground.add("South", panelForSouth);
panelForBackground.add("West", emptyLeftPanel);
panelForBackground.add("East", emptyRightPanel);
panelForBackground.add("Center",panelForPanels);
frame.add(panelForBackground);
frame.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Panels panels = new Panels();
panels.init();
}
class Panel extends JPanel{
private int x;
private int y;
private int x2;
private int y2;
public void setCordinates(int x, int y, int x2, int y2){
this.x=x;
this.y=y;
this.x2=x2;
this.y2=y2;
}
public void paintComponent(Graphics g){
super.paintComponents(g);
Graphics2D g2d = (Graphics2D) g;
if(deleteAll){
g2d.clearRect(0, 0, 200, 200);
deleteAll=false;
}
if(shouldPaint){
int size = lineCache.size();
for(int i=0;i<size;i++){
Vector pointVector=(Vector) lineCache.get(i);
g2d.drawLine((Integer)pointVector.get(0), ((Integer)pointVector.get(1))+12, ((Integer)pointVector.get(2))+80, ((Integer)pointVector.get(3))+12);
}
}
}
}
}