Monday, November 3, 2014

WPF Customized ComboBox with Non Existing Value



How do you show a non existing value inside a WPF ComboBox? Good question! And the sad truth is that you just cannot do it! WPF ComboBox shows only the values that are in its ItemSource. 

But don't worry, today I'll show you a workaround to this problem. In this particular example inside a ComboBox will be shown a phantom value and when user clicks on it and choose another value from the list he will be prompted to confirm in order to give him a chance not to loose this phantom value in case if he clicked on the ComboBox by mistake.

WPF Customized ComboBox with Phantom Value

The trick is that I create additional custom ComboBox with TextBlock, binding it to the original one and overlaying it.

Thursday, March 20, 2014

Java 8 Lambda Expressions Example

Finally Oracle officially presented Java 8. A key feature of Java 8 - Support for lambda expressions that allow developers to effectively apply the simultaneous computation and callback functions in programming, especially in the popular cloud applications. Function can be treated as method arguments, and code as data, which makes the final results more compact. 

Java Lambda syntax is pretty similar to what we know in C#. 
Let's see.

Starting a new Thread:


new Thread(() -> { System.out.println("Java 8 Lambda"); }).start();


Working with Collections:


List<Employee> employees = new ArrayList<>();
     employees.add(new Employee("John"));
     employees.add(new Employee("Robert"));
     employees.add(new Employee("Anna"));


Iteration:


employees.forEach(e -> e.setAge(35));


Filter:


List<Employee> filtered = employees.stream().parallel().filter
                (f -> f.getName().equals("Anna") || f.getName().equals("John"))
                .collect(Collectors.toList());

Optional<Employee> findFirst = employees.stream()
                .filter(e -> e.getName().equals("Anna")).findFirst();

Parallelism:


List<Employee> list = employees.stream()
                .parallel()
                .filter(p -> p.getAge() > 18).collect(Collectors.toList());

Happy codding friends! :)

Sunday, March 16, 2014

Best Logging for Java - Logback with SLF4J



If you're looking for good logging mechanism for Java I suggest you to use SLF4J Facade with Logback. For my opinion it's the best combination for logging in Java. Today I will show how to configure your Java project in order to use SLF4J Logback logging framework to print logs to console and file output.

Logback with SLF4J

First, download SLF4J files and Logback files.
Add these files to your CLASSPATH:
  • slf4j-api-X.X.X.jar
  • logback-core-X.X.X.jar
  • logback-classic-X.X.X.jar

Now look how simple is to use Logback! In the code all you need is this:

public class LogbackFun {
  final static Logger logback = LoggerFactory.getLogger(LogbackFun.class);

  public static void main(String[] args) {
    logback.info("Test info");
    logback.debug("Test debug");
    logback.trace("Test trace");
    logback.warn("Test warn");
    logback.error("Test error");
  }
}