Hallo Leut
Ich hab ein kleines Problemchen welches ihr mir vieleicht helfen könnt zu lösen.
Und zwar habe ich eine Swing Application, die zwei RadioButtons, eine ComboBox und ein frame beinhaltet.
Ich habe vor die ComboBox mit Einträgen zu füllen, die ich aus Textdateien auslese, in eine Variable schreibe und diese mit split() als Array definiere.
Dieses Array wird dann an die ComboBox übergeben und angezeigt.
Bis dato klappt das alles super (sofern ich dies im Konstruktor selbst realisiere).
Nun aber zum eigentlichen Haupproblem.
Ich möchte das beim Selectieren der RadioButtons unterschiedliche Texdateien eingelesen und deren Inhalt in der ComboBox angezeigt werden.
Sprich, klicke ich auf radio 1 zeige mit den Inhalt von Textdatei1 in der ComboBox, klicke ich auf radio 2 zeige mir den Inhalt von Textdatei 2 in der ComboBox.
Der Hintergrund hier ist, das ich unterschiedliche Datenbanken, die einmal Lokal und einmal Extern also auf einem Server im Netz, liegen, unabhängig voneinander angezeigt bekommen möchte.
Weiterhin benötige ich diese RadioSelectionen um beim Klick auf eine Datenbank aus der ComboBox heraus die unterschiedlichen Zugangsparameter für die Datenbanken zu nutzen (das zu der Motivation der Übung).
Ich möchte das gerne über einen ActionListener realisieren, was aber so nicht ganz funktioniert (hier ist das Problem).
Versuche ich die ComboBox innerhalb der Listener neu zu setzen bekomme ich lediglich irgendwelche Pfade in der ComboBox angezeigt, nicht aber den Inhalt des Arrays.
Versuche ich das Array nur innerhalb der listener zu definieren und an den Konstruktor zu übergeben scheitere ich genauso kläglich.
Zur Kontrolle ob der Einlesevorgang auch funtioniert lasse ich mir die Variable anzeigen, die den Inhalt der Textdateien aufnimmt (hier gibt es keine Probleme).
Ich habe euch hier mal den Code beigefügt, wäre genial wenn ihr mir da weiterhelfen könntet.
Mein Dozent kann es jedenfalls nicht....*gg*
Vieleicht muss ich ja nur die Array Variable anders an den Konstruktor übergeben, oder so ???
Ich wäre auch für eine anderen Lösung dankbar, sofern sie den funktioniert.
P.S. Die Textdateien sind übrigends vorhanden und beihalten bereits Einträge zu meinen Datenbanken.
Solltet ihr das Script also ausprobieren wollen, so müsstet ihr diese Dateien selbst noch anlegen und füllen.
Besten Dank im Voraus
Mad
Ich hab ein kleines Problemchen welches ihr mir vieleicht helfen könnt zu lösen.
Und zwar habe ich eine Swing Application, die zwei RadioButtons, eine ComboBox und ein frame beinhaltet.
Ich habe vor die ComboBox mit Einträgen zu füllen, die ich aus Textdateien auslese, in eine Variable schreibe und diese mit split() als Array definiere.
Dieses Array wird dann an die ComboBox übergeben und angezeigt.
Bis dato klappt das alles super (sofern ich dies im Konstruktor selbst realisiere).
Nun aber zum eigentlichen Haupproblem.
Ich möchte das beim Selectieren der RadioButtons unterschiedliche Texdateien eingelesen und deren Inhalt in der ComboBox angezeigt werden.
Sprich, klicke ich auf radio 1 zeige mit den Inhalt von Textdatei1 in der ComboBox, klicke ich auf radio 2 zeige mir den Inhalt von Textdatei 2 in der ComboBox.
Der Hintergrund hier ist, das ich unterschiedliche Datenbanken, die einmal Lokal und einmal Extern also auf einem Server im Netz, liegen, unabhängig voneinander angezeigt bekommen möchte.
Weiterhin benötige ich diese RadioSelectionen um beim Klick auf eine Datenbank aus der ComboBox heraus die unterschiedlichen Zugangsparameter für die Datenbanken zu nutzen (das zu der Motivation der Übung).
Ich möchte das gerne über einen ActionListener realisieren, was aber so nicht ganz funktioniert (hier ist das Problem).
Versuche ich die ComboBox innerhalb der Listener neu zu setzen bekomme ich lediglich irgendwelche Pfade in der ComboBox angezeigt, nicht aber den Inhalt des Arrays.
Versuche ich das Array nur innerhalb der listener zu definieren und an den Konstruktor zu übergeben scheitere ich genauso kläglich.
Zur Kontrolle ob der Einlesevorgang auch funtioniert lasse ich mir die Variable anzeigen, die den Inhalt der Textdateien aufnimmt (hier gibt es keine Probleme).
Ich habe euch hier mal den Code beigefügt, wäre genial wenn ihr mir da weiterhelfen könntet.
Mein Dozent kann es jedenfalls nicht....*gg*
Vieleicht muss ich ja nur die Array Variable anders an den Konstruktor übergeben, oder so ???
Ich wäre auch für eine anderen Lösung dankbar, sofern sie den funktioniert.
P.S. Die Textdateien sind übrigends vorhanden und beihalten bereits Einträge zu meinen Datenbanken.
Solltet ihr das Script also ausprobieren wollen, so müsstet ihr diese Dateien selbst noch anlegen und füllen.
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.SQLException;
import javax.swing.*;
public class ComboBoxTest extends JFrame {
public JButton buttonInsert, buttonReset, buttonConnect,buttonConnectEx,buttonOk;
public JTextArea frame, frameResult;
public JTextArea frameTable;
public JComboBox comboTable,comboTableEx;
public File openFile;
public String result,resultEx;
public ButtonGroup group;
public String testtext;
public int ausgabe = 0;
public JRadioButton radio1,radio2;
public String[] lang = { "" };
public ComboBoxTest() {
super();
// ContainerPanel für ResultBereich
JPanel content3 = new JPanel();
this.getContentPane().setLayout(new BorderLayout());
frameResult = (JTextArea) new JTextArea(5,30);
frameResult.setBorder(BorderFactory.createLineBorder(Color.black));
frameResult.setText(testtext);
JScrollPane scrollPane1 = new JScrollPane(frameResult);
scrollPane1.setPreferredSize(new Dimension(400, 50));
content3.add(scrollPane1);
// ContainerPanel für ComboBox Begleitlabel und ComboBox
JPanel content1 = new JPanel();
this.getContentPane().setLayout(new BorderLayout());
radio1 = new JRadioButton("lokal");
radio1.setLocation(100,40);
radio2 = new JRadioButton("extern");
radio2.setLocation(150,40);
radio1.setSelected(true);
group = new ButtonGroup();
group.add(radio1);
group.add(radio2);
radio1.addItemListener(new BoxenEreignis());
radio2.addItemListener(new BoxenEreignis());
content1.add(radio1);
content1.add(radio2);
JPanel content2 = new JPanel();
this.getContentPane().setLayout(new BorderLayout());
comboTable = new JComboBox();
comboTable.setSelectedItem(lang);
comboTable.setSize(250,10);
comboTable.setBackground(Color.WHITE);
comboTable.setEditable( true );
comboTable.setMaximumRowCount( 4 );
content2.add(comboTable);
JPanel contentContain = new JPanel();
this.getContentPane().setLayout(new BorderLayout());
contentContain.add(content1, BorderLayout.NORTH);
contentContain.add(content2, BorderLayout.CENTER);
contentContain.add(content3, BorderLayout.SOUTH);
// Aufruf
this.setContentPane(contentContain);
this.pack();
}
class BoxenEreignis implements ItemListener {
public void itemStateChanged(ItemEvent ei) {
if (radio1.isSelected()) {
try
{
FileReader file = new FileReader( "db.txt" );
BufferedReader reader = new BufferedReader(file);
result="";
String dbValue;
while((dbValue = reader.readLine()) != null) {
if(result == null) result = "";
result += dbValue ;
}
comboTable.removeItem(lang);
lang = result.split(",");
comboTable.addItem(lang);
} catch ( IOException e ) {
frameResult.setText("Fehler beim Lesen der Datei!");
}
}
if (radio2.isSelected()) {
try
{
FileReader file = new FileReader( "dbExName.txt" );
BufferedReader reader = new BufferedReader(file);
result="";
String dbValue;
while((dbValue = reader.readLine()) != null) {
if(result == null) result = "";
result += dbValue;
}
comboTable.removeItem(lang);
lang = result.split(",");
comboTable.addItem(lang);
} catch ( IOException e ) {
frameResult.setText("Fehler beim Lesen der Datei!");
}
}
frameResult.setText(result);
}
}
public static void main(String[] args) {
ComboBoxTest fenster = new ComboBoxTest();
fenster.pack();
fenster.setTitle("SQL-QueryPage");
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setSize(450,150);
fenster.setLocation(380, 50);
fenster.setResizable( false );
fenster.setVisible(true);
}
}
Besten Dank im Voraus
Mad