本文将分享JavaSwing:如何动态更改GUI的详细内容,并且还将对java动态修改方法进行详尽解释,此外,我们还将为大家带来关于Android:如何动态更改膨胀的标签内容?、angularjs–如
本文将分享Java Swing:如何动态更改GUI的详细内容,并且还将对java动态修改方法进行详尽解释,此外,我们还将为大家带来关于Android:如何动态更改膨胀的标签内容?、angularjs – 如何动态更改ui-router使用的默认状态?、asp.net – 如何动态更改母版页、Django FormWizard如何动态更改form_list的相关知识,希望对你有所帮助。
本文目录一览:- Java Swing:如何动态更改GUI(java动态修改方法)
- Android:如何动态更改膨胀的标签内容?
- angularjs – 如何动态更改ui-router使用的默认状态?
- asp.net – 如何动态更改母版页
- Django FormWizard如何动态更改form_list
Java Swing:如何动态更改GUI(java动态修改方法)
我需要动态添加组件。此外,我需要动态更改布局。
答案1
小编典典作为参考,以下是显示基本方法的脚本validate()。这个更精致的示例显示了两个要求:它更改布局并动态添加组件。
import java.awt.*;import java.awt.event.ActionEvent;import javax.swing.*;/** @see http://stackoverflow.com/questions/5750068 */public class DynamicLayout extends JPanel { private static final LayoutManager H = new GridLayout(1, 0); private static final LayoutManager V = new GridLayout(0, 1); public DynamicLayout() { this.setLayout(H); this.setPreferredSize(new Dimension(320, 240)); for (int i = 0; i < 3; i++) { this.add(new JLabel("Label " + String.valueOf(i), JLabel.CENTER)); } } private void display() { JFrame f = new JFrame("DynamicLayout"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); JPanel p = new JPanel(); p.add(new JButton(new AbstractAction("Horizontal") { @Override public void actionPerformed(ActionEvent e) { DynamicLayout.this.setLayout(H); DynamicLayout.this.validate(); } })); p.add(new JButton(new AbstractAction("Vertical") { @Override public void actionPerformed(ActionEvent e) { DynamicLayout.this.setLayout(V); DynamicLayout.this.validate(); } })); f.add(p, BorderLayout.SOUTH); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new DynamicLayout().display(); } }); }}
Android:如何动态更改膨胀的标签内容?
我在从XML文件中填充的选项卡上设置内容时遇到问题.
我通过执行以下操作动态地将选项卡添加到我的TabHost(‘tabs’):
TabSpec passspec = tabs.newTabSpec("Pass Tab");
passspec.setIndicator("Passengers",getResources().getDrawable(R.drawable.tab_message));
passspec.setContent(new TabHost.TabContentFactory() {
public View createTabContent(String tag) {
View layout = mInflater.inflate(R.layout.tab_content_passengers,null);
return(layout);
}
});
tabs.addTab(passspec);
这很好用……我遇到的问题是稍后更改该选项卡上的内容.有没有办法实现这一点,而不用全新的布局重新膨胀所有选项卡?
我正在尝试以下内容并且没有任何反应:
mInflater = LayoutInflater.from(this);
View layout = mInflater.inflate(R.layout.tab_content_passengers,null);
TextView t = (TextView) layout.findViewById(R.id.testText);
t.setText("Hello world??");
tabMap.get(tabId).findViewById(R.id.testText).setText("The text is changed Now!");
只要您在UI线程上执行此操作,就应立即反映更改.
angularjs – 如何动态更改ui-router使用的默认状态?
$stateProvider.state('order',{ url: '/order/{serviceId}',controller: 'OrderController',abstract: true,resolve: { OrderResolve: function(Order,$stateParams){ return Order.fetch($stateParams.serviceId); } } }).state('order.sharepoint',{ url: '/sharepoint',controller: 'SharePointController' }).state('order.sharepoint.index',{ url:'',controller: 'SharePointServiceController' }).state('order.sharepoint.setup',controller: 'SharePointSetupController' }).state('order.sharepoint.confirm',controller: 'SharePointConfirmController' });
然后我希望默认2个状态中的1个基于OrderResolve对象中的值.基本上,我使用resolve来获取API数据,告诉我此用户是否已激活SharePoint服务.如果OrderResolve.hasSharepoint == true,那么我想默认为order.sharepoint.index状态,但是如果OrderResolve.hasSharepoint == false,那么我想默认为order.sharepoint.setup状态.第一个状态显示SharePoint数据,第二个状态只是“设置”Sharepoint服务的表单.
有没有一种简单的方法来实现这种功能?
解决方法
然后,在SharePointController中,您可以访问OrderResolve,并且可以确定目标状态:
// inside SharePointController if (OrderResolve.hasSharepoint == true){ $state.go('order.sharepoint.index'); else { $state.go('order.sharepoint.setup'); }
asp.net – 如何动态更改母版页
解决方法
protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); if (Request.QueryString["Master"] == "Simple") MasterPageFile = "~/Masterpages/Simple.Master"; }
编辑:错误消息的原因可能由this question涵盖.
Django FormWizard如何动态更改form_list
我能够动态调用一种与我从步骤ierier中选择的数据相关的表格。
但是当我使用该done
方法时,我可以看到myform_list
保持不变。
这是我所做的:
def get_form_list(request,form_list=None):
if form_list is None:
form_list = [ProviderForm,DummyForm,ConsummerForm,\
ServicesDescriptionForm]
return UserServiceWizard.as_view(form_list=form_list)(request)
class UserServiceWizard(SessionWizardView):
instance = None
def __init__(self,**kwargs):
self.form_list = kwargs.pop('form_list')
return super(UserServiceWizard,self).__init__(**kwargs)
def get_form_instance(self,step):
if self.instance is None:
self.instance = UserService()
return self.instance
def get_context_data(self,form,**kwargs):
data = self.get_cleaned_data_for_step(self.get_prev_step(
self.steps.current))
if self.steps.current == '1':
service_name = str(data['provider']).split('Service')[1]
form = class_for_name('th_' + service_name.lower() + '.forms',service_name + 'ProviderForm')
self.form_list['1'] = form #here my form is correctly change I can see
elif self.steps.current == '3':
service_name = str(data['consummer']).split('Service')[1]
form = class_for_name('th_' + service_name.lower() + '.forms',service_name + 'ConsummerForm')
self.form_list['3'] = form
context = super(UserServiceWizard,self).get_context_data(form=form,**kwargs)
return context
def done(self,form_list,**kwargs):
print self.form_list #here form_list contains ProviderForm,ServicesDescriptionForm
在步骤0,我的form_list可以:
{u'0': <class 'django_th.forms.wizard.ProviderForm'>,u'1': <class 'django_th.forms.wizard.DummyForm'>,u'2': <class 'django_th.forms.wizard.ConsummerForm'>,u'3': <class 'django_th.forms.wizard.DummyForm'>,u'4': <class 'django_th.forms.base.ServicesDescriptionForm'>}
在第1步,我的form_list正常:我们可以看到第二个表单是我期望的表单
{u'0': <class 'django_th.forms.wizard.ProviderForm'>,u'1': <class 'th_rss.forms.RssProviderForm'>,u'4': <class 'django_th.forms.base.ServicesDescriptionForm'>}
在步骤2中,我的form_list是ko;与步骤0相同:我的第二个表单返回到DummyForm
{u'0': <class 'django_th.forms.wizard.ProviderForm'>,u'4': <class 'django_th.forms.base.ServicesDescriptionForm'>}
我该如何更改self.form_list并保留所做的更改,get_context_data
直到向导结束而不是在每个步骤中都没有?
*这里的 *编辑 是完整的代码,可以很好地满足Rohan的建议:
def get_form(self,step=None,data=None,files=None):
"""
change the form instance dynamically from the data we entered
at the previous step
"""
if step is None:
step = self.steps.current
if step == '1':
# change the form
prev_data = self.get_cleaned_data_for_step('0')
service_name = str(prev_data['provider']).split('Service')[1]
class_name = 'th_' + service_name.lower() + '.forms'
form_name = service_name + 'ProviderForm'
form_class = class_for_name(class_name,form_name)
form = form_class(data)
elif step == '3':
# change the form
prev_data = self.get_cleaned_data_for_step('2')
service_name = str(prev_data['consummer']).split('Service')[1]
class_name = 'th_' + service_name.lower() + '.forms'
form_name = service_name + 'ConsummerForm'
form_class = class_for_name(class_name,form_name)
form = form_class(data)
else:
# get the default form
form = super(UserServiceWizard,self).get_form(step,data,files)
return form
def done(self,**kwargs):
"""
Save info to the DB
The process is :
1) get the infos for the Trigger from step 0,2,4
2) save it to TriggerService
3) get the infos from the "Provider" and "Consummer" services
at step 1 and 3
4) save all of them
"""
# get the datas from the form for TriggerService
i = 0
for form in form_list:
# cleaning
data = form.cleaned_data
# get the service we selected at step 0 : provider
if i == 0:
trigger_provider = UserService.objects.get(
name=data['provider'],user=self.request.user)
model_provider = get_service_model('provider',data)
# get the service we selected at step 2 : consummer
elif i == 2:
trigger_consummer = UserService.objects.get(
name=data['consummer'],user=self.request.user)
model_consummer = get_service_model('consummer',data)
# get the description we gave for the trigger
elif i == 4:
trigger_description = data['description']
i += 1
# save the trigger
trigger = TriggerService(
provider=trigger_provider,consummer=trigger_consummer,user=self.request.user,status=True,description=trigger_description)
trigger.save()
model_fields = {}
# get the datas from the form for Service related
# save the related models to provider and consummer
i = 0
for form in form_list:
model_fields = {}
data = form.cleaned_data
# get the data for the provider service
if i == 1:
for field in data:
model_fields.update({field: data[field]})
model_fields.update({'trigger_id': trigger.id,'status': True})
model_provider.objects.create(**model_fields)
# get the data for the consummer service
elif i == 3:
for field in data:
model_fields.update({field: data[field]})
model_fields.update({'trigger_id': trigger.id,'status': True})
model_consummer.objects.create(**model_fields)
i += 1
return HttpResponseRedirect('/')
今天关于Java Swing:如何动态更改GUI和java动态修改方法的分享就到这里,希望大家有所收获,若想了解更多关于Android:如何动态更改膨胀的标签内容?、angularjs – 如何动态更改ui-router使用的默认状态?、asp.net – 如何动态更改母版页、Django FormWizard如何动态更改form_list等相关知识,可以在本站进行查询。
本文标签: