JTabbedPane JLabel, JTextField - PullRequest
       60

JTabbedPane JLabel, JTextField

1 голос
/ 25 апреля 2011

Да, у меня есть JTabbedPane с JPanel, который содержит JLabel и JTextField.

мой код

Объявление панели JTabbed:

        this.tabPane = new JTabbedPane();
    this.tabPane.setSize(750, 50);
    this.tabPane.setLocation(10, 10);
        tabPane.setSize(750,450);
    tabPane.add("ControlPanel",controlPanel);

объявление текстового поля:

    this.channelTxtFld = new JTextField("");
    this.channelTxtFld.setFont(this.indentedFont);
    this.channelTxtFld.setSize(200, 30);
    this.channelTxtFld.setLocation(200, 10);

JLabel: this.channelLabel = new JLabel ("Channel"название : ");this.channelLabel.setSize (150, 30);this.channelLabel.setLocation (10,10);

private void createPanels() {
    controlPanel = new JPanel();
    controlPanel.setSize(650,500);
}
 private void fillPanels() {
    controlPanel.add(channelLabel);
    controlPanel.add(channelTxtFld);

}

Так что мой план состоял в том, чтобы иметь панель с вкладками, у которой есть JPanel, где у меня есть несколько надписей, текстовых полей и кнопок на фиксированных позициях, нопосле этого это мой результат:

http://i.stack.imgur.com/vXa68.png

Я хотел, чтобы у меня был JLabel, а рядом с ним был взрослый JTextfield слева, а не посередине.

Кто-нибудь знает, в чем моя ошибка?

спасибо:)

Ответы [ 3 ]

3 голосов
/ 25 апреля 2011

Используйте LayoutManager и рассмотрите также методы setPreferredSize, setMinimumSize, setMaximumSize для настройки границ компонентов, в зависимости от того, какой желаемый эффект вы получаете.

3 голосов
/ 25 апреля 2011

Предполагая макет JPanel по умолчанию, FlowLayout, присвойте JTextField ненулевое число columns и присвойте JLabel a JLabel.LEFT ограничение.

Приложение:

взрослый JTextField

Как-то так?

enter image description here

import java.awt.*;
import javax.swing.*;

/**
 * @see http://stackoverflow.com/questions/5773874
 */
public class JTabbedText {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            private final JTabbedPane jtp = new JTabbedPane();

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                jtp.setPreferredSize(new Dimension(400, 200));
                jtp.addTab("Control", new MyPanel("Channel"));

                f.add(jtp, BorderLayout.CENTER);
                f.pack();
                f.setVisible(true);
            }
        });
    }

    private static class MyPanel extends JPanel {

        private final JLabel label = new JLabel("", JLabel.LEFT);
        private final JTextField text = new JTextField();

        public MyPanel(String name) {
            this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
            label.setText(name);
            label.setAlignmentY(JLabel.TOP_ALIGNMENT);
            text.setAlignmentY(JTextField.TOP_ALIGNMENT);
            this.add(label);
            this.add(text);
        }
    }
}
3 голосов
/ 25 апреля 2011

Какой тип Layout Manager вы используете для своей ControlPanel, вы, вероятно, хотите BorderLayout, размещая метку на западе и TextField в центре.

Кстати, установка размера и положения различных компонентов не имеет смысла, если вы не используете Null Layout, что не очень хорошая идея. Поэтому я бы удалил все эти вещи и позволил Менеджеру по раскладке сделать это за вас.

...