/*
Code revised from Desktop Java Live:
http://www.sourcebeat.com/downloads/
*/
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
public class FeedBeanExample3 extends JPanel {
JTextField nameField;
JTextField siteField;
JTextField feedField;
JComboBox feedTypesComboBox;
JCheckBox customCheckIntervalCheckbox;
JTextField intervalField;
Feed feed;
public FeedBeanExample3() {
createFeed();
DefaultFormBuilder formBuilder = new DefaultFormBuilder(new FormLayout(""));
formBuilder.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
formBuilder.appendColumn("right:pref");
formBuilder.appendColumn("3dlu");
formBuilder.appendColumn("fill:p:g");
this.nameField = new JTextField();
formBuilder.append("Name:", this.nameField);
this.siteField = new JTextField();
formBuilder.append("Site Url:", this.siteField);
this.feedField = new JTextField();
formBuilder.append("Feed Url:", this.feedField);
this.feedTypesComboBox = new JComboBox(Arrays.asList(new FeedType[]{
new FeedType("RSS_09"), new FeedType("RSS_093"), new FeedType("RSS_20"),
new FeedType("ATOM_03")}).toArray());
formBuilder.append("Feed Type:", this.feedTypesComboBox);
CustomCheckIntervalModel customCheckIntervalModel = new CustomCheckIntervalModel(getFeed());
this.customCheckIntervalCheckbox = new JCheckBox();
this.customCheckIntervalCheckbox.setModel(customCheckIntervalModel);
formBuilder.append("Custom Check Interval:", this.customCheckIntervalCheckbox);
this.intervalField = new JTextField();
formBuilder.append("Interval:", this.intervalField);
formBuilder.append(new JButton(new ShowFeedInformationAction()), 3);
initializeFormElements();
add(formBuilder.getPanel());
}
private void createFeed() {
this.feed = new Feed();
this.feed.setName("ClientJava.com");
this.feed.setSiteUrl("http://www.clientjava.com/blog");
this.feed.setFeedUrl("http://www.clientjava.com/blog/rss.xml");
this.feed.setFeedType(new FeedType("RSS_20"));
this.feed.setCustomCheckIntervalEnabled(true);
this.feed.setCheckInterval(new Integer(4));
}
private void initializeFormElements() {
this.nameField.setText(this.feed.getName());
this.siteField.setText(this.feed.getSiteUrl());
this.feedField.setText(this.feed.getFeedUrl());
this.feedTypesComboBox.setSelectedItem(this.feed.getFeedType());
if (this.feed.getCheckInterval() != null) {
this.intervalField.setText(this.feed.getCheckInterval().toString());
}
}
private void synchFormAndFeed() {
this.feed.setName(this.nameField.getText());
this.feed.setSiteUrl(this.siteField.getText());
this.feed.setFeedUrl(this.feedField.getText());
this.feed.setFeedType((FeedType) this.feedTypesComboBox.getSelectedItem());
if (this.feed.isCustomCheckIntervalEnabled()) {
this.feed.setCheckInterval(new Integer(this.intervalField.getText()));
} else {
this.feed.setCheckInterval(null);
}
}
private Feed getFeed() {
return this.feed;
}
private class ShowFeedInformationAction extends AbstractAction {
public ShowFeedInformationAction() {
super("Show Feed Information");
}
public void actionPerformed(ActionEvent event) {
synchFormAndFeed();
StringBuffer message = new StringBuffer();
message.append("<html>");
message.append("<b>Name:</b> ");
message.append(getFeed().getName());
message.append("<br>");
message.append("<b>Site URL:</b> ");
message.append(getFeed().getSiteUrl());
message.append("<br>");
message.append("<b>Feed URL:</b> ");
message.append(getFeed().getFeedUrl());
message.append("<br>");
message.append("<b>Feed Type:</b> ");
message.append(getFeed().getFeedType());
message.append("<br>");
message.append("<b>Custom Check:</b> ");
message.append(getFeed().isCustomCheckIntervalEnabled());
message.append("<br>");
message.append("<b>Check Interval:</b> ");
message.append(getFeed().getCheckInterval());
message.append("</html>");
JOptionPane.showMessageDialog(null, message.toString());
}
}
private class CustomCheckIntervalModel extends JToggleButton.ToggleButtonModel {
private Feed feed;
public CustomCheckIntervalModel(Feed feed) {
super();
this.feed = feed;
}
public boolean isSelected() {
return feed.isCustomCheckIntervalEnabled();
}
public void setSelected(boolean b) {
feed.setCustomCheckIntervalEnabled(b);
}
}
public static void main(String[] a){
JFrame f = new JFrame("Feed Bean Example 3");
f.setDefaultCloseOperation(2);
f.add(new FeedBeanExample3());
f.pack();
f.setVisible(true);
}
class Feed {
private long id = 0;
private String name;
private String siteUrl;
private String feedUrl;
private FeedType feedType;
private boolean customCheckIntervalEnabled = false;
private Integer checkInterval;
public Feed() {
}
public Feed(String name, String siteUrl, String feedUrl, FeedType feedType) {
this.name = name;
this.siteUrl = siteUrl;
this.feedUrl = feedUrl;
this.feedType = feedType;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String newName) {
this.name = newName;
}
public String getSiteUrl() {
return siteUrl;
}
public void setSiteUrl(String newSiteUrl) {
this.siteUrl = newSiteUrl;
}
public String getFeedUrl() {
return feedUrl;
}
public void setFeedUrl(String newFeedUrl) {
this.feedUrl = newFeedUrl;
}
public FeedType getFeedType() {
return feedType;
}
public void setFeedType(FeedType newFeedType) {
this.feedType = newFeedType;
}
public boolean isCustomCheckIntervalEnabled() {
return customCheckIntervalEnabled;
}
public void setCustomCheckIntervalEnabled(boolean newCustomCheckIntervalEnabled) {
this.customCheckIntervalEnabled = newCustomCheckIntervalEnabled;
}
public Integer getCheckInterval() {
return checkInterval;
}
public void setCheckInterval(Integer newCheckInterval) {
this.checkInterval = newCheckInterval;
}
public String toString() {
return this.name;
}
}
class FeedType {
private String type;
private FeedType(String type) {
this.type = type;
}
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof FeedType)) return false;
final FeedType feedType = (FeedType) o;
if (type != null ? !type.equals(feedType.type) : feedType.type != null) return false;
return true;
}
public int hashCode() {
return (type != null ? type.hashCode() : 0);
}
public String toString() {
return this.type;
}
}
}
|