Java Gnome FAQ Widgets

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: In this part of the Java Gnome programming tutorial, we will introduce some widgets. Widgets are basic building blocks of a GUI application. Over the years, several widgets became a sta...)
(нарушало авторские права)
 
Строка 1: Строка 1:
-
In this part of the Java Gnome programming tutorial, we will introduce some widgets.
 
-
Widgets are basic building blocks of a GUI application. Over the years, several widgets became a standard in all toolkits on all OS platforms.
 
-
For example a button, a check box or a scroll bar. The GTK+ toolkit's philosophy is to keep the number of widgets at a minimum level. More specialized widgets are created as custom widgets. 
 
-
 
-
== Label ==
 
-
 
-
The <b>Label</b> widget shows text.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.Label;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program uses Label widget
 
-
* to display text.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
public class GLabel extends Window {
 
-
 
-
 
-
    public GLabel() {
 
-
   
 
-
        setTitle("Death song");
 
-
 
-
        initUI();
 
-
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();
 
-
    }
 
-
   
 
-
    public void initUI() {
 
-
 
-
        Label lyrics = new Label("Lets sing the death song kids\n\n" +
 
-
        "We light a candle on an earth\n" +
 
-
        "We made into hell\n" +
 
-
        "And pretend that were in heaven\n" +
 
-
        "Each time we do we get\n" +
 
-
        "The blind mans ticket\n" +
 
-
        "And we know that nothings true\n" +
 
-
        "I saw priest kill a cop on the tv\n" +
 
-
        "And I know now theyre our heroes too\n\n" +
 
-
 
-
        "We sing the death song kids\n" +
 
-
        "Because weve got no future\n" +
 
-
        "And we want to be just like you\n" +
 
-
        "And we want to be just like you\n");
 
-
       
 
-
        add(lyrics); 
 
-
       
 
-
        setBorderWidth(8);
 
-
    }
 
-
   
 
-
    public static void main(String[] args) {
 
-
        Gtk.init(args);
 
-
        new GLabel();
 
-
        Gtk.main();
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
The code example shows some lyrics on the window.
 
-
 
-
<source lang="java">
 
-
Label lyrics = new Label("Lets sing the death song kids\n\n" +
 
-
"We light a candle on an earth\n" +
 
-
...
 
-
</source>
 
-
 
-
This is the text we will display in the Label widget.
 
-
 
-
<source lang="java">
 
-
setBorderWidth(8);
 
-
</source>
 
-
 
-
The <b>Label</b> is surrounded by some empty space.
 
-
 
-
[[image: Java_Gnome_faq_label.png| center]]
 
-
 
-
== HSeparator ==
 
-
 
-
<b>HSeparator</b> is an ornament widget,  which can be used to separate items on the window.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.HSeparator;
 
-
import org.gnome.gtk.Label;
 
-
import org.gnome.gtk.VBox;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* Java Gnome tutorial
 
-
*
 
-
* This program shows how to use
 
-
* a horizontal separator.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
 
-
public class GHSeparator extends Window {
 
-
 
-
    private final int VERTICAL_SPACE = 15;
 
-
    private final int BORDER_AROUND = 25;
 
-
    private final float Y_ALIGN = 0f;
 
-
    private final float X_ALIGN = 0f;
 
-
 
-
    public GHSeparator() {
 
-
   
 
-
        setTitle("HSeparator");
 
-
       
 
-
        initUI();
 
-
       
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();
 
-
       
 
-
    }   
 
-
   
 
-
    public void initUI() {
 
-
     
 
-
        VBox vbox = new VBox(false, VERTICAL_SPACE);
 
-
       
 
-
        Label zinc = new Label("Zinc is a moderately reactive, blue" +
 
-
        "gray metal that tarnishes in moist air and burns in air of zinc " +
 
-
        "oxide. It reacts with acids, alkalis and other non-metals. If not" +
 
-
        "completely pure, zinc reacts with dilute acids to release hydrogen.");
 
-
 
-
        zinc.setLineWrap(true);
 
-
        zinc.setAlignment(X_ALIGN, Y_ALIGN);
 
-
 
-
        vbox.packStart(zinc);
 
-
       
 
-
        HSeparator hsep = new HSeparator();
 
-
        vbox.packStart(hsep);
 
-
       
 
-
        Label copper = new Label("Copper is an essential trace nutrient to" +
 
-
        "all high plants and animals. In animals, including humans," +
 
-
        "it is found primarily in the bloodstream, as a co-factor in various" +
 
-
        "enzymes, and in copper-based pigments. However, in sufficient" +
 
-
        "amounts, copper can be poisonous and even fatal to organisms.");
 
-
       
 
-
        copper.setAlignment(X_ALIGN, Y_ALIGN);
 
-
        copper.setLineWrap(true);
 
-
 
-
        vbox.packStart(copper);
 
-
        add(vbox);
 
-
       
 
-
        setResizable(false);
 
-
        setBorderWidth(BORDER_AROUND);
 
-
    }
 
-
   
 
-
 
-
    public static void main(String[] args) {
 
-
        Gtk.init(args);
 
-
        new GHSeparator();
 
-
        Gtk.main();
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
In our code example, we have descriptions of two chemical elements, which are separated by the horizontal separator.
 
-
 
-
<source lang="java">
 
-
zinc.setLineWrap(true);
 
-
</source>
 
-
 
-
This line wraps the text. This is necessary for longer texts.
 
-
 
-
<source lang="java">
 
-
zinc.setAlignment(X_ALIGN, Y_ALIGN);
 
-
</source>
 
-
 
-
This code line aligns the text to the left.
 
-
 
-
<source lang="java">
 
-
HSeparator hsep = new HSeparator();
 
-
vbox.packStart(hsep);
 
-
 
-
</source>
 
-
 
-
The <b>HSeparator</b> widget is created and placed in between the two label widgets.
 
-
 
-
[[image: Java_Gnome_faq_separator.png| center]]
 
-
 
-
== CheckButton ==
 
-
 
-
<b>CheckButton</b> is a widget, that has two states. On and Off.
 
-
The On state is visualised by a check mark. It is used to denote some boolean property.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.CheckButton;
 
-
import org.gnome.gtk.Fixed;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.ToggleButton;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program uses a CheckButton to
 
-
* toggle the visibility of a window title.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
 
-
public class GCheckButton extends Window implements ToggleButton.Toggled {
 
-
 
-
    CheckButton check;
 
-
    Window window;
 
-
    private String title = "Check Button";
 
-
 
-
    public GCheckButton() {
 
-
   
 
-
        setTitle(title);
 
-
 
-
        initUI();
 
-
       
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        setSizeRequest(250, 200);
 
-
        showAll();
 
-
    }
 
-
   
 
-
 
-
    public void initUI() {
 
-
   
 
-
        setBorderWidth(10);
 
-
       
 
-
        Fixed fixed = new Fixed();
 
-
       
 
-
        check = new CheckButton("Show title");
 
-
        check.setActive(true);
 
-
        check.connect(this);
 
-
       
 
-
        check.setCanFocus(false);
 
-
 
-
        fixed.put(check, 50, 50);
 
-
       
 
-
        add(fixed);
 
-
        setPosition(WindowPosition.CENTER);
 
-
    }
 
-
   
 
-
    public void onToggled(ToggleButton toggleButton) {
 
-
            if (check.getActive()) {
 
-
                setTitle(title);
 
-
            } else {
 
-
                setTitle("");
 
-
            }
 
-
    }
 
-
   
 
-
    public static void main(String[] args) {
 
-
   
 
-
        Gtk.init(args);
 
-
        new GCheckButton();
 
-
        Gtk.main();
 
-
       
 
-
    } 
 
-
}
 
-
</source>
 
-
 
-
We will display a title in the titlebar of the window, depending on the state of the <b>CheckButton</b>.
 
-
 
-
<source lang="java">
 
-
check = new CheckButton("Show title");
 
-
</source>
 
-
 
-
<b>CheckButton</b> widget is created.
 
-
 
-
<source lang="java">
 
-
check.setActive(true);
 
-
</source>
 
-
 
-
The title is visible by default, so we check the check button by default.
 
-
 
-
<source lang="java">
 
-
if (check.getActive()) {
 
-
    setTitle(title);
 
-
} else {
 
-
    setTitle("");
 
-
}
 
-
</source>
 
-
 
-
Depending on the state of the  <b>CheckButton</b>, we show or hide the title of the window.
 
-
 
-
[[image: Java_Gnome_faq_checkbutton.png| center]]
 
-
 
-
== TextComboBox ==
 
-
 
-
<b>TextComboBox</b> is a widget that allows the user to choose from a list of textual options.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.ComboBox;
 
-
import org.gnome.gtk.Fixed;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.Label;
 
-
import org.gnome.gtk.TextComboBox;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program shows how to use
 
-
* a TextComboBox.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
public class GTextComboBox extends Window implements ComboBox.Changed {
 
-
 
-
    TextComboBox cb;
 
-
    Label label;
 
-
 
-
 
-
    public GTextComboBox() {
 
-
   
 
-
        setTitle("TextComboBox");
 
-
       
 
-
        initUI();
 
-
       
 
-
        setSizeRequest(250, 200);
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();
 
-
    }
 
-
       
 
-
       
 
-
    public void initUI() {
 
-
       
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        Fixed fixed = new Fixed();
 
-
       
 
-
        label = new Label("");
 
-
        fixed.put(label, 55, 130);
 
-
               
 
-
        cb = new TextComboBox();
 
-
       
 
-
        cb.appendText("Ubuntu");
 
-
        cb.appendText("Mandriva");
 
-
        cb.appendText("Fedora");
 
-
        cb.appendText("Mint");
 
-
        cb.appendText("Debian");
 
-
        cb.appendText("Gentoo");
 
-
       
 
-
        cb.connect(this);
 
-
       
 
-
        fixed.put(cb, 50, 50);
 
-
       
 
-
        add(fixed);
 
-
    }
 
-
       
 
-
    public void onChanged(ComboBox comboBox) {
 
-
        String text = cb.getActiveText();
 
-
        label.setLabel(text);
 
-
    }
 
-
   
 
-
    public static void main(String[] args) {
 
-
        Gtk.init(args);
 
-
        new GTextComboBox();
 
-
        Gtk.main();
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
The example shows a text combo box and a label. The text combo box has a list of six options.
 
-
These are the names of Linux Distros. The label widget shows the selected option from the text combo box.
 
-
 
-
<source lang="java">
 
-
cb = new TextComboBox();
 
-
</source>
 
-
 
-
The <b>TextComboBox</b> widget is created.
 
-
 
-
<source lang="java">
 
-
cb.appendText("Ubuntu");
 
-
</source>
 
-
 
-
The <b>appendText()</b> method is called to fill the text combo box. 
 
-
 
-
<source lang="java">
 
-
public void onChanged(ComboBox comboBox) {
 
-
    String text = cb.getActiveText();
 
-
    label.setLabel(text);
 
-
}
 
-
 
-
</source>
 
-
 
-
The <b>onChanged()</b> method is called, when we select an option from the text combo box.  We get the selected text and set it to the label widget.
 
-
 
-
[[image: Java_Gnome_faq_textcombobox.png| center]]
 
-
 
-
== Image ==
 
-
 
-
The next example introduces the <b>Image</b> widget.
 
-
This widget displays pictures.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.Image;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program shows an image of a castle
 
-
* in the window.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
 
-
public class GImage extends Window {
 
-
    public GImage() {
 
-
   
 
-
        setTitle("Red Rock");
 
-
       
 
-
        initUI();
 
-
   
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();
 
-
    }
 
-
   
 
-
   
 
-
    public void initUI() {
 
-
   
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        Image image = new Image("redrock.png");
 
-
       
 
-
        int width = image.getRequisition().getWidth();
 
-
        int height = image.getRequisition().getHeight();
 
-
        setSizeRequest(width, height);
 
-
       
 
-
        add(image);
 
-
        setBorderWidth(2);
 
-
    }
 
-
 
-
    public static void main(String[] args) {
 
-
        Gtk.init(args);
 
-
        new GImage();
 
-
        Gtk.main();
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
We show the Red Rock castle in the window.
 
-
 
-
<source lang="java">
 
-
Image image = new Image("redrock.png");
 
-
</source>
 
-
 
-
We create an instance of the <b>Image</b> widget. Notice, that we do not catch for any exceptions. The Image widget already handles them. If the Image widget cannot find the redrock.png image, it will display a missing image by default.
 
-
 
-
<source lang="java">
 
-
Image image = new Image(castle);
 
-
Add(image);
 
-
</source>
 
-
 
-
<b>Image</b> widget is created and added to the window.
 
-
 
-
[[image: Java_Gnome_faq_redrock.jpg| center]]
 
-
 
-
In this chapter, we showed the first pack of basic widgets of the Java Gnome programming library.
 
-
 
-
== Entry ==
 
-
 
-
The <b>Entry</b> is a single line text entry field. This widget is used to enter textual data.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.Editable;
 
-
import org.gnome.gtk.Entry;
 
-
import org.gnome.gtk.Fixed;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.Label;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program shows how to use
 
-
* an Entry widget.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
 
-
public class GEntry extends Window {
 
-
 
-
    private Label label;
 
-
    private Entry entry;
 
-
 
-
    public GEntry() {
 
-
   
 
-
        setTitle("Entry");
 
-
       
 
-
        initUI();
 
-
       
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
   
 
-
        setDefaultSize(250, 200);
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();
 
-
    }
 
-
   
 
-
   
 
-
    public void initUI() {
 
-
       
 
-
        label = new Label("...");
 
-
 
-
        entry = new Entry();
 
-
 
-
        entry.connect(new Entry.Changed() {
 
-
            public void onChanged(Editable editable) {
 
-
                label.setLabel(entry.getText());
 
-
            }
 
-
        });
 
-
 
-
        Fixed fix = new Fixed();
 
-
        fix.put(entry, 60, 100);
 
-
        fix.put(label, 60, 40);
 
-
 
-
        add(fix);
 
-
 
-
    }
 
-
   
 
-
   
 
-
    public static void main(String[] args) {
 
-
        Gtk.init(args);
 
-
        new GEntry();
 
-
        Gtk.main();
 
-
    } 
 
-
}
 
-
</source>
 
-
 
-
This example shows an entry widget and a label. The text that we key in the  entry is displayed immediately in the label control.
 
-
 
-
<source lang="java">
 
-
entry = new Entry();
 
-
</source>
 
-
 
-
<b>Entry</b> widget is created.
 
-
 
-
<source lang="java">
 
-
entry.connect(new Entry.Changed() {
 
-
  public void onChanged(Editable editable) {
 
-
      label.setLabel(entry.getText());
 
-
  }
 
-
});
 
-
</source>
 
-
 
-
If the text in the <b>Entry</b> widget is changed, we call the <b>onChanged()</b> method. In this  method, we get the text from the <b>Entry</b> widget and set it to the label.
 
-
 
-
[[image: Java_Gnome_faq_entry.png| center]]
 
-
 
-
== Scale ==
 
-
 
-
The <b>Scale</b> is a widget, that lets the user graphically select a value  by sliding a knob within a bounded interval. Our example will show a volume control.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import java.io.FileNotFoundException;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gdk.Pixbuf;
 
-
import org.gnome.gtk.Fixed;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.HScale;
 
-
import org.gnome.gtk.Image;
 
-
import org.gnome.gtk.Range;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* Java Gnome tutorial
 
-
*
 
-
* This program shows how to use
 
-
* the HScale widget. It implements a
 
-
* volume control.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
public class GHScale extends Window {
 
-
 
-
    private HScale hscale;
 
-
    private Image image;
 
-
   
 
-
    private Pixbuf mute;
 
-
    private Pixbuf min;
 
-
    private Pixbuf med;
 
-
    private Pixbuf max;
 
-
 
-
    public GHScale() {
 
-
   
 
-
        setTitle("HScale");
 
-
   
 
-
        initUI();
 
-
       
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        setDefaultSize(260, 120);
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();
 
-
    }
 
-
   
 
-
    public void initUI() {
 
-
   
 
-
        loadImages();
 
-
       
 
-
 
-
        hscale = new HScale(0, 99, 1);
 
-
        hscale.setSizeRequest(130, 45);
 
-
        hscale.setCanFocus(false);
 
-
       
 
-
        image = new Image("mute.png");
 
-
       
 
-
        hscale.connect(new HScale.ValueChanged() {
 
-
 
-
            public void onValueChanged(Range range) {
 
-
                int pos = (int) hscale.getValue();
 
-
               
 
-
                if (pos == 0) {
 
-
                    image.setImage(mute);
 
-
                } else if (pos > 0 && pos <= 30) {
 
-
                    image.setImage(min);
 
-
                } else if (pos > 30 && pos < 80) {
 
-
                    image.setImage(med);
 
-
                } else {
 
-
                    image.setImage(max);
 
-
                }
 
-
            }
 
-
        });
 
-
       
 
-
        Fixed fixed = new Fixed();
 
-
       
 
-
        fixed.put(hscale, 40, 20);
 
-
        fixed.put(image, 220, 40);
 
-
       
 
-
        add(fixed);
 
-
    }
 
-
   
 
-
    private void loadImages() {
 
-
        try {
 
-
            mute = new Pixbuf("mute.png");
 
-
            min = new Pixbuf("min.png");
 
-
            med = new Pixbuf("med.png");
 
-
            max = new Pixbuf("max.png");
 
-
        } catch (FileNotFoundException e) {
 
-
            e.printStackTrace();
 
-
        }
 
-
    }
 
-
   
 
-
   
 
-
    public static void main(String[] args) {     
 
-
        Gtk.init(args);
 
-
        new GHScale();
 
-
        Gtk.main();
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
In the example above, we have  <b>HScale</b> and <b>Image</b> widgets. By dragging the scale we change the image on the <b>Image</b> widget.
 
-
 
-
<source lang="java">
 
-
hscale = new HScale(0, 99, 1);
 
-
</source>
 
-
 
-
<b>HScale</b> widget is created. The parameters are lower boundary, upper boundary and step.
 
-
 
-
<source lang="java">
 
-
int pos = (int) hscale.getValue();
 
-
</source>
 
-
 
-
In the <b>onValueChanged()</b> method we obtain the value of the scale widget.
 
-
 
-
<source lang="java">
 
-
if (pos == 0) {
 
-
    image.setImage(mute);
 
-
} else if (pos > 0 && pos <= 30) {
 
-
    image.setImage(min);
 
-
} else if (pos > 30 && pos < 80) {
 
-
    image.setImage(med);
 
-
} else {
 
-
    image.setImage(max);
 
-
}
 
-
 
-
</source>
 
-
 
-
Depending on the obtained value, we change the picture in the image widget.
 
-
 
-
[[image: Java_Gnome_faq_scale.png| center]]
 
-
 
-
== ToggleButton ==
 
-
 
-
<b>ToggleButton</b> is a button that has two states. Pressed and not pressed.
 
-
You toggle between these two states by clicking on it. There are situations where  this functionality fits well.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Color;
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.DrawingArea;
 
-
import org.gnome.gtk.Fixed;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.StateType;
 
-
import org.gnome.gtk.ToggleButton;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program demonstrates the ToggleButton
 
-
* widget. Three toggle buttons control the
 
-
* color of a drawing area.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
public class GToggleButton extends Window
 
-
            implements ToggleButton.Toggled {
 
-
 
-
    private ToggleButton tb1;
 
-
    private ToggleButton tb2;
 
-
    private ToggleButton tb3;
 
-
   
 
-
    private DrawingArea darea;
 
-
    private Color color;
 
-
 
-
    public GToggleButton() {
 
-
   
 
-
        setTitle("ToggleButton");
 
-
 
-
        initUI();
 
-
 
-
        setPosition(WindowPosition.CENTER);
 
-
       
 
-
        setSizeRequest(350, 220);
 
-
        showAll();
 
-
    }
 
-
   
 
-
   
 
-
    public void initUI() {
 
-
   
 
-
        color = new Color(0, 0, 0);
 
-
   
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        Fixed fixed = new Fixed();
 
-
 
-
        tb1 = new ToggleButton("Red");
 
-
        tb1.setSizeRequest(80, 35);
 
-
        tb1.connect(this);
 
-
       
 
-
        tb2 = new ToggleButton("Green");
 
-
        tb2.setSizeRequest(80, 35);
 
-
        tb2.connect(this);
 
-
       
 
-
        tb3 = new ToggleButton("Blue");
 
-
        tb3.setSizeRequest(80, 35);
 
-
        tb3.connect(this);
 
-
       
 
-
        darea = new DrawingArea();
 
-
        darea.modifyBackground(StateType.NORMAL, Color.BLACK);
 
-
        darea.setSizeRequest(150, 150);
 
-
 
-
        fixed.put(tb1, 20, 20);
 
-
        fixed.put(tb2, 20, 65);
 
-
        fixed.put(tb3, 20, 110);
 
-
       
 
-
        fixed.put(darea, 150, 20);
 
-
       
 
-
        add(fixed);
 
-
    }
 
-
   
 
-
 
-
    public void onToggled(ToggleButton toggleButton) {
 
-
   
 
-
        int red = color.getRed();
 
-
        int green = color.getGreen();
 
-
        int blue = color.getBlue();
 
-
   
 
-
        if ("Red".equals(toggleButton.getLabel())) {
 
-
            if (toggleButton.getActive()) {
 
-
                red = 65535;
 
-
            } else {
 
-
                red = 0;
 
-
            }
 
-
        }
 
-
       
 
-
        if ("Green".equals(toggleButton.getLabel())) {
 
-
            if (toggleButton.getActive()) {
 
-
                green = 65535;
 
-
            } else {
 
-
                green = 0;
 
-
            }
 
-
        }
 
-
   
 
-
        if ("Blue".equals(toggleButton.getLabel())) {
 
-
            if (toggleButton.getActive()) {
 
-
                blue = 65535;
 
-
            } else {
 
-
                blue = 0;
 
-
            }
 
-
        }
 
-
   
 
-
        color = new Color(red, green, blue);
 
-
        darea.modifyBackground(StateType.NORMAL, color);
 
-
    }
 
-
   
 
-
    public static void main(String[] args) {
 
-
 
-
        Gtk.init(args);
 
-
        new GToggleButton();
 
-
        Gtk.main();
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
In our example, we show three toggle buttons and a <b>DrawingArea</b>.
 
-
We set the background color of the area to black. The togglebuttons will toggle the red,  green and blue parts of the color value. The background color will depend on which togglebuttons we have pressed.
 
-
 
-
<source lang="java">
 
-
color = new Color(0, 0, 0);
 
-
 
-
</source>
 
-
 
-
This is the color value that is going to be updated with the toggle buttons.
 
-
 
-
<source lang="java">
 
-
tb1 = new ToggleButton("Red");
 
-
tb1.setSizeRequest(80, 35);
 
-
tb1.connect(this);
 
-
</source>
 
-
 
-
The <b>ToggleButton</b> widget is created. We set it's size to 80x35 pixels. It is connected to the <b>onToggled()</b> method.
 
-
 
-
<source lang="java">
 
-
darea = new DrawingArea();
 
-
darea.modifyBackground(StateType.NORMAL, Color.BLACK);
 
-
darea.setSizeRequest(150, 150);
 
-
</source>
 
-
 
-
The <b>DrawingArea</b> widget is the widget, that displays the color, mixed by the toggle buttons. At start, it shows black color.
 
-
 
-
<source lang="java">
 
-
 
-
if ("Red".equals(toggleButton.getLabel())) {
 
-
    if (toggleButton.getActive()) {
 
-
        red = 65535;
 
-
    } else {
 
-
        red = 0;
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
We update the red part of the color based on the state of the red toggle button.
 
-
 
-
<source lang="java">
 
-
color = new Color(red, green, blue);
 
-
darea.modifyBackground(StateType.NORMAL, color);
 
-
</source>
 
-
 
-
The color value is updated and set to the <b>DrawingArea</b> widget.
 
-
 
-
[[image: Java_Gnome_faq_togglebuttons.png| center]]
 
-
 
-
== Calendar ==
 
-
 
-
Our final widget is the <b>Calendar</b> widget. It is used to  work with dates.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import org.gnome.gdk.Event;
 
-
import org.gnome.gtk.Calendar;
 
-
import org.gnome.gtk.Gtk;
 
-
import org.gnome.gtk.Label;
 
-
import org.gnome.gtk.VBox;
 
-
import org.gnome.gtk.Widget;
 
-
import org.gnome.gtk.Window;
 
-
import org.gnome.gtk.WindowPosition;
 
-
 
-
/**
 
-
* ZetCode Java Gnome tutorial
 
-
*
 
-
* This program demonstrates the Calendar
 
-
* widget. We show a selected date in a
 
-
* label widget.
 
-
*
 
-
* @author jan bodnar
 
-
* website zetcode.com
 
-
* last modified March 2009
 
-
*/
 
-
 
-
public class GCalendar extends Window {
 
-
 
-
    private Calendar calendar;
 
-
    private Label label;
 
-
 
-
    public GCalendar() {
 
-
 
-
        setTitle("Calendar");
 
-
       
 
-
        initUI();
 
-
 
-
        connect(new Window.DeleteEvent() {
 
-
            public boolean onDeleteEvent(Widget source, Event event) {
 
-
                Gtk.mainQuit();
 
-
                return false;
 
-
            }
 
-
        });
 
-
       
 
-
        setDefaultSize(260, 120);
 
-
        setPosition(WindowPosition.CENTER);
 
-
        showAll();   
 
-
    }
 
-
   
 
-
    private void initUI() {
 
-
   
 
-
        VBox vbox = new VBox(false, 1);
 
-
   
 
-
        calendar = new Calendar();
 
-
        label = new Label(getDate());
 
-
       
 
-
        calendar.connect(new Calendar.DaySelected() {
 
-
 
-
            public void onDaySelected(Calendar calendar) {
 
-
                label.setLabel(getDate());
 
-
            }
 
-
        });
 
-
 
-
        vbox.add(calendar);
 
-
 
-
        label.setSizeRequest(-1, 50);
 
-
        vbox.add(label);
 
-
       
 
-
        add(vbox);
 
-
    }
 
-
   
 
-
   
 
-
    private String getDate() {
 
-
        int year = calendar.getDateYear();
 
-
        int month = calendar.getDateMonth();
 
-
        int day = calendar.getDateDay();
 
-
        String dateLabel = month + "/" + day + "/" + year;
 
-
       
 
-
        return dateLabel;
 
-
    }
 
-
 
-
   
 
-
    public static void main(String[] args) {
 
-
        Gtk.init(args);
 
-
        new GCalendar();
 
-
        Gtk.main();       
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
We have the <b>Label</b>.
 
-
The selected day from the calendar is shown in the label.
 
-
 
-
<source lang="java">
 
-
calendar = new Calendar();
 
-
</source>
 
-
 
-
<b>Calendar</b> widget is created.
 
-
 
-
<source lang="java">
 
-
public void onDaySelected(Calendar calendar) {
 
-
    label.setLabel(getDate());
 
-
};
 
-
</source>
 
-
 
-
In the <b>onDaySelected()</b> method we update the label to  the currently selected date.
 
-
 
-
[[image: Java_Gnome_faq_calendar.png| center]]
 
-
 
-
In this chapter, we finished talking about widgets in Java Gnome.
 
-
 
-
[[Категория:GTK+]]
 
-
[[Категория:Java]]
 

Текущая версия на 11:22, 7 апреля 2009