JTables Focus behalten

jorgeHX

Erfahrenes Mitglied
Hallo zusammen,
ich hoffe es gibt jemanden der JTables sehr gut beherrscht. Ich habe nämlich seit geraumer Zeit meine Probleme in folgender Hinsicht:

Ich habe eine Splitpane und in dem linken Teil 4 Tabellen
(Tabellen 1-4) angeordnet, sowie 4 Tabellen in dem rechten Teil(Tabellen 5-8).
Jetzt will ich in jedem Teil per Mausklick zwischen den Tabellen hin und her springen.

Klicke ich z.B. auf Tabelle 1 und anschließend auf Tabelle 3 und dann auf Tab.2 dann soll der Focus von 1 in 3 und dann in 2 springen.

Der rechte Teil soll aber bei diesen Klicks nicht angesprochen werden und den alten Focus behalten.
Im Moment verschwindet der Focus in einer Hälfte immer sobald ich in die andere Hälfte springe... Weiß da jemand woran das liegt?

Zum Aufbau kann ich sagen, dass die zwei Hälften in unterschiedlichen Klassen erstellt werden und dann via Panel der SplitPane hinzugefügt werden.

Zum Abschluss würde ich sehr gerne fragen, wie man dann z.B. bei Klick in Tabelle 3 der Tabelle 7 mitteilen kann, dass der Focus nun z.B. auf Reihe 4, Spalte 3 in Tabelle 7 gelegt werden soll. Wohl bemerkt, darf der Focus in Tabelle 3 nicht verloren gehen.

Hoffentlich war der lange Text nicht zu abstoßend, aber ich verzweifle langsam an diesem Problem... Tausend Dank guys
 
Hallo

Code:
public class KalenderRegister
    extends JComponent
    implements ChangeListener{
  long kalenderID;
  JTabbedPane tp;
  JPanel panel weekPanel;

  JPanel contentPane;
  BorderLayout borderLayout1 = new BorderLayout();
  protected JSplitPane innerSplitPane = new JSplitPane();
  protected static long teamID;

  JScrollPane ScrollPane;
  Frame parent;

  public KalenderRegister(Frame parent) {
    try {
      this.parent = parent;
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception {

    this.setLayout(null);

    tp = new JTabbedPane();
    tp.addChangeListener(this);

    tp.setBounds(new Rectangle(0, 0, 700, 680));

    firstPanel = new JPanel();
    firstPanel.setLayout(null);
    firstPanel.setBounds(new Rectangle(0, 0, 700, 680));
    
    innerSplitPane.setOneTouchExpandable(false);
    innerSplitPane.setDividerLocation(550);
    innerSplitPane.setBounds(new Rectangle(0, 0, 700, 680));

    FirstGroup firstGroup = new FirstGroup(parent);
    innerSplitPane.setLeftComponent(firstGroup);

    SecondGroup secondGroup = new SecondGroup(false);
    secondGroup.setSecondGroup(firstGroup);
    innerSplitPane.setRightComponent(secondGroup);
    innerSplitPane.setEnabled(false); // somit kann sie nicht verschoben werden

    firstPanel.add(innerSplitPane);

    this.add(tp);

    tp.addTab("Planer", firstPanel);
  }
}


public class FirstGroup
    extends JPanel
    implements ActionListener, MouseListener{
    
    // hier werden Variablen deklariert....
    int jahr = 2004;
    int mm = 0;
    int dd = 12;
    String datum = "Januar";

   public FirstGroup(Frame parent){
         // außerdem erhalten die vier Tabellen ein Tablemodel
         // in etwa so
        tablemodel_1 = new FirstGroupModel(jahr, mm + 1, dd, datum);
        tablemodel_2 = new FirstGroupModel(jahr, mm + 1, dd+1, datum);
        tablemodel_3 = new FirstGroupModel(jahr, mm + 1, dd+2, datum);
        tablemodel_4 = new FirstGroupModel(jahr, mm + 1, dd+3, datum);

       jbInit();
   }

   public void jbInit() {

    this.setVisible(true);
    this.setLayout(new BorderLayout());

    jPanelTop.setLayout(null);
    jPanelTop.setSize(650, 660);

    back_bt = new JButton(new ImageIcon("back.jpg"));
    back_bt.setBounds(195, 5, 19, 20);
    back_bt.addActionListener(this);

    header = new JLabel();
    header.setText("Planer");
    header.setBounds(225, 5, 100, 20);

    forward_bt = new JButton(new ImageIcon("forward.jpg"));
    forward_bt.setBounds(335, 5, 19, 20);
    forward_bt.addActionListener(this);

    firstTable_tb.setModel(tablemodel_1);
    firstTable_tb.setBackground(Color.WHITE);
    firstTable_tb.addMouseListener(this);
    firstTable_tb.getTableHeader().setReorderingAllowed(false);
    firstTable_tb.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    jScrollPane_1.setBounds(0, 30, 275, 155);
    jScrollPane_1.getViewport().add(firstTable_tb, null);
    // sorge dafür, dass die Reihen unterschiedliche Farben bekommen
    firstTable_tb.setDefaultRenderer(Object.class,
                                     new ColoredTable(tablemodel_1));

    // hier folgt dasselbe für die drei anderen Tabellen

    jPanelTop.add(jScrollPane_1, null);

    this.add(jPanelTop, BorderLayout.CENTER);
  }

  // hier passiert dann was eigentlich unabhängig vom Focus sein müsste

 // und am Ende dann:


  // TableCellRenderer, um die Tabellen farblich zu hinterlegen
   public class ColoredTable
       implements TableCellRenderer {
     private Color lightBlue = new Color(237, 243, 254);
     private Color darkBlue = new Color(61, 128, 223);
     FirstGroupModel model;

     public ColoredTable(FirstGroupModel model) {
       this.model = model;
     }


     public Component getTableCellRendererComponent(
         JTable table,
         Object value,
         boolean isSelected,
         boolean hasFocus,
         int row,
         int column) {
       // Label erzeugen
       JLabel label = new JLabel( (String) value);
       label.setOpaque(true);
       Border b = BorderFactory.createEmptyBorder(1, 1, 1, 1);
       label.setBorder(b);
       label.setFont(table.getFont());
       label.setForeground(table.getForeground());
       label.setBackground(table.getBackground());

       // hier wird nur das tablemodel_1 angesprochen
       if (model == tablemodel_1) {
         // wenn ein Kästchen geklickt wurde, wird dieser markiert
         if (isSelected) {
           label.setBackground(darkBlue);
         }
         else label.setBackground(Color.WHITE);
       }
       else if (model == tablemodel_2) {
             // selbes Spiel wie oben
       }
       // hier kommst dasselbe für tablemodels 3 und 4
   }
}

// bei der Klasse SecondGroup läuft es genauso ab vom Prinzip...
// klicke ich nun in Tabellen 1-4 rum, so will ich, dass sich nur dort der Focus anpasst
// in den Tabellen 5-8 soll der Focus nicht verschwinden, aber gegebenenfalls sich anpassen, d.h. klicke ich z.B. von Tabelle 1 in Tabelle 3, dann soll sich der Focus in Tabelle 5 von Reihe 5, Spalte3 auf Reihe 5, Spalte 5 verändern, oder so ähnlich.
//Ich hoffe man versteht was ich meine.
 
hallo,
ich weiß, dass mein Problem schon etwas spezieller ist, aber ich bin auch für Ideen dankbar,
viel Grüße
 
Zurück