1

次のコードを記述しましたが、タブのコンポーネントが表示されません。実際、テキストボックスに何かを入力すると、タブを動的に作成したいのですが、作成されたタブには新しいテキストフィールドとボタンが含まれている必要があります。 。このコードはサンプルであり、完了した後、別の質問があります。

どこを間違えたのか教えてください。

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class TestingTab extends JFrame {

private JTextField jTextField1;
private JButton jButton1;
static ArrayList<JPanel> ary = new ArrayList<JPanel>();
private int tabIndex=0;
static int index=0;
private JTabbedPane tabbedPane;

/**
 * @param args
 */
public TestingTab(){

    super("Testing Tab Frame");
    setLayout(null);

    Handler but1 = new Handler();

    jTextField1 = new JTextField();
    jTextField1.setVisible(true);
    jTextField1.setBounds(12, 12, 85 , 30);
    add(jTextField1);

    jButton1 = new JButton("Button1");
    jButton1.setVisible(true);
    jButton1.setBounds(130, 12, 85, 30);
    add(jButton1);
    jButton1.addActionListener(but1);

    tabbedPane = new JTabbedPane();
    tabbedPane.setBounds(12, 54, 200, 220);
    tabbedPane.setVisible(false);
    add(tabbedPane);
    pack();
    setSize(250,110);

}
private class Handler implements ActionListener{
    public void actionPerformed(ActionEvent evt){
        String input = jTextField1.getText();
        setSize(250,330);
        JPanel inst = createPanel(input);
        inst.setVisible(true);
        tabbedPane.addTab(Integer.toString(tabIndex), inst);
        tabbedPane.setVisible(true);

    }

} 

protected JPanel createPanel(String input){
    JPanel inst = new JPanel();
    inst.setVisible(true);
    inst.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED),input));
    JTextField textField = new JTextField();
    textField.setVisible(true);
    JButton button = new JButton();
    button.setVisible(true);
    inst.setLayout(null);
    inst.add(button);
    inst.add(textField);
    ary.add(inst);
    tabIndex=index;
    index++;
    return inst;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
TestingTab inst = new TestingTab();
inst.setVisible(true);
}

}
4

1 に答える 1

4

パネルを作成するときにnullレイアウトを使用しています。これが、コンポーネントが表示されない理由です。レイアウトプロパティがnullの場合、コンテナはレイアウトマネージャを使用しません。これは絶対測位と呼ばれます。絶対測位の場合は、コンポーネントのサイズと位置を指定する必要があります。絶対ポジショニングアプローチには多くの欠点があり、注意して考慮する必要があります。ほとんどの場合、ヌルレイアウトは回避する必要があります。

削除するinst.setLayout(null);と、ボタンとテキストフィールドが表示されます。

レイアウトマネージャーの詳細については、レイアウトマネージャーのビジュアルガイドとレイアウトマネージャー使用をご覧ください。

于 2012-08-08T00:22:30.150 に答える