Tach zusammen!
Ich habe mal wieder Probleme mit einem MouseListener.
Im nachfolgenden Code wollte ich so eine kleine Dropdown-Table programmieren, die aufpoppt, wenn z.B eine Postleitzahl etc. in ein Textfeld eingegeben wird. Die Daten kommen später natürlich aus einer Datenbank.
Ich bekomme es nun ums Verrecken nicht hin, dass die entsprechenden Daten nack Klick auf die Tabelle auch in die Textfelder übertragen werden, weil der Mouslistener, der an t hängt, nicht reagiert.
Hat jemand einen Vorschlag, wie ich die Daten aus Table in meine Textfelder bekommen kann? Vielleicht ist das ganze Konzept ja auch Mist. Schaue mir auch gerne alternative Konzepte an!
Hier die zwei Testklassen: (Weiss leider nicht, wie das Code-Highlighting im neuen Forum passiert!)
A) Die Main-Klasse
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main extends javax.swing.JFrame
{
private Table t;
private JTextField[] tf;
private JPanel[] tp;
public Main()
{
t = new Table();
initComponents();
}
private void initComponents()
{
setSize(500,300);
setResizable(false);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setLayout(new GridLayout(3, 4));
t.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent me)
{
System.out.println("Klappt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
t.retriveData();
for(int i = 0; i<4; i++)
{
tf.setText(t.data);
System.out.println("Im TextFeld "+i+" sollte "+t.data+" stehen");
}
t.dispose();
}
});
tf = new JTextField[4];
tp = new JPanel[3];
for(int i = 0; i<3; i++)
{
tp = new javax.swing.JPanel();
add(tp);
}
for(int i = 0; i<4; i++)
{
tf = new javax.swing.JTextField();
tf.setPreferredSize(new java.awt.Dimension(100, 30));
tp[1].add(tf);
}
tf[0].addKeyListener(new java.awt.event.KeyAdapter() {
@Override
public void keyTyped(java.awt.event.KeyEvent evt) {
txtKeyTyped(evt);
}
});
}
private void txtKeyTyped(KeyEvent evt)
{
showTable();
// checkForClick();
}
private void showTable()
{
System.out.println("***ShowTable***");
int px = tf[0].getLocation().x;
int py = tf[0].getLocation().y;
t.setVisible(true);
if (tf[0].hasFocus())
{
t.setLocation(px+25,py+220);
// checkForClick();
repaint();
setVisible(true);
}
}
private void checkForClick()
{ System.out.println("In Table ist das ClickFlag "+t.getClickFlag());
t.retriveData();
for(int i = 0; i<4; i++)
{
tf.setText(t.data);
System.out.println("Im TextFeld "+i+" sollte "+t.data+" stehen");
}
}
public static void main(String args[])
{
new Main().setVisible(true);
}
}
und B) die Table
import java.awt.*;
import java.awt.ScrollPane;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
class Table extends JFrame implements MouseListener
{
private JPanel topPanel;
private JTable table;
private String columnNames[];
private String dataValues[][];
private String cellValue;
public String[] data;
private int columns;
private boolean clickFlag;
public Table()
{
setTitle( "Data" );
setSize( 350, 165 );
setUndecorated(true);
setAlwaysOnTop( true );
topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
CreateColumns();
CreateData();
table = new JTable( dataValues, columnNames );
table.setShowHorizontalLines( true );
table.setRowSelectionAllowed( false );
table.setColumnSelectionAllowed( false );
table.addMouseListener(this);
table.setSelectionForeground( Color.white );
table.setSelectionBackground( Color.blue );
ScrollPane sp = new ScrollPane();
sp.add(table);
topPanel.add( sp, BorderLayout.CENTER );
setClickFlag(false);
}
public void CreateColumns()
{
columnNames = new String[4];
for( int iCtr = 0; iCtr < 4; iCtr++ )
{
columnNames[iCtr] = "Col:" + iCtr;
}
}
public int getColumnCount()
{
columns = table.getColumnCount();
return columns;
}
public void CreateData()
{
dataValues = new String[10][8];
for( int iY = 0; iY < 10; iY++ )
{
for( int iX = 0; iX < 8; iX++ )
{
dataValues[iY][iX] = "" + iX + "," + iY;
}
}
}
// Retrieve all data of a selected row
public String retriveData()
{ data = new String[getColumnCount()];
if(!getClickFlag())
{
for (int i = 0; i < getColumnCount(); i++)
{
data = "";
}
}
else if (getClickFlag())
{
for (int i = 0; i < getColumnCount(); i++)
{
data = String.valueOf(table.getValueAt(table.getSelectedRow(), i));
System.out.println("Spalte " + i + " hat den Wert " + data);
}
}
return cellValue;
}
public static void main( String args[] )
{
Table t = new Table();
t.setVisible( true );
}
public void mouseClicked(MouseEvent e)
{ System.out.println("TableClicked");
setClickFlag(true);
retriveData();
dispose();
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public boolean getClickFlag()
{
return clickFlag;
}
public void setClickFlag(boolean clickFlag)
{
this.clickFlag = clickFlag;
}
}
Ich sitze wirklich schon fast eine Woche an diesem Problem und danke schon mal im Voraus
Schönen Gruss aus Quickborn
raptorrs
Ich habe mal wieder Probleme mit einem MouseListener.
Im nachfolgenden Code wollte ich so eine kleine Dropdown-Table programmieren, die aufpoppt, wenn z.B eine Postleitzahl etc. in ein Textfeld eingegeben wird. Die Daten kommen später natürlich aus einer Datenbank.
Ich bekomme es nun ums Verrecken nicht hin, dass die entsprechenden Daten nack Klick auf die Tabelle auch in die Textfelder übertragen werden, weil der Mouslistener, der an t hängt, nicht reagiert.
Hat jemand einen Vorschlag, wie ich die Daten aus Table in meine Textfelder bekommen kann? Vielleicht ist das ganze Konzept ja auch Mist. Schaue mir auch gerne alternative Konzepte an!
Hier die zwei Testklassen: (Weiss leider nicht, wie das Code-Highlighting im neuen Forum passiert!)
A) Die Main-Klasse
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main extends javax.swing.JFrame
{
private Table t;
private JTextField[] tf;
private JPanel[] tp;
public Main()
{
t = new Table();
initComponents();
}
private void initComponents()
{
setSize(500,300);
setResizable(false);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setLayout(new GridLayout(3, 4));
t.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent me)
{
System.out.println("Klappt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
t.retriveData();
for(int i = 0; i<4; i++)
{
tf.setText(t.data);
System.out.println("Im TextFeld "+i+" sollte "+t.data+" stehen");
}
t.dispose();
}
});
tf = new JTextField[4];
tp = new JPanel[3];
for(int i = 0; i<3; i++)
{
tp = new javax.swing.JPanel();
add(tp);
}
for(int i = 0; i<4; i++)
{
tf = new javax.swing.JTextField();
tf.setPreferredSize(new java.awt.Dimension(100, 30));
tp[1].add(tf);
}
tf[0].addKeyListener(new java.awt.event.KeyAdapter() {
@Override
public void keyTyped(java.awt.event.KeyEvent evt) {
txtKeyTyped(evt);
}
});
}
private void txtKeyTyped(KeyEvent evt)
{
showTable();
// checkForClick();
}
private void showTable()
{
System.out.println("***ShowTable***");
int px = tf[0].getLocation().x;
int py = tf[0].getLocation().y;
t.setVisible(true);
if (tf[0].hasFocus())
{
t.setLocation(px+25,py+220);
// checkForClick();
repaint();
setVisible(true);
}
}
private void checkForClick()
{ System.out.println("In Table ist das ClickFlag "+t.getClickFlag());
t.retriveData();
for(int i = 0; i<4; i++)
{
tf.setText(t.data);
System.out.println("Im TextFeld "+i+" sollte "+t.data+" stehen");
}
}
public static void main(String args[])
{
new Main().setVisible(true);
}
}
und B) die Table
import java.awt.*;
import java.awt.ScrollPane;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
class Table extends JFrame implements MouseListener
{
private JPanel topPanel;
private JTable table;
private String columnNames[];
private String dataValues[][];
private String cellValue;
public String[] data;
private int columns;
private boolean clickFlag;
public Table()
{
setTitle( "Data" );
setSize( 350, 165 );
setUndecorated(true);
setAlwaysOnTop( true );
topPanel = new JPanel();
topPanel.setLayout( new BorderLayout() );
getContentPane().add( topPanel );
CreateColumns();
CreateData();
table = new JTable( dataValues, columnNames );
table.setShowHorizontalLines( true );
table.setRowSelectionAllowed( false );
table.setColumnSelectionAllowed( false );
table.addMouseListener(this);
table.setSelectionForeground( Color.white );
table.setSelectionBackground( Color.blue );
ScrollPane sp = new ScrollPane();
sp.add(table);
topPanel.add( sp, BorderLayout.CENTER );
setClickFlag(false);
}
public void CreateColumns()
{
columnNames = new String[4];
for( int iCtr = 0; iCtr < 4; iCtr++ )
{
columnNames[iCtr] = "Col:" + iCtr;
}
}
public int getColumnCount()
{
columns = table.getColumnCount();
return columns;
}
public void CreateData()
{
dataValues = new String[10][8];
for( int iY = 0; iY < 10; iY++ )
{
for( int iX = 0; iX < 8; iX++ )
{
dataValues[iY][iX] = "" + iX + "," + iY;
}
}
}
// Retrieve all data of a selected row
public String retriveData()
{ data = new String[getColumnCount()];
if(!getClickFlag())
{
for (int i = 0; i < getColumnCount(); i++)
{
data = "";
}
}
else if (getClickFlag())
{
for (int i = 0; i < getColumnCount(); i++)
{
data = String.valueOf(table.getValueAt(table.getSelectedRow(), i));
System.out.println("Spalte " + i + " hat den Wert " + data);
}
}
return cellValue;
}
public static void main( String args[] )
{
Table t = new Table();
t.setVisible( true );
}
public void mouseClicked(MouseEvent e)
{ System.out.println("TableClicked");
setClickFlag(true);
retriveData();
dispose();
}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public boolean getClickFlag()
{
return clickFlag;
}
public void setClickFlag(boolean clickFlag)
{
this.clickFlag = clickFlag;
}
}
Ich sitze wirklich schon fast eine Woche an diesem Problem und danke schon mal im Voraus
Schönen Gruss aus Quickborn
raptorrs