我遇到了以下问题:
我有一个JCheckbox,带有一个关联的JComboBox。 (嗯,它只与它在标签上水平相邻的事实相关联,而且,命名惯例是它们名字的前几个字符总是相同的,表明它们属于一起)。我有这些类型组件的监听器,在它发生变化时做一些事情。
现在,这些类型的元素可以出现在选项卡式窗格中(在不同的选项卡上)。 复选框可能没有Comboboxes,但如果没有Checkbox关联,则无法显示组合框。
目前,我有兴趣构建一个日志字符串,如下所示: (选项卡式面板的名称)>(JPanel的名称)>(复选框的名称)>(组合框的名称)
- >当然我会停在Checkbox名称,如果组合框没有改变,但是如果Combobox改变了,我想将它与它的Checkbox联系起来。 当然所有这些都发生在两个组件的动作事件处理程序中...... 此外,我已经获得了选项卡式面板的名称,jpanel和复选框。
这里的问题是以某种方式将组合框与复选框绑定,以便在组合框发生变化时获取复选框信息。
我希望这很清楚,请询问是否有任何需要澄清的内容
答案 0 :(得分:1)
如评论中所述,您可以创建新的组合控件并使用
这不是单CheckBox
和public class CheckCombo extends javax.swing.JPanel
{
private final javax.swing.JCheckBox jCheckBox1;
private final javax.swing.JComboBox jComboBox1;
public CheckCombo()
{
jCheckBox1 = new javax.swing.JCheckBox();
jComboBox1 = new javax.swing.JComboBox();
this.setLayout(new java.awt.BorderLayout());
this.add(jCheckBox1, java.awt.BorderLayout.WEST);
this.add(jComboBox1, java.awt.BorderLayout.CENTER);
}
public javax.swing.JComboBox getComboBox()
{
return jComboBox1;
}
public void setCheckboxSelected(boolean b)
{
jCheckBox1.setSelected(b);
}
public void setComboBoxVisible(boolean b)
{
jComboBox1.setVisible(b);
}
public void setCheckboxText(String s)
{
jCheckBox1.setText(s);
}
}
。
组合控制的简单示例:
ComboBox
只需将我的示例中的常规CheckCombo
替换为Checkbox
,然后移除关联的CheckCombo
。
您可以使用公共方法修改#import "RosterTableTableViewController.h"
#import "TFHpple.h"
#import "RosterListing.h"
#import "RosterListingCellTableViewCell.h"
#import "PlayerDetailViewController.h"
#import <iAd/iAd.h>
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
@interface RosterTableTableViewController () <ADBannerViewDelegate>
{
BOOL _bannerIsVisible;
ADBannerView *_adBanner;
}
@property (nonatomic, strong) NSMutableArray *rosters;
@property NSCache *imageCache;
@end
@implementation RosterTableTableViewController
- (void) loadRoster
{
NSURL *RosterURL = [NSURL URLWithString:@"myURL"];
...
self.rosters = rosterItems;
}
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.lancers.myqueue", 0);
//dispatch in background
dispatch_async(backgroundQueue, ^{
//execute long operation in background thread
//dispatch in main thread after long operation is finish
[self loadRoster];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData]; });
});
// Load the Cell NIB file
...
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Get a new or recycled cell
RosterListingCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RosterCell" forIndexPath:indexPath];
RosterListing *thisRosterListing = [self.rosters objectAtIndex:indexPath.row];
cell.playerNumberLabel.text = [NSString stringWithFormat:@"#%@",thisRosterListing.playerNumber];
cell.playerNameLabel.text = thisRosterListing.playerName;
cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
cell.imageView.clipsToBounds = YES;
UIImage *playerImage = [self.imageCache objectForKey:thisRosterListing.playerImageURL];
cell.imageView.image = playerImage;
if (playerImage == nil) {
NSURLSessionConfiguration *sessionConfig =
[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
thisRosterListing.playerImageURL = [thisRosterListing.playerImageURL stringByReplacingOccurrencesOfString:@"small" withString:@"medium"];
NSURLSessionDataTask *imageData = [session dataTaskWithURL:[NSURL URLWithString: thisRosterListing.playerImageURL]
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
// handle NSData
UIImage *image = [UIImage imageWithData:data];
thisRosterListing.image = image;
[self.imageCache setObject:image forKey:thisRosterListing.playerImageURL];
cell.imageView.image = image;
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}];
[imageData resume];
}
return cell;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 65)];
view.backgroundColor = [UIColor clearColor];
_adBanner = [[ADBannerView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
//_adBanner.delegate = self;
_adBanner.backgroundColor = [UIColor clearColor];
[view addSubview:_adBanner];
return view;
}
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 65;
}
@end
的状态。
干杯。