gpt4 book ai didi

java - TextField 大小和垂直对齐

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:19 25 4
gpt4 key购买 nike

我使用 MigLayoutDialogBox 上。

每个面板都使用 MigLayout。

显示行有一个面板。每列都有一个面板(交付类型、选择元素、出击)。输出文件行有一个面板。有一个按钮面板。

也许有更好的方法可以在没有太多面板的情况下做到这一点?

example with miglayout

我的代码

//set global layout
this.setLayout( new MigLayout( "wrap 3, debug" ) );

this.add( getSearchPanel(), "span 3, wrap" );

// middle section
this.add( getLivraison(), "width 33%" );
this.add( getChoixElement(), "width 33%" );
this.add( getProfile(), "width 33%" );

JLabel lblFichierSortie = new JLabel( "Output file" );
JTextField txtFichierSortie = new JTextField();
this.add( lblFichierSortie, "span 2, right" );
this.add( txtFichierSortie, "width 33%, wrap" );

this.add( getButton(), "span 3, right" );

private JPanel getSearchPanel() {
JPanel searchPanel = new JPanel( new MigLayout() );

JLabel lblEmission = new JLabel( "Show" );
JTextField txtEmission = new JTextField( 10 );
JTextField txtEM = new JTextField( 5 );

searchPanel.add( lblEmission, "width 2%" );
searchPanel.add( txtEmission, "split 2,right,width 60%, growx" );
searchPanel.add( txtEM, "width 38%, growx" );

return searchPanel;
}

private JPanel getLivraison() {
JPanel livraisonPanel = new JPanel( new MigLayout() );
JLabel lblComponent1 = new JLabel( "Delivery type" );
JCheckBox chkFluxElementaire = new JCheckBox( "Flux" );
JCheckBox chkTranscoding = new JCheckBox( "Transcoding" );

livraisonPanel.add( lblComponent1, "wrap" );
livraisonPanel.add( chkFluxElementaire, "wrap" );
livraisonPanel.add( chkTranscoding, "wrap" );

return livraisonPanel;
}

private JPanel getChoixElement() {
JPanel component2 = new JPanel( new MigLayout() );
JLabel lblChoix = new JLabel( "Choose element" );
JLabel lblVideo = new JLabel( "Vidéo" );


JLabel lblAudio = new JLabel( "Audio" );
JLabel lblAudio2 = new JLabel( "Audio 2" );
JLabel lblSubTitle = new JLabel( "ST" );
JLabel lblMontage = new JLabel( "Montage" );

//todo put combobox below every label
component2.add( lblChoix, "wrap" );
component2.add( lblVideo,"wrap" );
component2.add( lblAudio,"wrap" );
component2.add( lblAudio2, "wrap" );
component2.add( lblSubTitle, "wrap" );
component2.add( lblMontage, "wrap" );

return component2;
}

private JPanel getProfile() {
JPanel component3 = new JPanel( new MigLayout() );
JLabel lblSortie = new JLabel( "Sortie" );
component3.add( lblSortie, "wrap" );

JLabel lblProfil = new JLabel( "Profil" );
component3.add( lblProfil, "wrap" );

JComboBox cbxProfil = new JComboBox();
component3.add( cbxProfil, "wrap" );

return component3;
}

private JPanel getButton() {
JPanel buttonPanel = new JPanel( new MigLayout( "fillx,insets 0" ) );

JButton okButton = new JButton( "Ok" );
okButton.setMnemonic( 'O' );
buttonPanel.add( okButton, "split,right,width 100!" );

// Cancel button
JButton cancelButton = new JButton( "Cancel" );
cancelButton.setMnemonic( 'C' );

buttonPanel.add( cancelButton, "width 100!" );
return buttonPanel;
}

在我移动窗口之前,我的文本字段没有大小,我不明白为什么。另外,为什么不是每列的组件都从面板的顶部开始?

最佳答案

针对“顶部对齐问题”试试这个:

// set global layout
this.setLayout(new MigLayout("wrap 3, debug", null, "[top]"));

对于“texfield 大小问题”:

this.add(getSearchPanel(), "span 3, wrap, grow");

如果你想在没有内部 JPanel 的情况下获得相同的结果,你可以这样做:

final JLabel lblEmission = new JLabel("Show");
final JTextField txtEmission = new JTextField(10);
final JTextField txtEM = new JTextField(5);

this.add(lblEmission, "width 2%, span 3, split 3");
this.add(txtEmission, "right,width 60%, growx");
this.add(txtEM, "width 38%, growx");

但是,这不是我最喜欢的解决方案。使用内部面板,代码更加简单且可重用。我认为当您在组件上添加一些用于用户交互的监听器和用于与模型交互的 Controller 时,此代码将过于复杂。当发生这种情况时,您可能希望将 SearchPanel 提取到具有 single responsability 的可重用顶级类中.如果没有一个简单的内面板,提取这个类就会困难得多。

这就是为什么当我设计 swing gui 时,我更喜欢先使用 BorderLayout然后是 MigLayout(用于更复杂的面板)。

关于java - TextField 大小和垂直对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com