GVKun编程网logo

Java Swing:如何动态更改GUI(java动态修改方法)

9

本文将分享JavaSwing:如何动态更改GUI的详细内容,并且还将对java动态修改方法进行详尽解释,此外,我们还将为大家带来关于Android:如何动态更改膨胀的标签内容?、angularjs–如

本文将分享Java Swing:如何动态更改GUI的详细内容,并且还将对java动态修改方法进行详尽解释,此外,我们还将为大家带来关于Android:如何动态更改膨胀的标签内容?、angularjs – 如何动态更改ui-router使用的默认状态?、asp.net – 如何动态更改母版页、Django FormWizard如何动态更改form_list的相关知识,希望对你有所帮助。

本文目录一览:

Java Swing:如何动态更改GUI(java动态修改方法)

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:如何动态更改膨胀的标签内容?

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使用的默认状态?

angularjs – 如何动态更改ui-router使用的默认状态?

我有一个应用程序应该根据一些API数据服务于不同的状态.如果我的应用程序的状态配置如下所示:

$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服务的表单.

有没有一种简单的方法来实现这种功能?

解决方法

你需要一个中间状态,你已经拥有它.如果从order.sharepoint中删除abstract:true,则无论OrderResolve的解析值如何,都始终转到该状态.

然后,在SharePointController中,您可以访问OrderResolve,并且可以确定目标状态:

// inside SharePointController

if (OrderResolve.hasSharepoint == true){
  $state.go('order.sharepoint.index');
else {
  $state.go('order.sharepoint.setup');
}

asp.net – 如何动态更改母版页

asp.net – 如何动态更改母版页

我想为纯aspx文件动态分配一个母版页,任何人都可以告诉我,如何做到这一点?

解决方法

您可以在default.aspx.cs中覆盖OnPreInit,并根据查询字符串中的某个值设置母版页.像这样的东西:

protected override void OnPreInit(EventArgs e)
    {
        base.OnPreInit(e);
        if (Request.QueryString["Master"] == "Simple")
            MasterPageFile = "~/Masterpages/Simple.Master";
    }

编辑:错误消息的原因可能由this question涵盖.

Django FormWizard如何动态更改form_list

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:如何动态更改GUIjava动态修改方法的分享就到这里,希望大家有所收获,若想了解更多关于Android:如何动态更改膨胀的标签内容?、angularjs – 如何动态更改ui-router使用的默认状态?、asp.net – 如何动态更改母版页、Django FormWizard如何动态更改form_list等相关知识,可以在本站进行查询。

本文标签: