leerstellen zählen und aufüllen lassen

DARK_ZERATO2

Mitglied
morgen ich hab ein problem :

ich brauche eine methode zum zählen von stellen in einem String der die fehlenden dann auffüllt

ich hab mich mal versucht hb bischen probiert aber das funktioniert nicht

kann mir einer helfen und mir sagen was ich machen soll oder sogar eine schreiben

bin in java GUI erst 1 jahr bin noch ein erfahrender anfänger von java^^

danke im vorraus

mfg
DARK_ZERATO2

ps hier der Quellcode:

Java:
package Verwaltung;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PrinterException;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.Locale;

import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.Size2DSyntax;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListModel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;


/**
 * This code was edited or generated using CloudGarden's Jigloo
 * SWT/Swing GUI Builder, which is free for non-commercial
 * use. If Jigloo is being used commercially (ie, by a corporation,
 * company or business for any purpose whatever) then you
 * should purchase a license for each developer using Jigloo.
 * Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
 * Use of Jigloo implies acceptance of these licensing terms.
 * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
 * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
 * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class DruckenJlist extends javax.swing.JFrame {
	private JList jList1;
	private JScrollPane jScrollPane1;
	private JTextField jTextFieldErg;
	private JList jList2;
	private JButton jButtonDrucken;
	private PrintRequestAttributeSet attr;
	private String schemata ="MP_dm0817";
	private String account ="DM0819";
	private String passwort ="glwthx";
	private Connection connection=null;
	private String dummy[][]=new String [9][];
	private String dummy2[][]=new String [1][];
	private String dir=System.getProperty("user.dir");
	private Clip clip;
	private boolean running;
	

	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				DruckenJlist inst = new DruckenJlist();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	public DruckenJlist(String account, String passwort) {
		super();
		initGUI();
	}

	public DruckenJlist() {
		super();
		initGUI();
		try {
			myInit();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private void myInit() throws SQLException{
		try {
			Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			//String Fehl="Der Treiber konnte nicht gefunden werden!";
			//Fehler(Fehl);
			e.printStackTrace();
		}
		connection =DriverManager.getConnection("jdbc:as400://sys3/"+schemata+"", ""+account+"", ""+passwort+"");
		druckList();
		WasDrucken();

	}

	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				ListModel jList1Model = 
					new DefaultComboBoxModel(
							new String[] { "", "" });
				jList1 = new JList();
				getContentPane().add(jList1);
				jList1.setModel(jList1Model);
				jList1.setBounds(7, 123, 1152, 485);
			}
			{
				jButtonDrucken = new JButton();
				getContentPane().add(jButtonDrucken);
				jButtonDrucken.setText("Drucken");
				jButtonDrucken.setBounds(12, 12, 53, 21);
				jButtonDrucken.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						jButtonDruckenActionPerformed(evt);
					}
				});
			}
			{
				jScrollPane1 = new JScrollPane();
				getContentPane().add(jScrollPane1);
				jScrollPane1.setBounds(76, 7, 85, 110);
				{
					ListModel jList2Model = 
						new DefaultComboBoxModel(
								new String[] { "", "" });
					jList2 = new JList();
					jScrollPane1.setViewportView(jList2);
					jList2.setModel(jList2Model);
					jList2.setBounds(76, 7, 85, 110);
					jList2.setPreferredSize(new java.awt.Dimension(93, 117));
					jList2.addListSelectionListener(new ListSelectionListener() {
						public void valueChanged(ListSelectionEvent evt) {
							jList2ValueChanged(evt);
						}
					});
				}
			}
			{
				jTextFieldErg = new JTextField();
				getContentPane().add(jTextFieldErg);
				jTextFieldErg.setBounds(173, 12, 65, 21);
			}
			pack();
			this.setSize(1179, 659);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void jButtonDruckenActionPerformed(ActionEvent evt) {
		print();
	}
	public void print(){
		DefaultTableModel modelTable = new DefaultTableModel();
		modelTable.addColumn("Title");
		for (int i = 0; i < jList1.getModel().getSize(); i++) {
			modelTable.addRow(new Object[]{jList1.getModel().getElementAt(i)});
		}
		JTable table = new JTable(modelTable);
		table.setSize(300, 1500);
		//        table.getTableHeader().setSize(300,30);//mit Spaltenüberschrift
		table.getColumnModel().getColumn(0).setWidth(300);
		try {
			table.print();
		} catch (java.awt.print.PrinterException ex) {
			ex.printStackTrace();
		}
	}
	private void druckList() throws SQLException{
		String abfrage = "select * from MP_dm0817.bericht_schull order by sbildungsgang";

		PreparedStatement psFindeAnsprech = connection.prepareStatement(abfrage);

		ResultSet rs = psFindeAnsprech.executeQuery();

		String psc = "select count(*) from MP_dm0817.bericht_schull";

		PreparedStatement pstmt2 = connection.prepareStatement(psc);
		ResultSet rs2 =   pstmt2.executeQuery();
		rs2.next();
		int rs2z=Integer.parseInt(rs2.getString(1));

		int anzahlRecords=rs2z;

		String[] erg=new String[anzahlRecords];
		//anzahl ermitteln

		dummy[0] =new String [anzahlRecords];
		dummy[1] =new String [anzahlRecords];
		dummy[2] =new String [anzahlRecords];
		dummy[3] =new String [anzahlRecords];
		dummy[4] =new String [anzahlRecords];
		dummy[5] =new String [anzahlRecords];
		dummy[6] =new String [anzahlRecords];
		dummy[7] =new String [anzahlRecords];
		dummy[8] =new String [anzahlRecords];

		for (int i=0;i<erg.length;i++)
		{
			if(rs.next()){
				//array füllen
				
			String fl1=" ";
			int länge1 = (rs.getString(1)).length();
			for(int j=0;30-länge1>j;j++)fl1=fl1+" ";
			
			String fl2=" ";
			int länge2 = (rs.getString(2)).length();
			for(int j=0;30-länge2>j;j++)fl2=fl1+" ";
			
			String fl3=" ";
			int länge3 = (rs.getString(3)).length();
			for(int j=0;30-länge3>j;j++)fl3=fl3+" ";
			
			String fl4=" ";
			int länge4 = (rs.getString(4)).length();
			for(int j=0;30-länge4>j;j++)fl4=fl4+" ";
			
			String fl5=" ";
			int länge5 = (rs.getString(5)).length();
			for(int j=0;30-länge5>j;j++)fl5=fl5+" ";
			
			String fl6=" ";
			int länge6 = (rs.getString(6)).length();
			for(int j=0;30-länge6>j;j++)fl6=fl6+" ";
			
			String fl7=" ";
			int länge7 = (rs.getString(7)).length();
			for(int j=0;30-länge7>j;j++)fl7=fl7+" ";
			
			String fl8=" ";
			int länge8 = (rs.getString(8)).length();
			for(int j=0;30-länge8>j;j++)fl8=fl8+" ";
			
			String fl9=" ";
			int länge9 = (rs.getString(9)).length();
			for(int j=0;30-länge9>j;j++)fl9=fl9+" ";
			
			erg[i]= rs.getString(1)+fl1 + ", " +
			rs.getString(2)+fl2 + ", " +
			rs.getString(3)+fl3 + ", " +
			rs.getString(4)+fl4 + ", " +
			rs.getString(5)+fl5 + ", " +
			rs.getString(6)+fl6 + ", " +
			rs.getString(7)+fl7 + ", " +
			rs.getString(8)+fl8 + ", " +
			rs.getString(9)+fl9;

	
			dummy[0][i] =rs.getString(1)+fl1;
			dummy[1][i] =rs.getString(2)+fl2;
			dummy[2][i] =rs.getString(3)+fl3;
			dummy[3][i] =rs.getString(4)+fl4;
			dummy[4][i] =rs.getString(5)+fl5;
			dummy[5][i] =rs.getString(6)+fl6;
			dummy[6][i] =rs.getString(7)+fl7;
			dummy[7][i] =rs.getString(8)+fl8;
			dummy[8][i] =rs.getString(9)+fl9;
			
			}
			//übertagung der ergebnise
			ListModel jListKundenModel = new DefaultComboBoxModel(erg);
			jList1.setModel(jListKundenModel);
		}	
	}
	private void WasDrucken() throws SQLException{
		String abfrage = "select sbildungsgang from MP_DM0817.schueler group by sbildungsgang";
		PreparedStatement psFindeAnsprech = connection.prepareStatement(abfrage);
		ResultSet rs = psFindeAnsprech.executeQuery();
		String psc = "select count(sbildungsgang) from MP_DM0817.schueler group by sbildungsgang";

		PreparedStatement pstmt2 = connection.prepareStatement(psc);
		ResultSet rs2 =   pstmt2.executeQuery();
		rs2.next();
		int rs2z=Integer.parseInt(rs2.getString(1));

		int anzahlRecords=rs2z;

		String[] erg=new String[anzahlRecords];
		dummy2[0] =new String [anzahlRecords];
		for (int i=0;i<erg.length;i++)
		{
			if(rs.next()){
				//array füllen
				erg[i]= rs.getString(1).trim();


				dummy2[0][i] =rs.getString(1).trim();

			}
			//übertagung der ergebnise
			ListModel jListKundenModel = new DefaultComboBoxModel(erg);
			jList2.setModel(jListKundenModel);
		}
	}
	private void jList2ValueChanged(ListSelectionEvent evt) {
			int index =jList2.getSelectedIndex();
			jTextFieldErg.setText(dummy[0][index].trim());
	}
	/*private void Fehler(String Fehl){
		String titel="Microsoft+Fehlermeldungen=Musik2.wav";
		initPlayer(titel);
			running = true;
			clip.start();
		JOptionPane.showMessageDialog(null,
				Fehl,
				"Fehler",					      
				JOptionPane.WARNING_MESSAGE);
		//System.exit(0);
	}*/
	/*private void initPlayer(String Titel) {
		try {
			AudioInputStream ais = AudioSystem.getAudioInputStream(new File(
					"dir\\"+Titel+""));
			AudioFormat format = ais.getFormat();
			DataLine.Info info = new DataLine.Info(Clip.class, format,
					((int) ais.getFrameLength() * format.getFrameSize()));
			clip = (Clip) AudioSystem.getLine(info);
			clip.open(ais);

			FloatControl gainControl = (FloatControl) clip
					.getControl(FloatControl.Type.MASTER_GAIN);
			gainControl.setValue(1.0F);
		} catch (Exception e) {
			e.printStackTrace();
		}
}*/
}
 

The_S

Top Contributor
Argh ... schrecklicher Code! Was du uns verschwiegen hast: Was mit Was und Wie Viel davon auffüllen? Und wie du es bereits versucht hast. Und was der Code überhaupt soll :p .
 

Tharsonius

Bekanntes Mitglied
Eigentlich ists ganz einfach:
Java:
String temp = "Dies ist ein Beispiel";
System.out.println(temp.length());

Ausgabe ist dann 21.

Auffüllen ganz banal gesprochen würde so gehen:
Java:
String temp = "Dies ist ein Beispiel";
while(temp.length() <30)
  temp = temp+ "X";
Das generiert Dir diesen String:
Dies ist ein BeispielXXXXXXXXX
 

The_S

Top Contributor
Wenn wirklich nur so etwas gemeint ist: Ja. Deine Lösung ist jedoch schrecklich unperformant. Zum Einen verwendest du Strings anstatt StringBuilder, und zum Anderen kann man auf die Schleife auch ganz verzichten.

Java:
String fillWith = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
String toFill = "Das ist nur ein Beispiel";
String filled = toFill + fillWith.substring(toFill.length());
 

Tharsonius

Bekanntes Mitglied
Mein auffüllen hat den Vorteil, dass das variabel gehalten ist. Die 30 braucht man nur durch eine Variable ersetzen und schon füllt der auf beliebige Längen auf.

Gut, StringBuilder hätte ich noch nehmen können, in meinen Programmen verwende ich den normalerweise auch. Aber ich meine auch mal irgendwo gelesen zu haben, dass der StringBuilder gar nicht so viel bringen soll, weil der Compiler das eh in einen StringBuilder umwandelt. Aber grundlegend ists schon richtig, der StringBuilder ist schon besser.
 
G

Gast2

Gast
In den StringUtils (Apache common.lang) gibt es da die "Pad" Funktionen für. Man muss ja nicht jedes Rad neu erfinden - wenn externe libs benutzt werden dürfen wäre das meiner Meinung nach die beste Lösung. Da gibt es auch noch andere recht hilfreiche String funktionen die die Standard API nicht bietet.

StringUtils (Commons Lang 3.0-SNAPSHOT API)
 

The_S

Top Contributor
Mein auffüllen hat den Vorteil, dass das variabel gehalten ist. Die 30 braucht man nur durch eine Variable ersetzen und schon füllt der auf beliebige Längen auf.

Jop. Kommt halt darauf an, was er jetzt benötigt - und vor allem wie dynamisch und wie oft. Evtl. ist es sinnvoller und schneller ein paar "Auffüllvariablen" vorzuhalten, als ständig sehr viele Schleifen durchlaufen zu lassen.

Aber ich meine auch mal irgendwo gelesen zu haben, dass der StringBuilder gar nicht so viel bringen soll, weil der Compiler das eh in einen StringBuilder umwandelt.

Er wandelt schon viel automatisch in einen StringBuilder um. Aber alles kann er auch nicht umwandeln. Um sowas zu klären hilft es oftmals, wenn man einen Blick in den decompilierten Quellcode wirft. Aus deinem Code würde der Compiler wohl so etwas in die Richtung machen:

Java:
String tmp = "Dies ist ein Beispiel";
while (tmp.length() < 30) 
  tmp = new StringBuilder(String.valueOf(tmp)).append("X").toString();

In den StringUtils (Apache common.lang) gibt es da die "Pad" Funktionen für. Man muss ja nicht jedes Rad neu erfinden - wenn externe libs benutzt werden dürfen wäre das meiner Meinung nach die beste Lösung. Da gibt es auch noch andere recht hilfreiche String funktionen die die Standard API nicht bietet.

StringUtils (Commons Lang 3.0-SNAPSHOT API)

Also das halte ich wiederum für Schwachsinn. Nur wegen einer einfachen, äußerst leicht zu implementierenden Methode die Apache Commons mitzuschleifen ... sorry, aber das ist wirklich oversized.
 

DARK_ZERATO2

Mitglied
Die beiden methoden funktionieren ja aber wie ma nim meinem Quellcode sehen kann
(auch wenn er für euch unübersichtlich ist)

mache ich eine SQÖ abfrage und brauche für die Felder die ich aus lese eine methode die alle String einer Spalte gleich lang macht damit das wie eine tabelle aussieht

z.b.

HANSSSS......Jürgen
MÜLER..........Hans
MYER...........Klaus

am besten ohne die punkte

halt das das gut aussieht

das will aber nicht so


sonst kann mir auch wer sagen wie ich eine Jtable füllen kann (methode dazu so... column.set......)
 

The_S

Top Contributor
aber wie ma nim meinem Quellcode sehen kann
(auch wenn er für euch unübersichtlich ist)

Er ist unübersichtlich. Außerdem wär er evtl. übersichtlicher, wenn du nicht nur den Quellcode hingeklatscht hättest, sondern etwas dazu geschrieben, was wo wie und warum gemacht wird, und wie es eigentlich sein soll :p

mache ich eine SQÖ abfrage und brauche für die Felder die ich aus lese eine methode die alle String einer Spalte gleich lang macht damit das wie eine tabelle aussieht

Jo ... ist also nur für die Ausgabe für dich zum Testen!? Alle drei vorgestellten Methoden helfen die bei deinem Problem. Kannst du dich nicht für eine entscheiden, oder wo liegt das Problem?

das will aber nicht so

Solche Aussagen disqualifizieren eigentlich schon. WAS will nicht so? WIE hast du es versucht? WAS ist dabei rausgekommen? WIE sollte es eigentlich aussehen? Kam es dabei zu FEHLERMELDUNGEN? Falls ja, WIE sehen diese aus?

sonst kann mir auch wer sagen wie ich eine Jtable füllen kann (methode dazu so... column.set......)

Gnädig - du hast uns auserkoren, dass wir dir die JTable erklären dürfen ... :noe: . Was hälst du von Google? Was hälst du von der FAQ? Da gibt es ein fettes Tutorial zur JTable wo mehr als genug Informationen für dich drinstehen.

Wenn du professionelle und persönliche Nachhilfe willst, schreib ein Inserat in die Jobbörse.
 
G

Gast2

Gast
Die beiden methoden funktionieren ja aber wie ma nim meinem Quellcode sehen kann
(auch wenn er für euch unübersichtlich ist)

mache ich eine SQÖ abfrage und brauche für die Felder die ich aus lese eine methode die alle String einer Spalte gleich lang macht damit das wie eine tabelle aussieht

z.b.

HANSSSS......Jürgen
MÜLER..........Hans
MYER...........Klaus

am besten ohne die punkte

halt das das gut aussieht

das will aber nicht so


sonst kann mir auch wer sagen wie ich eine Jtable füllen kann (methode dazu so... column.set......)

Ich weiß zwar immer noch nicht genau was du willst. Aber wenn du die namen auf der Konsole ausgeben lassen willst und dass sie schön angeordnet sind würde ich den Tabulator benutzen.
Java:
System.out.println(name + "\t" + vorname)
 

Ähnliche Java Themen


Oben