Склейка кнопок в крайнем левом углу экрана в вертикальной BoxLayout в Swing - PullRequest
0 голосов
/ 18 октября 2018

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

Отредактированный экран для отображения желаемого результата:

https://i.stack.imgur.com/Csvur.png

Однако я понятия не имею, как этого добиться.В документации для BoxLayout упоминается выравнивание по оси X, и, проверив это, оно, похоже, сосредоточено на выравнивании компонентов друг с другом, а не компонентов с относительными частями экрана.

Мой код здесь:

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JScrollPane;
import javax.swing.BoxLayout;
import javax.swing.*;

public class TabbedPanes extends JFrame implements ActionListener  
{
    JTabbedPane tabs;
    JButton but1, but2, but3, but4, but5, but6, but7, but8, but9, but10, but11, but12;
    String string1, string2; 
    JPanel pan1, pan2, pan3, pan4, pan5, pan6, pan7, pan8;
    JFrame frame;
    JScrollPane scroll;

    public void Tabs()
    {
        Box theBox = Box.createVerticalBox();

        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        but1 = new JButton("" + string1);
            but1.addActionListener(this);
        but3 = new JButton("" + string1);
        but4 = new JButton("" + string1);
        but5 = new JButton("" + string1);
        but6 = new JButton("" + string1);
        but7 = new JButton("" + string1);
        but8 = new JButton("" + string1);
        but9 = new JButton("" + string1);
        but10 = new JButton("" + string1);
        but11 = new JButton("" + string1);
        but12 = new JButton("" + string1);

        pan1 = new JPanel();                                                                   //instantiate the panel
        pan1.add(theBox);                                                                      //add the layout manager to the panel
            theBox.add(but1);                                                                  //add components to the layout manager 
                but1.setAlignmentX(Component.LEFT_ALIGNMENT);      
            theBox.add(but3);
            theBox.add(but4);
            theBox.add(but5);
            theBox.add(but6);
            theBox.add(but7);
            theBox.add(but8);
            theBox.add(but9);
            theBox.add(but10);
            theBox.add(but11);
            theBox.add(but12);

        JScrollPane scroll = new JScrollPane(pan1);                                            //instantiate the JScrollPane with a parameter = the panel
            scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

        pan2 = new JPanel();
        but2 = new JButton("" + string2);
        but2.addActionListener(this);
        pan2.add(but2);

        pan3 = new JPanel();

        pan4 = new JPanel();

        pan5 = new JPanel();

        pan6 = new JPanel();

        pan7 = new JPanel();

        pan8 = new JPanel();

        tabs = new JTabbedPane();
        Container pane = frame.getContentPane();
        pane.add(tabs);
        tabs.add("Mon", scroll);
        tabs.add("Tue", pan2);
        tabs.add("Wed", pan3);
        tabs.add("Thu", pan4);
        tabs.add("Fri", pan5);
        tabs.add("Sat", pan6);
        tabs.add("Sun", pan7);
        tabs.add("Notes", pan8);

        frame.setSize(400,400);
        frame.setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == but1);
        {
            if(string1 == "Hello!")
            {
                string1 = "Goodbye.";
                but1.setText(string1);
            }

            else 
            {
                string1 = "Hello!";
                but1.setText(string1);
            }
        }

        if(e.getSource() == but2);
        {
            if(string2 == "Hello but in the other tab now!")
            {
                string2 = "I think you can see where this is going.";
                but2.setText(string2);
            }

            else 
            {
                string2 = "Hello but in the other tab now!";
                but2.setText(string2);
            }
        }
    }

    public static void main(String[] args)
    {
        TabbedPanes TrueTabs = new TabbedPanes();
        TrueTabs.Tabs();    
    }   
}

И он создает этот экран:

То, что код в настоящее время производит:

https://i.stack.imgur.com/SZfki.png

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 18 октября 2018

Вы добавляете Box на панель, которая по умолчанию использует FlowLayout с выравниванием по центру.

Таким образом, вы можете сделать:

//pan1 = new JPanel();
pan1 = new JPanel( new FlowLayout(FlowLayout.LEFT) );

Или вам даже не нужны дополнительныепанель.

Просто добавьте поле на панель прокрутки:

//JScrollPane scroll = new JScrollPane(pan1);
JScrollPane scroll = new JScrollPane(theBox);
...