Java TableLayout Beispiel / Example

Posted: Dezember 13th, 2011 | Author: admin | Filed under: Programmieren | Tags: , , , , , | 1 Comment »

Oft benutzte ich in meinen Anwendungen das praktische TableLayout. Es ist standardmäßig kein Bestandteil von Java, ihr könnt euch jedoch die Bibliothek hier herunterladen: http://java.sun.com/products/jfc/tsc/articles/tablelayout/apps/TableLayout.jar

Mit dem TableLayout könnt ihr folgende Größen definieren:

  • Prozentuale (in Prozent 0.5 = 50%)
  • Absolute (Pixel 200 = 200 Pixel)
  • Relative (TableLayout.FILL = den restlichen Platz verwenden)

Also Beispiel hier mehrere Buttons:

  • Spalten: 40%, 30%, TableLayout.FILL
  • Reihen: 200 Pixel, TableLayout.FILL

image

Hier der Quellcode:

import info.clearthought.layout.TableLayout;

import java.awt.EventQueue;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TableLayoutTutorial extends JFrame {

  private JPanel contentPane;

  /**
   * Launch the application.
   */
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          TableLayoutTutorial frame = new TableLayoutTutorial();
          frame.setVisible(true);
        catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

  /**
   * Create the frame.
   */
  public TableLayoutTutorial() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100100450300);
    contentPane = new JPanel();
    
    double[][] layout = new double[][]{
        // X-Achse
        {0.40.3, TableLayout.FILL},
        
        // Y-Achse
        {200, TableLayout.FILL}
    };

    TableLayout contentPaneLayout = new TableLayout(layout);
    contentPane.setLayout(contentPaneLayout);
    setContentPane(contentPane);
    
    // "0,0" X-Position, Y-Position
    contentPane.add(new JButton("40% / 200")"0,0");
    contentPane.add(new JButton("30% / 200")"1,0");
    contentPane.add(new JButton("REST / 200")"2,0");
    
    contentPane.add(new JButton("40% / REST")"0,1");
    contentPane.add(new JButton("30% / REST")"1,1");
    contentPane.add(new JButton("REST / REST")"2,1");
  }

}

Java JButton mit Hover-Effekt

Posted: November 17th, 2011 | Author: admin | Filed under: Programmieren | Tags: , , , , , , , | No Comments »

Öfters verwende ich in  meinen Programmen einen Button der sein Icon ändert sobald man mit der Maus über diesen fährt. Also ein JButton mit Hover-Effekt. Die folgende Klasse implementiert diese Funktionalität von Haus aus. Beim Konstruktoraufruf können zwei ImageIcons übergeben werden.

Hier die Klasse JButtonHoverable.java:

package de.roth.jsona.view.button;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;

public class JButtonHoverable extends JButton{

   private ImageIcon imageIconHovered;
   private ImageIcon imageIcon;
   private boolean hoverable;
   
   public JButtonHoverable(ImageIcon imageIcon, ImageIcon imageIconHovered, String text){
      super(imageIcon);
      this.hoverable = true;
      this.imageIconHovered = imageIconHovered;
      this.imageIcon = imageIcon;
      this.setText(text);
      this.addHoverMouseListener();   
   }
   
   public JButtonHoverable(ImageIcon imageIcon, ImageIcon imageIconHovered){
      super(imageIcon);
      this.hoverable = true;
      this.imageIconHovered = imageIconHovered;
      this.imageIcon = imageIcon;
      this.addHoverMouseListener();
   }

   public ImageIcon getImageIconHovered() {
      return imageIconHovered;
   }

   public ImageIcon getImageIcon() {
      return imageIcon;
   }
   
   public void setHoverable(boolean hoverable){
      this.hoverable = hoverable;
   }
   
   private void addHoverMouseListener(){
      this.      
      addMouseListener(new MouseAdapter(){
         public void mouseEntered(MouseEvent e) {
            if(hoverable){
               JButtonHoverable button = ((JButtonHoverable)e.getSource());
               button.setIcon(button.getImageIconHovered());               
            }
         }
         
         public void mouseExited(MouseEvent e) {
            JButtonHoverable button = ((JButtonHoverable)e.getSource());
            button.setIcon(button.getImageIcon());
         }
      });
   }
}

Und so wird die Klasse verwendet:

JButtonHoverable buttonHoverable = new JButtonHoverable(new ImageIcon(
      getClass().getClassLoader().getResource(
            "de/roth/icon/blau.png"))new ImageIcon(
      getClass().getClassLoader().getResource(
            "de/roth/icon/rot.png")));

Java List zufällig sortieren / mischen / shufflen

Posted: Oktober 25th, 2011 | Author: admin | Filed under: Programmieren | Tags: , , , , , , , , , , | No Comments »

Schon oft in meinem Programmierer-Dasein habe ich eine List oder eine ArrayList in Java zufällig mischen müssen. Das ganze geht ziemlich einfach. Die Klasse Collections bietet uns die Methode shuffle an. Folgendes Code-Beispiel zeigt wie:

import java.util.ArrayList;
import java.util.Collections;

public class ListZufaelligSortieren {
  
  public static void main(String[] args) {
    
    ArrayList<String> namensListe = new ArrayList<String>();
    
    String name1 = new String("Peter");
    String name2 = new String("Paul");
    String name3 = new String("Maria");
    String name4 = new String("Otto");
    
    namensListe.add(name1);
    namensListe.add(name2);
    namensListe.add(name3);
    namensListe.add(name4);
    
    // List durcheinander mischen
    Collections.shuffle(namensListe);
        
    for(String name : namensListe){
      System.out.print(name);
      System.out.print(" ");
    }
    // Ausgabe: Maria Paul Otto Peter
  }
}

Java: Reguläre Ausdrücke

Posted: August 1st, 2011 | Author: admin | Filed under: Programmieren, Tutorials | Tags: , , , , , , , | No Comments »

Oft will man einen bestimmten Text nach gewissen Kriterien parsen und analysieren. Dafür eignen sich Reguläre Ausdrücke bis zu einem gewissen Grad hervorragend. Ein Regulärer Ausdruck ist eine syntaktische Beschreibung einer Zeichenkette die zum Beispiel in einem Text, einfach oder mehrfach, vorhanden sein kann. In diesem kleinen Code-Beispiel möchte ich kurz erklären wie ihr einen Regulären Ausdruck in Java anwenden könnt.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularExpression {

  public static void main(String[] args) {
    // Text zum Parsen
    String text = new String("Das derzeit gebräuchlichste Zahlensystem ist"
        + " das Dezimalsystem mit den Ziffern 1, 2, 3, 4, 5, 6, "
        + "7, 8, 9 und 0.");
   
    // Regulärer Ausdruck wird in ein Pattern kompiliert
    // [0-9]+ beschreibt alle Zahlen mit einer oder mehr Stellen
    Pattern pattern = Pattern.compile("[0-9]+");

    // Ein Matcher wird mit dem Pattern erzeugt
    Matcher matcher = pattern.matcher(text);

    // Matcher findet den nächsten Treffer
    // solange bis es keine Treffer mehr gibt, dann
    // wird die Schleife abgebrochen.
    while (matcher.find()) {
      System.out.print(matcher.group() + " ");
    }
   
    // Ausgabe: 1 2 3 4 5 6 7 8 9 0
  }
}

Vor einiger Zeit habe ich ein Programm geschrieben mit dem ihr Regulärer Ausdrücke austesten könnt. Es nennt sich Java Regular Expression Tester.

image


Java Runden und genaues Rechnen

Posted: Juli 29th, 2011 | Author: admin | Filed under: Programmieren, Tutorials | Tags: , , , , | No Comments »

Will man in Java ausgerechnete Werte in einer GUI oder auf der Konsole darstellen hat man oft das Problem, dass man sehr lange Nachkommastellen erhält. Addiert man zum Beispiel zehn mal in einer Schleife den Wert 0.1 auf eine Variable die Initial 0 war so erhält man nicht wie erwartet als Ergebnis 1, sondern "0.9999999999999999".

double x = 0; 
for (int i = 0; i < 10; i++) { 
   x = x + 0.1; 

System.out.println(x); 
// Ausgabe: 0.9999999999999999

imageKein Anwender will solche Zahlen auslesen müssen. Leider kommt es beim Rechnen mit Double-Werten immer wieder zu diesem Problem. Dies liegt einfach daran, dass in Java zum Beispiel ein Double-Wert immer nur 64-Bit hat, also es rein logisch gar nicht möglich ist alle Zahlen "abzudecken". Deswegen wird lediglich eine approximative Darstellung einer reellen Zahl durch Double-Werte ermöglicht. Mehr dazu unter http://de.wikipedia.org/wiki/Gleitkommazahl. Der Einsatz von variabel großen Zahlen ist die Lösung für diese Probleme. Java bietet von Haus aus eine solche Klasse an: BigDecimal. Mit ihr ist es möglich mit beliebig großen oder beliebig kleinen Zahlen mit beliebig viel Nachkommastellen zu rechnen. Gerade für das wissenschaftliche Arbeiten zum Beispiel in der Physik wenn es auf Genauigkeit ankommt wäre es natürlich fatal mit Double-Werten zu Rechnen, die bezogen auf die Masse eines Elektrons katastrophale Ungenauigkeiten aufweisen würde.

BigDecimal bietet zusätzlich die Funktion an Zahlen nach mehreren Kriterien zu runden. Dies nutzen wir aus um unseren "vermurksten" Double-Wert zu korrigieren.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RundenInJava {
  public static void main(String[] args) {
    double x = 0;
    for (int i = 0; i < 10; i++) {
      x = x + 0.1;
    }
    System.out.println(x);
    // Ausgabe: 0.9999999999999999

    BigDecimal xGerundet = new BigDecimal(x);

    // Runden auf 2 Nachkommastellen zur nähsten
    // Nachbarzahl, falls beide Nachbarn gleichweit
    // entfernt sind wird hochgerundet!
    System.out.println((xGerundet.setScale(2, RoundingMode.HALF_UP)).toString());
    // Ausgabe: 1.00
  }
}

BigDecimal bietet natürlich auch alle nötigen Grundrechenarten, anhand von Methoden an, um damit rechnen zu können.


Pages: 1 2 3 4 5 6 7 8 Nächste Seite